作为一项任务的一部分,我一直在试图乘以两个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