div 如何使用定点运算在汇编语言中运行?
How does div function in assembly language using fixed point arithmetic?
大家好,我是汇编语言的新手,我想了解如何在 x86 汇编语言的除法中使用定点数。当我使用 div
(使用寄存器 ax
、bx
和 dx
)时,结果不准确,我不知道为什么。
感谢您的帮助!
更新 #1(1000 和 900 已经是定点数)
mov ax, 1000
mov bx, 900
shl dx, 8
div bx
除法前的“预移位”,如果被除数在ax
,应该移位并加宽ax
为dx:ax
。在图表中,它可能看起来像这样:
Take this, in ax:
+------+------+
| high | low |
+------+------+
Turn it into this, in dx:ax
+------+------+ +------+------+
| 0 | high |:| low | 0 |
+------+------+ +------+------+
shl dx, 8
是不够的,它只影响 dx
而不是 ax
。你可以这样做:
mov dx, ax
shr dx, 8
shl ax, 8
div bx
或者您可以对构成 dx
和 ax
的 8 位寄存器做一些事情,但我不建议这样做。
大家好,我是汇编语言的新手,我想了解如何在 x86 汇编语言的除法中使用定点数。当我使用 div
(使用寄存器 ax
、bx
和 dx
)时,结果不准确,我不知道为什么。
感谢您的帮助!
更新 #1(1000 和 900 已经是定点数)
mov ax, 1000
mov bx, 900
shl dx, 8
div bx
除法前的“预移位”,如果被除数在ax
,应该移位并加宽ax
为dx:ax
。在图表中,它可能看起来像这样:
Take this, in ax:
+------+------+
| high | low |
+------+------+
Turn it into this, in dx:ax
+------+------+ +------+------+
| 0 | high |:| low | 0 |
+------+------+ +------+------+
shl dx, 8
是不够的,它只影响 dx
而不是 ax
。你可以这样做:
mov dx, ax
shr dx, 8
shl ax, 8
div bx
或者您可以对构成 dx
和 ax
的 8 位寄存器做一些事情,但我不建议这样做。