【发布时间】:2017-10-02 02:18:47
【问题描述】:
我尝试将 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
我的变量结果为零。不知道是分界线设计的问题还是小错误。
【问题讨论】:
-
您期望结果的大小是多少?你想要一个 32 位的结果(打包到,例如,
dx:ax)?或者只是一个容易溢出的 16 位结果? -
32 位结果。我没有注意到结果只有 16 位我想给结果 16 位,其余的另一个 16 位参数
-
benz,您的问题有两个答案,您应该通过单击灰色复选标记✔(在答案的左上角)来接受答案。
-
@benz - 您需要先除左 4 位(高 16 位),然后再除右 4 位(低 16 位)。我在回答中解释了这一点。
标签: assembly x86 division x86-16