嗨,我是匯編語言的新手,我想了解如何在 x86 匯編語言的除法中使用定點數。當我使用div(使用 registers ax, bxand dx)時,結果不準確,我不知道為什么。
感謝您的幫助!
更新 #1(1000 和 900 已經是定點數)
mov ax, 1000
mov bx, 900
shl dx, 8
div bx
uj5u.com熱心網友回復:
除法之前的“前移”,如果紅利在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
或者你可以做的8位暫存器組成的東西dx和ax,但我不建議。
uj5u.com熱心網友回復:
divx86 匯編中的命令和其他命令是僅限整數的操作。現代計算機支持浮點運算(而不是定點運算),使用FPU. 這是通過使用 FPU 特定命令和 FPU 自己的暫存器來完成的。您可以在此處閱讀更多相關資訊。這僅適用于 32 位和 64 位匯編器,因為 16 位體系結構中未引入浮點。
您也可以創建自己的浮點系統,但我不推薦它(它不會那么準確和快速,并且對編程來說是一個挑戰)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/352210.html
上一篇:有沒有辦法將浮點立即分配給暫存器
