为什么mov dx,0修复了这个除法程序?

时间:2013-05-22 02:08:21

标签: assembly x86 dos

一个简单的循环来找到最大的除数,它将是根的整数,在这种情况下,在345三角形中以5为单位

mov ax,3                        
mul ax                          
push ax                         
mov ax,4                        
mul ax                          
pop bx                          
add ax,bx                       
push ax    ;save 25 decimal for repeated loops                        
mov bx,1                        
mov bp,sp                       

agin                            
mov dx,0      ;fixed problem                  
mov ax,[bp]   ;25 decimal                  
inc bx        ;starts at 2                  
div bx                          
cmp bx,ax                       
jb agin                         

out

然而,当程序从2变为3时发生了奇怪的事情,我得到了hex555D而不是8(8 * 3)

将mov dx,0置于固定状态并将其恢复正常

我不知道为什么,没有标志改变

任何人都知道为什么?这是签名/未签名的问题吗?

1 个答案:

答案 0 :(得分:4)

DIV指令将数字DX:AX除以操作数。

DX是最重要的词。 AX是低位字。因此,如果要将AX除以BX,则需要将DX归零。