Compiler construction 编译器管理CPU寄存器吗?

Compiler construction 编译器管理CPU寄存器吗?,compiler-construction,cpu,cpu-registers,Compiler Construction,Cpu,Cpu Registers,如果不是,你能解释一下图中的编译器是什么意思吗 您提出问题的方式表明,您实际上认为编译器不管理CPU寄存器 据我所知,编译器确实通过生成MOV R1、R2等指令,详细地使用了CPU寄存器。在这里,即使使用的寄存器也是由生成的指令指定的。您提出问题的方式表明,您实际上认为编译器不管理CPU寄存器 据我所知,编译器确实通过生成MOV R1、R2等指令,详细地使用了CPU寄存器。这里,即使使用了哪些寄存器,也由生成的指令指定。是。在大多数编译为本机代码的编译器中,有一个称为“寄存器分配”的阶段,在这个

如果不是,你能解释一下图中的编译器是什么意思吗


您提出问题的方式表明,您实际上认为编译器不管理CPU寄存器


据我所知,编译器确实通过生成MOV R1、R2等指令,详细地使用了CPU寄存器。在这里,即使使用的寄存器也是由生成的指令指定的。

您提出问题的方式表明,您实际上认为编译器不管理CPU寄存器


据我所知,编译器确实通过生成MOV R1、R2等指令,详细地使用了CPU寄存器。这里,即使使用了哪些寄存器,也由生成的指令指定。

是。在大多数编译为本机代码的编译器中,有一个称为“寄存器分配”的阶段,在这个阶段中,编译器决定哪些变量可以进入哪些寄存器,以及如何最好地管理寄存器集以获得最佳性能。这就是你照片中的专栏所指的


我不知道你为什么认为你需要进一步确认,但这就是。

是的。在大多数编译为本机代码的编译器中,有一个称为“寄存器分配”的阶段,在这个阶段中,编译器决定哪些变量可以进入哪些寄存器,以及如何最好地管理寄存器集以获得最佳性能。这就是你照片中的专栏所指的

我不知道你为什么认为你需要进一步的确认,但它在这里。

编译器,但受约束,它指定了用于参数传递的寄存器,这些寄存器可以自由使用,在进入/离开函数之前必须保存,等等

然而,这并不是完整的故事,因为大多数现代CPU的体系结构寄存器(在汇编语言中使用,如
RAX
XMM0
,等等)本身实际上是一种抽象。大多数CPU中的物理寄存器对于任何类型的软件都是完全不可访问的,大大超过了可见的体系结构寄存器。CPU本身决定如何将这些“秘密”内部寄存器分配给程序员和编译器处理的体系结构寄存器。CPU可以检测指令序列中的某些类型的数据依赖项,并执行类似于解析其中某些数据依赖项的操作,例如,这支持编译器,但受约束,它指定了用于参数传递的寄存器,这些寄存器可以自由使用,在进入/离开函数之前必须保存,等等


然而,这并不是完整的故事,因为大多数现代CPU的体系结构寄存器(在汇编语言中使用,如
RAX
XMM0
,等等)本身实际上是一种抽象。大多数CPU中的物理寄存器对于任何类型的软件都是完全不可访问的,大大超过了可见的体系结构寄存器。CPU本身决定如何将这些“秘密”内部寄存器分配给程序员和编译器处理的体系结构寄存器。CPU可以检测指令序列中的某些类型的数据依赖项,并执行类似于解决其中一些依赖项的操作,例如支持。

我知道,CPU寄存器可以由汇编语言指令操作。我的疑问是编译器是否可以完全控制CPU寄存器,就像什么东西进出寄存器?@uday我不明白你怎么可能对它有任何怀疑。编译器就是这样做的。它生成将数据移入和移出寄存器的汇编指令。除此之外。我知道,cpu寄存器可以通过汇编语言指令进行操作。我的疑问是编译器是否能够完全控制cpu寄存器,比如寄存器的进出情况?@uday我不明白你怎么可能对此有任何疑问。编译器就是这样做的。它生成将数据移入和移出寄存器的汇编指令。ABI通常允许编译器不对内部函数使用调用约定,因为编译器可以控制如何在被调用函数中使用寄存器(如果可以内联函数,更改调用接口不是什么大问题)。遵循ABI的内部功能可能很方便(并由ABI推荐),但不一定需要。对于单独编译的代码,ABI避免了扩展接口以提供每个函数的信息(并简化了编译和调试)。(只是吹毛求疵)你当然是对的,但我认为这是一个微妙的问题,可能比这个特定问题的适当水平略高。TBH,我不确定我是否已经讨论了太多细节。ABI通常允许编译器不对内部函数使用调用约定,编译器可以控制如何在被调用函数中使用寄存器(如果可以内联函数,更改调用接口不是什么大问题)。遵循ABI的内部功能可能很方便(并由ABI推荐),但不一定需要。对于单独编译的代码,ABI避免了扩展接口以提供每个函数的信息(并简化了编译和调试)。(只是吹毛求疵)你当然是对的,但我认为这是一个微妙的问题,可能比这个特定问题的适当水平略高。TBH,我不确定我是否已经讨论了太多细节。