作爲一項任務的一部分,我一直在試圖乘以兩個32位數並將結果存儲在一個64位的地方。但是,我的結果不正確。請幫我弄清楚爲什麼擴展乘法與納斯姆
[org 0x0100]
jmp start
multiplicand: dd 100122,0
multiplier: dd 66015
result: dd 0,0
start:
initialize: mov cl,16
mov bl,1
checkbit: test bl,[multiplier]
jz decrement
multiply: mov ax, [multiplicand]
add [result],ax
mov ax, [multiplicand+2]
adc [result+2], ax
mov ax, [multiplicand+4]
adc [result+4], ax
decrement: shl bl,1
shl [multiplicand],1
rcl [multiplicand+2],1
rcl [multiplicand+4],1
dec cl
jnz checkbit
mov ax, 0x4c00
int 0x21
在AFD調試答案是F6B3A6(16587802 IN DEC),而應該是189F5C9A6(12月6609553830)。我已經通過調試器,但無法找到任何代碼錯誤。
你就不能使用32位×32位= 64位(我)MUL?你沒有在pre-i80386 CPU上運行它,對嗎? – 2012-03-08 11:13:21
它的一個課程要求,現在在16位工作,32位是在最後一課(從底部方法建立,我知道它已棄用) – 2012-03-08 12:41:51