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)
我的可变结果为零。不知道是分隔线设计的问题还是只是一个小错误。
对于 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 异常。