2017-05-09 52 views
-3

我们如何编写一个代码来仅使用shift和add来乘两个32位整数。我知道如何用16位整数来实现,但我们怎样才能完成32位整数,我们需要两个寄存器来保存上半部分和下半部分?x86程序集添加和移位

+0

如果您指定更多详细信息,这将是很好的。无论你是在MIPS,x86,i386还是arm。你是否可以解决问题。 – Taeyun

回答

0

假设您使用的是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的整数吗?