我尝试将 32 位数字除以 16 位数字。
例如 10000000h 除以 2000h。根据我尝试做的设计除以
右 4 位数字除以除数,然后左 4 位数字除以除数。
这是我的代码:
.DATA
num dd 10000000h
divisor dw 2000h
result dd ?
remainder dw ?
.CODE
main:
mov ax,@DATA
mov ds,ax
xor dx,dx
mov cx ,word ptr divisor
mov bx,offset num
mov ax,[bx]
div cx
mov bx,offset result
mov [bx],ax
mov bx,offset num
mov ax,[bx+2]
mov ax,[bx+2]
div cx
mov bx,offset result
mov [bx+2],ax
我的变量结果为零。不确定是分割设计的问题还是只是一个小错误。
与 16 位div
指令,需要将被除数的高16位放入dx
和低 16 位ax
。你已经为第一个完成了后者div
,但是你设置了dx
到 0,所以最终计算出 0h/2000h,即 0。
相反,你想要类似的东西:
mov bx, offset num
mov ax, [bx]
mov dx, [bx+2]
mov cx, word ptr divisor
div cx
当然,只有当结果适合 16 位时,这才有效 - 如果不适合,则div
指令将引发 #DE 异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)