gpt4 book ai didi

assembly - 汇编器 8086 将 32 位数除以 16 位数

转载 作者:行者123 更新时间:2023-12-01 14:01:04 25 4
gpt4 key购买 nike

我尝试将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com