電子系同學(xué) YLY 的微機(jī)實(shí)驗(yàn),x86 MASM 匯編,DOS 21H 中斷,輸入一個 4 位的十進(jìn)制數(shù)字,輸出二進(jìn)制和十六進(jìn)制。
程序有問題,讓我?guī)兔纯矗瑑扇藚s幾乎同時發(fā)現(xiàn)錯誤所在,囧。。。
我干脆把它修改正確了,放上來,我修改的地方都做了說明。
我寫匯編是用 NASM 的,對 MASM 不熟,盡管我也是從 MASM 開始學(xué)習(xí)匯編的。所以程序中的代碼我不完全會寫,但是修改程序邏輯還是可以的。
1
DATA SEGMENT
2
INF1 DB "PLEASE INPUT A NUMBER: $ ";提示語言
3
INF2 DB "OH NO. THIS IS NOT ALLOWED"
4
INPUT DB 4 DUP(0)
5
RESULT DW ?
6
SIXTEEN DB 4 DUP(0)
7
DATA ENDS
8
9
SSEG SEGMENT STACK 'STACK'
10
DW 100 DUP(?)
11
SSEG ENDS
12
13
CODE SEGMENT
14
ASSUME DS:DATA, CS:CODE, SS:SSEG
15
16
START: MOV AX,DATA
17
MOV DS,AX
18
LEA DX,INF1
19
LEA SI,INPUT
20
MOV AH,9
21
INT 21H
22
MOV AX,0
23
MOV CX,4
24
25
JUDGE: MOV AH,1 ;判斷是否符合要求
26
INT 21H
27
CMP AL,30H
28
JB JUDGE
29
CMP AL,39H
30
JA JUDGE
31
MOV [SI],AL
32
INC SI
33
LOOP JUDGE
34
MOV CX,4
35
MOV DL,' '
36
MOV AH,02H
37
INT 21H
38
XOR AX,AX
39
MOV BX,0
40
LEA SI,INPUT
41
42
AGAIN: ADD AX,AX
43
MOV BX,AX
44
ADD AX,AX
45
ADD AX,AX
46
ADD AX,BX
47
MOV BH,0
48
MOV BL,[SI]
49
SUB BL,30H
50
ADD AX,BX ;部分和計(jì)算
51
INC SI
52
LOOP AGAIN
53
MOV CX,16
54
MOV BX,AX
55
; MOV DX,AX ; coreBugZJ delete
56
push ax ; coreBugZJ insert
57
58
PRINT: ROL BX,1
59
JC BIG
60
MOV DL,30H
61
MOV AH,02H
62
INT 21H
63
LOOP PRINT
64
JMP AD
65
BIG: MOV DL,31H
66
MOV AH,02H
67
INT 21H
68
LOOP PRINT
69
AD: MOV DL,' '
70
MOV AH,02H
71
INT 21H
72
73
NEXT: ; MOV AX,DX ; coreBugZJ delete
74
pop ax ; coreBugZJ insert
75
mov dx, ax ; coreBugZJ insert
76
MOV DI,OFFSET SIXTEEN
77
MOV BX,AX
78
push ax ; coreBugZJ insert
79
80
; coreBugZJ NEXT4-NEXT3-NEXT2-NEXT1 <<== NEXT1-NEXT2-NEXT3-NEXT4
81
82
AND BH,0F0H
83
MOV CL,4
84
SHR BH,CL
85
ADD BH,30H
86
CMP BH,3AH
87
JB NEXT4
88
ADD BH,07H
89
NEXT4: MOV DL,BH
90
MOV AH,02H
91
INT 21H
92
93
AND DH,0FH
94
ADD DH,30H
95
CMP DH,3AH
96
JB NEXT3
97
ADD DH,07H
98
NEXT3: ; MOV DL,AH ; coreBugZJ delete
99
mov dl, dh ; coreBugZJ insert
100
MOV AH,2
101
INT 21H
102
103
AND BL,0F0H
104
MOV CL,4
105
SHR BL,CL
106
ADD BL,30H
107
CMP BL,3AH
108
JB NEXT2
109
ADD BL,07H
110
NEXT2: MOV DL,BL
111
MOV AH,2
112
INT 21H
113
114
pop ax ; coreBugZJ insert
115
AND AL,0FH
116
ADD AL,30H
117
CMP AL,3AH
118
JB NEXT1
119
ADD AL,07H
120
NEXT1: MOV DL,AL
121
MOV AH,2
122
INT 21H
123
124
125
EXIT: MOV AH,4CH
126
INT 21H
127
CODE ENDS
128
END START
129