Y=A*B+C/D-E,结果是溢出,请教高手帮忙看一下,修改下。
时间:2011-06-16
来源:互联网
.分析问题
1.已知条件:Y=A*B+C/D-E,其中A、B、C、D、E均为字节数,并由键盘输入。
2.目的要求:按式计算Yi,正负数分别存贮并将结果显示在屏幕上。
源程序是:
STACK SEGMENT STACK
DW 256 dup(0)
STACK ENDS
DATA SEGMENT
STRING0 DB 0AH,0DH,'Do you want to input data?(Y/N)','$'
STRING3 DB 0AH,0DH,'Please input your data.','$'
STRING1 DB 0AH,0DH,'A=','$'
DB 0AH,0DH,'B=','$'
DB 0AH,0DH,'C=','$'
DB 0AH,0DH,'D=','$'
DB 0AH,0DH,'E=','$'
STRING2 DB 0AH,0DH,'Y1=A*B+C/D-E=','$'
BUF1 DB 10,0,8 DUP(0)
BUF2 DB 10,0,8 DUP(0)
BUF3 DB 10,0,8 DUP(0)
BUF4 DB 10,0,8 DUP(0)
BUF5 DB 10,0,8 DUP(0)
BUFR DW 10 DUP(0)
DATA1 DW 5 DUP(0)
DATA2 DW 5 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,SS:STACK
START PROC FAR
BEGIN: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
A2: LEA DX,STRING0
MOV AH,09H
INT 21H
MOV AH,01
INT 21H
CMP AL,'Y'
JNE DONE
LEA DX,STRING3
MOV AH,09H
INT 21H
MOV CX,5
LEA BX,STRING1
LEA DI,BUF1
A0: MOV DX,BX
MOV AH,09H
INT 21H
MOV AH,0AH
MOV DX,DI
INT 21H
ADD BX,5
ADD DI,10
LOOP A0
MOV CX,5
LEA SI,BUF1
LEA DI,BUFR
A1: CALL INZH
ADD SI,10
ADD DI,2
LOOP A1
LEA DI,BUFR
LEA SI,DATA1
CALL JIS
JMP A2
DONE: MOV AH,4CH
INT 21H
RET
INZH PROC NEAR
PUSH SI
PUSH DX
PUSH CX
PUSH AX
MOV DX,0
MOV CX,0
MOV AX,0
MOV CL,[SI+1]
ZH0: MOV AL,[SI+2]
INC SI
SUB AL,30H
PUSH CX
PUSH AX
MOV AX,DX
MOV CL,10
MUL CL
MOV DX,AX
POP AX
ADD DX,AX
POP CX
LOOP ZH0
MOV [DI],DX
POP AX
POP CX
POP DX
POP SI
RET
INZH ENDP
JIS PROC NEAR
PUSH DI
PUSH SI
PUSH AX
PUSH BX
PUSH DX
MOV AX,[DI]
MOV BX,[DI+2]
MUL BX
MOV [SI],AX
MOV DX,0
MOV AX,[DI+4]
MOV BX,[DI+6]
DIV BX
ADD [SI],AX
MOV BX,[DI+8]
MOV STRING3+13, '= '
MOV AX,[SI]
SUB AX,BX
JL JIS1
MOV [SI],AX
MOV STRING3+14, ' '
CALL OUTZH
JMP JIS2
JIS1: MOV DATA2,AX
NEG AX
MOV STRING3+14, '- '
CALL OUTZH
JIS2: POP DX
POP BX
POP AX
POP SI
POP DI
RET
JIS ENDP
OUTZH PROC NEAR
PUSH DX
PUSH CX
PUSH BX
PUSH SI
MOV CX,5
LEA SI , STRING2
ADD SI, 20
MOV DX,0
MOV BX,10
OUTZH1: DIV BX
XCHG AX,DX
ADD AL,30H
MOV [SI],AL
DEC SI
MOV AX,DX
LOOP OUTZH1
MOV STRING2+21,'$'
MOV AH,09H
LEA DX,STRING2
INT 21H
POP SI
POP BX
POP CX
POP DX
RET
OUTZH ENDP
CODE ENDS
END START
可能是除法需要CBW扩充为字。还有可能错误的地方是OUTZH1这里。谢谢了。
1.已知条件:Y=A*B+C/D-E,其中A、B、C、D、E均为字节数,并由键盘输入。
2.目的要求:按式计算Yi,正负数分别存贮并将结果显示在屏幕上。
源程序是:
STACK SEGMENT STACK
DW 256 dup(0)
STACK ENDS
DATA SEGMENT
STRING0 DB 0AH,0DH,'Do you want to input data?(Y/N)','$'
STRING3 DB 0AH,0DH,'Please input your data.','$'
STRING1 DB 0AH,0DH,'A=','$'
DB 0AH,0DH,'B=','$'
DB 0AH,0DH,'C=','$'
DB 0AH,0DH,'D=','$'
DB 0AH,0DH,'E=','$'
STRING2 DB 0AH,0DH,'Y1=A*B+C/D-E=','$'
BUF1 DB 10,0,8 DUP(0)
BUF2 DB 10,0,8 DUP(0)
BUF3 DB 10,0,8 DUP(0)
BUF4 DB 10,0,8 DUP(0)
BUF5 DB 10,0,8 DUP(0)
BUFR DW 10 DUP(0)
DATA1 DW 5 DUP(0)
DATA2 DW 5 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,SS:STACK
START PROC FAR
BEGIN: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
A2: LEA DX,STRING0
MOV AH,09H
INT 21H
MOV AH,01
INT 21H
CMP AL,'Y'
JNE DONE
LEA DX,STRING3
MOV AH,09H
INT 21H
MOV CX,5
LEA BX,STRING1
LEA DI,BUF1
A0: MOV DX,BX
MOV AH,09H
INT 21H
MOV AH,0AH
MOV DX,DI
INT 21H
ADD BX,5
ADD DI,10
LOOP A0
MOV CX,5
LEA SI,BUF1
LEA DI,BUFR
A1: CALL INZH
ADD SI,10
ADD DI,2
LOOP A1
LEA DI,BUFR
LEA SI,DATA1
CALL JIS
JMP A2
DONE: MOV AH,4CH
INT 21H
RET
INZH PROC NEAR
PUSH SI
PUSH DX
PUSH CX
PUSH AX
MOV DX,0
MOV CX,0
MOV AX,0
MOV CL,[SI+1]
ZH0: MOV AL,[SI+2]
INC SI
SUB AL,30H
PUSH CX
PUSH AX
MOV AX,DX
MOV CL,10
MUL CL
MOV DX,AX
POP AX
ADD DX,AX
POP CX
LOOP ZH0
MOV [DI],DX
POP AX
POP CX
POP DX
POP SI
RET
INZH ENDP
JIS PROC NEAR
PUSH DI
PUSH SI
PUSH AX
PUSH BX
PUSH DX
MOV AX,[DI]
MOV BX,[DI+2]
MUL BX
MOV [SI],AX
MOV DX,0
MOV AX,[DI+4]
MOV BX,[DI+6]
DIV BX
ADD [SI],AX
MOV BX,[DI+8]
MOV STRING3+13, '= '
MOV AX,[SI]
SUB AX,BX
JL JIS1
MOV [SI],AX
MOV STRING3+14, ' '
CALL OUTZH
JMP JIS2
JIS1: MOV DATA2,AX
NEG AX
MOV STRING3+14, '- '
CALL OUTZH
JIS2: POP DX
POP BX
POP AX
POP SI
POP DI
RET
JIS ENDP
OUTZH PROC NEAR
PUSH DX
PUSH CX
PUSH BX
PUSH SI
MOV CX,5
LEA SI , STRING2
ADD SI, 20
MOV DX,0
MOV BX,10
OUTZH1: DIV BX
XCHG AX,DX
ADD AL,30H
MOV [SI],AL
DEC SI
MOV AX,DX
LOOP OUTZH1
MOV STRING2+21,'$'
MOV AH,09H
LEA DX,STRING2
INT 21H
POP SI
POP BX
POP CX
POP DX
RET
OUTZH ENDP
CODE ENDS
END START
可能是除法需要CBW扩充为字。还有可能错误的地方是OUTZH1这里。谢谢了。
作者: yun520yu 发布时间: 2011-06-16
要改那里呢
作者: MSOKD 发布时间: 2011-06-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28