为什么EAX中的高16位不能按名称访问(如AX,AH和AL)?

时间:2015-02-10 10:40:49

标签: assembly x86

为什么没有特定的注册表来访问寄存器的其他部分(16-32)?

喜欢 al 来访问 ax 寄存器的8位部分。

enter image description here

2 个答案:

答案 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而不是保留它的原因之一。