电子系同学 YLY 的微机实验,x86 MASM 汇编,DOS 21H 中断,输入一个 4 位的十进制数字,输出二进制和十六进制。
程序有问题,让我帮忙看看,两人却几乎同时发现错误所在,囧。。。
我干脆把它修改正确了,放上来,我修改的地方都做了说明。
我写汇编是用 NASM 的,对 MASM 不熟,尽管我也是从 MASM 开始学习汇编的。所以程序中的代码我不完全会写,但是修改程序逻辑还是可以的。
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 ;部分和计算
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