主题:A请求高手帮运行看看这个程序
题目为:用汇编语言编写一个简单的一位数计算器,原文件名为M10.asm,可执行文件为M10.exe.请高手帮忙26日小弟要
.NODEL SMALL
.STACK
DSEG SEGMENT
A DB 2 DUP(0)
CHAR DB ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
RC: MOV SI,0
MOV CX,0
CALL INPUT
CALL PCHAR
CALL INPUT
CMP CX,2
JZ T
CALL CALCULATE
CALL DISPLAY
JMP RC
T: RET
START ENDP
INPUT PROC
MOV AH,01H
INT 21H
SUB AL,30H
MOV BL,10
MUL BL
MOV BL,AL
INT 21H
SUB AL,30H
ADD AL,BL
CMP AL,0
JNZ E
INC CX
E: MOV A[SI],AL
INC SI
RET
INPUT ENDP
PCHAR PROC
MOV AH,01H
INT 21H
MOV CHAR,AL
RET
PCHAR ENDP
CALCULATE PROC
MOV AL,CHAR
CMP AL,2BH
JZ P
CMP AL,2DH
JZ S
CMP AL,2AH
JZ M
CMP AL,2FH ;line58
JZ D
JMP O
P: CALL ADDX
JMP O
S: CALL SUBX
JMP O
M: CALL MULX
JMP O
D: CALL DIVX
O: RET
CALCULATE ENDP
ADDX PROC
MOV SI,O
MOV Al,A[SI] ;73
INC SI
MOV BL,A[SI]
ADD AL,BL
MOV A[SI],AL
MOV BYTE PTR A[SI-1],0
RET
ADDX ENDP
SUBX PROC
MOV SI,O
MOV Al,A[SI]
INC SI
MOV BL,A[SI]
SUB AL,BL
MOV A[SI],AL
MOV BYTE PTR A[SI-1],0
RET
SUBX ENDP
MULX PROC
MOV SI,O
MOV AL,A[SI]
MOV AH,0
INC SI
MOV BL,A[SI]
MUL BL
DEC SI
MOV A[SI],AH
MOV A[SI+1],AL
RET
MULX ENDP
DIVX PROC
MOV SI,O
MOV AL,A[SI]
MOV AH,0
INC SI
MOV BL,A[SI]
div BL
DEC SI
MOV A[SI],AH
MOV A[SI+1],AL
RET
DIVX ENDP
DISPLAY PROC
MOV SI,0
MOV DL,3DH
MOV AH,02H
INT 21H
PUSH CX
R: MOV CL,A[SI]
MOV DL,0
L1: CMP CL,100
JB L2
SUB CL,100
INC DL
JMP L1
L2: ADD DL,30H
MOV AH,02H
INT 21H ; 130
MOV DL,0
L3: CMP CL,10
JB L4
SUB CL,10
INC DL
JMP L3
L4: ADD DL,30H
mov AH,02H
INT 21H
MOV DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
INC SI
CMP SI,2
JNZ R
MOV DL,0DH ; 移出回车换行
MOV AH,02H
INT 21H
MOV DL,0AH
INT 21H
POP CX
RET
DISPLAY ENDP
CSEG ENDS
END START
.NODEL SMALL
.STACK
DSEG SEGMENT
A DB 2 DUP(0)
CHAR DB ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
RC: MOV SI,0
MOV CX,0
CALL INPUT
CALL PCHAR
CALL INPUT
CMP CX,2
JZ T
CALL CALCULATE
CALL DISPLAY
JMP RC
T: RET
START ENDP
INPUT PROC
MOV AH,01H
INT 21H
SUB AL,30H
MOV BL,10
MUL BL
MOV BL,AL
INT 21H
SUB AL,30H
ADD AL,BL
CMP AL,0
JNZ E
INC CX
E: MOV A[SI],AL
INC SI
RET
INPUT ENDP
PCHAR PROC
MOV AH,01H
INT 21H
MOV CHAR,AL
RET
PCHAR ENDP
CALCULATE PROC
MOV AL,CHAR
CMP AL,2BH
JZ P
CMP AL,2DH
JZ S
CMP AL,2AH
JZ M
CMP AL,2FH ;line58
JZ D
JMP O
P: CALL ADDX
JMP O
S: CALL SUBX
JMP O
M: CALL MULX
JMP O
D: CALL DIVX
O: RET
CALCULATE ENDP
ADDX PROC
MOV SI,O
MOV Al,A[SI] ;73
INC SI
MOV BL,A[SI]
ADD AL,BL
MOV A[SI],AL
MOV BYTE PTR A[SI-1],0
RET
ADDX ENDP
SUBX PROC
MOV SI,O
MOV Al,A[SI]
INC SI
MOV BL,A[SI]
SUB AL,BL
MOV A[SI],AL
MOV BYTE PTR A[SI-1],0
RET
SUBX ENDP
MULX PROC
MOV SI,O
MOV AL,A[SI]
MOV AH,0
INC SI
MOV BL,A[SI]
MUL BL
DEC SI
MOV A[SI],AH
MOV A[SI+1],AL
RET
MULX ENDP
DIVX PROC
MOV SI,O
MOV AL,A[SI]
MOV AH,0
INC SI
MOV BL,A[SI]
div BL
DEC SI
MOV A[SI],AH
MOV A[SI+1],AL
RET
DIVX ENDP
DISPLAY PROC
MOV SI,0
MOV DL,3DH
MOV AH,02H
INT 21H
PUSH CX
R: MOV CL,A[SI]
MOV DL,0
L1: CMP CL,100
JB L2
SUB CL,100
INC DL
JMP L1
L2: ADD DL,30H
MOV AH,02H
INT 21H ; 130
MOV DL,0
L3: CMP CL,10
JB L4
SUB CL,10
INC DL
JMP L3
L4: ADD DL,30H
mov AH,02H
INT 21H
MOV DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
INC SI
CMP SI,2
JNZ R
MOV DL,0DH ; 移出回车换行
MOV AH,02H
INT 21H
MOV DL,0AH
INT 21H
POP CX
RET
DISPLAY ENDP
CSEG ENDS
END START