繁体   English   中英

可以在64位Intel处理器中直接寻址寄存器RSI,RDI,RSP和RBP的低字节吗?

[英]Can the lower byte of the registers RSI, RDI, RSP and RBP be directly addressed in the 64-bit Intel processors?

在16位Intel处理器(8086等)中,寄存器SP,BP,SI,DI是16位寄存器,只能寻址为16位寄存器。

32位处理器已将此寄存器扩展到32位(称为ESI,EDI,ESP,EBP),并且这些寄存器可用作16位寄存器以实现向后兼容。

几乎没有资源指出这些寄存器现在可以在64位Intel处理器中进行字节寻址(如SIL,DIL,SPL和BPL),而很少有资源没有。 我糊涂了!

这是R8-R15寄存器的附加功能吗?

*寻址的字节=寄存器的低字节。

在x86中,寄存器由3位编码,因此您可以为每个操作数选择8个寄存器 16位和32位寄存器的顺序是

E = {((E)AX,(E)CX,(E)DX,(E)BX,(E)SP,(E)BP,(E)SI,(E)DI}

但是,对于8位寄存器,选择的寄存器集为

B = {AL,CL,DL,BL,AH,CH,DH,BH}

如您所见,它们权衡了解决SP,BP,SI,DI的低字节的能力,这些能力在当时被认为不太有用(严重的是,为什么要SP或BP的低字节?)并替换为而是AX,BX,CX,DX的高字节,这也有助于直接将8080程序集转换为8086,而无需任何重写。 请参阅为什么前四个x86 GPR以这种不直观的顺序命名? 更多解释

随着SIB字节的出现,在32位模式下引入了更多的寻址模式。 这样就可以释放EBP寄存器以供常规使用,因此BP的低字节可能有一些有用的用途,但是Intel并未更改编码方案以简化解码器并实现向后兼容性。

但是,当AMD将ISA扩展到64位时,它们进行了许多重大更改。 还有更多位可以使用REX前缀来寻址寄存器,因此现在我们有8个以上的寄存器。 AMD还允许我们解决上述寄存器的低字节

  • 没有REX前缀:像旧行为一样使用集合B。 (没有REX前缀,根本无法访问新的寄存器R8-R15或其任何部分寄存器)
  • 使用REX前缀:该集合现在为B'= {AL,CL,DL,BL,SPL,BPL,SIL,DIL,R8B-R15B}

还很容易理解为什么AH / BH / CH / DL无法与REX前缀一起使用,以及为什么不能将AH与BPL混合使用

所以问题的答案

这是R8-R15寄存器的附加功能吗?

是的 这是x86-64中的新功能

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM