微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EMU8086将32位数字除以16位数字会产生意外的0余数

如何解决EMU8086将32位数字除以16位数字会产生意外的0余数

我试图使用emu8086工具将(未签名) 8A32F4D5 除以 C9A5 。我期望商为 AF73H ,其余为 94B6H 。编写以下代码后,我得到了正确的商,但余数变为 0000h 。我想念什么吗?

.MODEL SMALL
.STACK 100H
.DATA 
.CODE 

MAIN PROC 
; initialize DS
MOV AX,@DATA 
MOV DS,AX 
; enter your code here
MOV DX,8A32H
MOV AX,0F4D5H 
MOV BX,0C9A5H

DIV BX

;exit to DOS 
               
MOV AX,4C00H
INT 21H 

MAIN ENDP
    END MAIN 

EMU8086中的输出

enter image description here

解决方法

这似乎是EMU8086中的错误。无符号除法(DIV)不会被零除。您将0x8A32F4D5除以0xC9A5的余数为0x94B6是正确的。为了验证这一点,我在DOSBOX中使用Turbo Debugger运行了此代码,并获得了预期的结果:

enter image description here

如果使用IDIV指令对此符号进行了除法运算,则由于除法运算溢出,将产生除以零的异常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。