x86程序集添加和移位

时间:2017-05-09 21:06:44

标签: assembly

我们如何编写代码,仅使用shift和add乘以两个32位整数。我知道如何用16位整数来做,但我们怎么能用32位整数呢,我们需要两个寄存器来保持上半部分和下半部分吗?

1 个答案:

答案 0 :(得分:0)

假设您使用的是i386或更高版本,只需使用eax,ebx,ecx,edx代替ax,bx,cx,dx寄存器。 即使您处于实模式(16位),也可以使用eax。

如果你想要一些代码,请点击此处。 它使用其他指令,如mov和rol太难了。 (我没有测试过。)

将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的整数吗?