我尝试将 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 异常。
关于assembly - 汇编器 8086 将 32 位数除以 16 位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41501491/