【发布时间】:2012-03-08 10:34:35
【问题描述】:
作为作业的一部分,我一直在尝试将两个 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 (6609553830 in dec)。我已经通过调试器,但找不到代码有什么问题。
【问题讨论】:
-
你不能只使用 32 位 x 32 位 = 64 位 (i)mul 吗?您没有在 i80386 之前的 CPU 上运行它,是吗?
-
目前在 16 位上工作的课程要求,最后一课涵盖了 32 位(从底部开始构建,我知道它已弃用)
标签: assembly x86 nasm multiplication