2013-01-11 70 views
0

我的工作在Windows 7中,但我也尝试在DOSBox中的代码太86 DIV指令错误

我不知道如何可以在16位模式下

我用FASM划分双一字一句。并使.com文件

下面的代码运行正常 ,但它只是关闭仿真窗口时,DX高于0

org 100h 
mov dx, 0 
mov ax, 10 
mov bx, 10 
div bx 
add ax, '0' 
int 29h 
mov ax, 00h 
int 16h 
mov ax, 4c00h 
int 21h 

如果我改变像下面的代码.. 它关闭时DX高于0xf 我不知道为什么。

org 100h 
mov dx, 0xf 
mov ax, 10 
div word [divby] 
add ax, '0' 
int 29h 
mov ax, 00h 
int 16h 
mov ax, 4c00h 
int 21h 
divby: 
     dw 0x10   

如何在不关闭错误的情况下逐字分割双字?

回答

3

当dx:ax/bx无法放入ax(或一个除以零)时,会发生“关闭”或除法溢出异常。

假设一个具有在AA的 “大” 的值:BB:CC:dd,然后通过BX将一个将必须执行以下步骤:

lea si,[aa] 
lea di,[result] 
mov dx,0 
mov cx,4 
again: 
lodsw  ;; load ax 
div bx 
stosw  ;; store result of division 
loop again 
;; at this point dx will contain the remainder of the big_int % bx