2013-05-22 21 views
1

一個簡單的循環來找到最大的除數,這將是根的整數,在這種情況下在345三角形在5脫落爲什麼mov dx,0修復這個除法程序?

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固定它,回到事物正常

我不知道爲什麼,沒有任何標誌改變

誰知道爲什麼?這是一個簽名/未簽名的問題?

回答

4

DIV指令將操作數除以數字DX:AX。

DX是上位詞。 AX是低位字。因此,如果您想通過BX分割AX,則需要將DX清零。

+0

乾杯。我從來不知道以前的一個部門的其餘部分可以做到這一點(所以它在16位模式下工作就像一個32位操作) – ady

+0

這也是爲什麼有「CWD」指令!它有助於支持這些大型拆分註冊操作。 –