-3
我们如何编写一个代码来仅使用shift和add来乘两个32位整数。我知道如何用16位整数来实现,但我们怎样才能完成32位整数,我们需要两个寄存器来保存上半部分和下半部分?x86程序集添加和移位
我们如何编写一个代码来仅使用shift和add来乘两个32位整数。我知道如何用16位整数来实现,但我们怎样才能完成32位整数,我们需要两个寄存器来保存上半部分和下半部分?x86程序集添加和移位
假设您使用的是i386或更高版本,只需使用eax,ebx,ecx,edx而不是ax,bx,cx,dx寄存器。 即使您处于实模式(16位),也可以使用eax。
如果你想要一些代码,在这里。 它使用其他指令,如mov,和罗太难。 (我没有测试它。)
乘EAX,EBX并保存32位的结果EDX:
mov ecx, 32
xor edx, edx
next_binary_digit:
shl edx, 1
rol ebx, 1
text ebx, 1
jz add_done
add edx, eax
add_done:
loop next_binary_digit
如果你要使用的内存,它会更复杂,因为你可能需要加载值进入寄存器和移位,检查进位,保存回内存。
或..你想坚持寄存器大小X还想要乘以大于X的整数吗?
如果您指定更多详细信息,这将是很好的。无论你是在MIPS,x86,i386还是arm。你是否可以解决问题。 – Taeyun