在32位架构中对64位操作数进行操作?

时间:2011-10-15 22:23:14

标签: compiler-construction

大多数编译器如何在32位环境中对64位操作数(例如long int)实现操作?换句话说,有没有办法在一个步骤中实现这些操作,或者我们需要访问多个内存位置来实现这些操作?

1 个答案:

答案 0 :(得分:5)

它们使用两个寄存器来保存64位值。一个用于低32位,一个用于高32位。

对于x86,使用add-with-carry和subtract-with-borrow指令完成64位加法/减法:

add   %eax, (lower 32-bits of operand)
adc   %edx, (upper 32-bits of operand)

64位乘法要复杂得多,但也可以使用32位乘法和32位加载指令的组合来完成。 (以类似于2位数的长乘法的方式)

对于加载和存储,是的,需要在两个寄存器中加载/存储两个32位值。

类似地,可以在64位硬件上实现128位整数。 GCC支持此作为扩展。