我絞盡腦汁想了好幾個小時,試圖在網上找到答案,但我還是不明白為什么我不能正確劃分數字。我在網上看到,如果需要除以一個16位的數字,那么被除數應該分為兩個暫存器:高位寫入DX暫存器,低位寫入AX暫存器。在這種情況下,商將在 AX 暫存器中,余數 - 在 DX 暫存器中。這是我的代碼的一部分:
A EQU -59 ;in data section
B EQU 219
xor eax, eax
xor edx, edx
xor ebx, ebx
xor ecx, ecx
mov ax, A
cwd ;dx = -1, ax = -59
mov bx, B
idiv bx
PRINT_STRING 'idiv -59/219 = '
PRINT_DEC 2, ax
PRINT_STRING '.'
PRINT_DEC 2, dx
答案應該是 0,27(輸出:0.-27 或類似的東西,我不在乎缺點,問題不在于那個)。
在 AX 中我得到了 0,應該是,但是在 DX = -59 中,這是 A... 為什么?當 abs(A) > abs(B) 時,我得到了正確答案,但當被除數的絕對值小于除數時,我得到了正確的答案。在這種情況下,DX = AX = A 的先前值...
如何使用 idiv 獲得正確答案?
uj5u.com熱心網友回復:
我怎樣才能得到正確的答案
idiv?
你不能。該idiv指令執行有符號整數除法。您不會收到像 0.27 這樣的分數的結果。
-59 不能包含 219,因此商為 0,余數為 -59。
您可以使用 FPU 或 SSE 指令來計算非整數值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514010.html
標籤:Intel Collective 部件x86鼻涕虫分配
下一篇:程式集8086-無法推動兩個符號
