compiler-construction - 在 32 位体系结构中对 64 位操作数的操作?

标签 compiler-construction

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

最佳答案

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

对于 x86,64 位加法/减法是使用加进位和减法借位指令完成的:

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

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

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

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

关于compiler-construction - 在 32 位体系结构中对 64 位操作数的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781044/

相关文章:

methods - 编译器/解释器设计 : should built in methods have their own Node or should a lookup table be used?

java - ANTLR - 如何确定什么样的解析树 "best fits"一些代码

compiler-construction - 从源代码解释的语言与 Web 中的字节码

parsing - 在创建抽象语法树的上下文中,综合属性是什么?

java - ANTLR 是否提供语义

编译器忽略 if 语句

java - 我们怎么知道Heap要设置多大呢?

java - 从字符串编译 Java 源代码?

c++ - 编译器是否删除未使用的函数、定义、变量、宏、包含等?

组装正确使用字/字节/字 ptr