x86-64处理器中没有足够的寄存器

Gil*_*esz -2 assembly x86-64

我们在x86-64处理器中有16个通用寄存器:RAX,RCX,RDX,RBX,RSP,RBP,RSI,RDI,R9-15.x86-64处理器为我们提供了其他类型的寄存器.我的问题是:

  1. 我需要使用32个寄存器作为通用寄存器.可能吗.怎么样?
  2. 我听说x86-64处理器有更多通用寄存器,但它们没有命名.只有16个命名寄存器.那么,这是真的吗?是否可以使用它们?

Jen*_*ens 10

在任何给定时间,您都不能使用比CPU提供的寄存器更多的寄存器; 但是,您可以一个接一个地重复使用相同的寄存器来处理多个值.这就是寄存器分配寄存器溢出,其中值使用rSP堆栈指针寄存器在CPU寄存器和程序堆栈之间移动.

我假设你所谓的"未命名的寄存器"就是这样的溢出值.除了问题中列出的寄存器之外,更新的x86-64架构还提供用于存储和某些操作的MMX,SSE,AVX寄存器,从而增加了寄存器的数量.但请注意不要丢弃非易失性寄存器,即检查机器和操作系统的调用约定.

  • 我认为他所谓的"未命名寄存器"实际上是CPU用来实现寄存器重命名的大量内部非程序员可访问寄存器. (6认同)
  • 他提到[注册重命名](https://en.wikipedia.org/wiki/Register_renaming)技术,而不是溢出 (6认同)
  • 因为op谈到x86我假设x86架构寄存器.微架构注册银行无法访问,我认为在问题的背景下无关紧要. (3认同)
  • @MargaretBloom寄存器重命名意味着你有很多寄存器,但只有少数寄存器暴露给用户.从用户的角度来看,其余寄存器是未知的,未命名的,并且无法直接访问它们 (2认同)