主题:[请教]程序调试通过但运行错误,请老师指点迷津
最近写了个简单程序,实现(A+B)*C的有符号数[+/-256之间]运算.可老是调试错误,不知道问题出在哪里,请各位老师指教..
代码如下:
DSEG SEGMENT
welcome db 'Welcome to use (A+B)*C program~!~',0dh,0ah,'$'
tishi1 db 'Please enter number: A,B,C',0dh,0ah,'$'
ERROR1 DB 'number error,please enter again!!! -256<A|B|C<+256',0dh,0ah,'$'
TEMP DB 0
BUF DW ?
DATA DB 3H DUP(?)
DSEG ENDS
SSEG SEGMENT STACK
DB 100 dup(?)
SSEG ENDS
CSEG SEGMENT
ASSUME DS:DSEG,SS:SSEG,CS:CSEG
START:MOV AX,DSEG
MOV DS,AX
LEA DX,welcome
MOV AH,09H
INT 21H
LEA DX,tishi1
MOV AH,09H
INT 21H
;SCAN ===================================================================
;输入部分老是不大对,虽然知道原理..
;1
;TEMP=1
;12
;TEMP=TEMP*10+2
;123
;TEMP=TEMP*10+3
R2 PROC NEAR
MOV CX,4
SHURU:MOV AH,1
INT 21H
CMP AL,0DH
JZ NEXT
CMP AL,2DH
JZ SIGN
JMP F1
SIGN:MOV DL,AL
MOV AH,2
INT 21H
JMP NEXT
F2:CMP AL,30H
JB ERROR
CMP AL,39H
JA ERROR
F3:SUB AL,30H
MOV DL,AL
MOV AL,TEMP
MOV BL,10
MUL BL
ADD TEMP,DL
DEC CX
JNZ SHURU
RET
R2 ENDP
NEXT:
MOV AX,WORD PTR TEMP
CALL R2
MOV BX,WORD PTR TEMP
CALL R2
MOV CX,WORD PTR TEMP
;print=====================================================================
ADD AX,BX
IMUL CX
MOV BUF,AX
MOV AX,DX
SHUCHU PROC NEAR
MOV CX,4
L1:MOV BL,10
DIV BL
PUSH AX
MOV AH,0
LOOP L1
MOV CX,4
L2:POP AX
OR AH,30H
MOV DL,AH
MOV AH,2
INT 21H
LOOP L2
RET
SHUCHU ENDP
MOV AX,BUF ;DS:AX→AX
CALL SHUCHU
EXIT:MOV AH,4CH
INT 21H
CSEG ENDS
END START
代码如下:
DSEG SEGMENT
welcome db 'Welcome to use (A+B)*C program~!~',0dh,0ah,'$'
tishi1 db 'Please enter number: A,B,C',0dh,0ah,'$'
ERROR1 DB 'number error,please enter again!!! -256<A|B|C<+256',0dh,0ah,'$'
TEMP DB 0
BUF DW ?
DATA DB 3H DUP(?)
DSEG ENDS
SSEG SEGMENT STACK
DB 100 dup(?)
SSEG ENDS
CSEG SEGMENT
ASSUME DS:DSEG,SS:SSEG,CS:CSEG
START:MOV AX,DSEG
MOV DS,AX
LEA DX,welcome
MOV AH,09H
INT 21H
LEA DX,tishi1
MOV AH,09H
INT 21H
;SCAN ===================================================================
;输入部分老是不大对,虽然知道原理..
;1
;TEMP=1
;12
;TEMP=TEMP*10+2
;123
;TEMP=TEMP*10+3
R2 PROC NEAR
MOV CX,4
SHURU:MOV AH,1
INT 21H
CMP AL,0DH
JZ NEXT
CMP AL,2DH
JZ SIGN
JMP F1
SIGN:MOV DL,AL
MOV AH,2
INT 21H
JMP NEXT
F2:CMP AL,30H
JB ERROR
CMP AL,39H
JA ERROR
F3:SUB AL,30H
MOV DL,AL
MOV AL,TEMP
MOV BL,10
MUL BL
ADD TEMP,DL
DEC CX
JNZ SHURU
RET
R2 ENDP
NEXT:
MOV AX,WORD PTR TEMP
CALL R2
MOV BX,WORD PTR TEMP
CALL R2
MOV CX,WORD PTR TEMP
;print=====================================================================
ADD AX,BX
IMUL CX
MOV BUF,AX
MOV AX,DX
SHUCHU PROC NEAR
MOV CX,4
L1:MOV BL,10
DIV BL
PUSH AX
MOV AH,0
LOOP L1
MOV CX,4
L2:POP AX
OR AH,30H
MOV DL,AH
MOV AH,2
INT 21H
LOOP L2
RET
SHUCHU ENDP
MOV AX,BUF ;DS:AX→AX
CALL SHUCHU
EXIT:MOV AH,4CH
INT 21H
CSEG ENDS
END START