2012-12-18 68 views
1

可能重复:
ASM x86 integer overflow鸿沟鸸鹋8086装配误差

我得到一个鸿沟无差错溢出,我不知道为什么。 这里是再现错误的完整代码

include emu8086.inc 

org 100h 

     mov ax, 2 
     mov bx, 10 
     div bx 

     mov ax, 2 
     mov bx, 2 
     div bx 
     ret 
+2

对于2的乘方除法,通常使用换档。使用SHR AX,1更简单 - 不需要使用额外的寄存器。 –

回答

5

尝试每个div之前添加xor dx, dx,看看是否有没有帮助。

由于您指定了16位目标,因此divdx:ax除以该目标。如果dx开始包含大量数字(更准确地说,只是数字很小),结果会溢出。即使它没有溢出,你的结果也不会仅仅是ax/bx,正如你明显打算的那样。

+0

感谢您的快速回复和解释。完美地工作 –