为什么没有特定的注册表来访问寄存器的其他部分(16-32)?
喜欢啊或 al 来访问 ax 寄存器的8位部分。
答案 0 :(得分:4)
这个想法是将寄存器扩展到32位,而不是创建一个具有两倍16或8位寄存器的机器,因为你已经有足够的那些。为了保持编码和硬件更简单,他们决定不直接访问前16位。一切都需要付出代价。有趣的事实:64位扩展确实带来了r8
- r15
,但您无法直接访问这些内容的前32位。
答案 1 :(得分:2)
因为没必要。大多数时候你使用完整的注册表。 AX,AL等低寄存器主要用于加载/存储值而不是用于计算。你现在几乎找不到AH的用法。
允许访问那些高级部件需要引入新的操作码,这将污染已经严密且混乱的x86操作码空间。找到这些指令的免费操作码并不容易。此外,对寄存器的不同部分的单独访问将引入更复杂的依赖性,这给指令调度器带来更大的压力。这可能是most x86_64 instructions zero the upper part of a 32 bit register而不是保留它的原因之一。