2011-10-15 71 views
5

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

+0

或多个寄存器而不是 –

回答

5

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

对于x86,64位加法/减法是用做附加有进位加减法,与借款说明:

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

64位乘法要复杂得多,但使用也做32位乘法和32位带附加指令的组合。 (类似于2位长乘法)

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

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

+0

32位(x86)硬件上的128位整数是什么? – 2011-10-15 23:17:23

+1

它变得丑陋。在这一点上它与多精度算术没什么两样。另外,你会链接3'adc'指令。 (不要忘记你对进位标志有依赖性,可能会导致你的流水线瘫痪)。对于乘法运算,你必须做16×32位乘法和一堆'add'和'adc'。 ..我不知道任何支持这一点的编译器。 – Mysticial

相关问题