汇编程序 8086 将 32 位数字除以 16 位数字

ben*_*enz 2 x86 assembly division x86-16

我尝试将 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 
Run Code Online (Sandbox Code Playgroud)

我的可变结果为零。不知道是分隔线设计的问题还是只是一个小错误。

Chr*_*odd 5

对于 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
Run Code Online (Sandbox Code Playgroud)

当然,这仅在结果适合 16 位时才有效——如果不适合,该div指令将引发 #DE 异常。