以下微机程序为何溢出

来源:百度知道 编辑:UC知道 时间:2024/05/24 06:34:00
程序要求:从0130H单元开始存储被除数98679867H,从0140H单元开始存储除数5432H,执行除法后,商存于0150H开始的单元,余数忽略。

出现的问题:除法溢出。

程序完整代码:
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
ORG 0130H
DATA1 DB 67H,98H,67H,98H
ORG 0140H
DATA2 DB 32H,54H
ORG 0150H
DATA3 DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
LEA SI,DATA1
LEA BX,DATA2
LEA DI,DATA3
MOV DX,[SI+2]
MOV AX,[SI]
MOV CX,[BX]
IDIV CX
MOV [DI],AX
INT 03H
CODE ENDS
END START

补充说明:请修改并验证得到正确运行结果后再把代码附上,谢绝无用信息,谢谢!

如果被除数高位的数值比除数大,那么会产生溢出。
有符号数除法指令IDIV,商太小(8位<-128,16位<-32768),引起0号中断
;
;
DATA3 DD ?
;
;
MOV DX,0
MOV AX,[SI+2]
MOV CX,[BX]
IDIV CX
MOV [DI+2],AX
MOV AX,[SI]
IDIV CX
MOV [DI],AX
;
;