div 如何使用定点运算在汇编语言中运行?

How does div function in assembly language using fixed point arithmetic?

大家好,我是汇编语言的新手,我想了解如何在 x86 汇编语言的除法中使用定点数。当我使用 div(使用寄存器 axbxdx)时,结果不准确,我不知道为什么。

感谢您的帮助!

更新 #1(1000 和 900 已经是定点数)

mov ax, 1000
mov bx, 900
shl dx, 8
div bx

除法前的“预移位”,如果被除数在ax,应该移位并加宽axdx: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

或者您可以对构成 dxax 的 8 位寄存器做一些事情,但我不建议这样做。