因为这是不必要的。大多数时候你使用完整的寄存器。即使像AL和AX这样的小低位寄存器也不常用,更不用说像AH这样的寄存器中间的一些任意值或EAX的高字节在实际中很难找到。字节寄存器主要与SETcc和MOVcc指令一起使用。字寄存器甚至更少,几乎从未使用过,因为指令更长(需要前缀字节)并且可能更慢。窄值通常立即用符号或零扩展到整个寄存器
允许访问这些高部分需要引入新的操作码,这在当前紧张的可用空间中很难找到,并且会污染 x86 操作码空间。此外,由于部分寄存器更新,对寄存器不同部分的单独访问将引入更复杂的依赖关系,这可能会导致停顿
这就是x86-64 中具有 32 位目标的所有指令将结果的上部部分归零而不是保留它的原因之一。与AVX中XMM的高字节相同。如今,与 ADD 1 相比, INC 也不是首选,因为它引入了部分标志更新
也可以看看
我们的想法是将寄存器扩展到 32 位,而不是创建一台具有两倍数量的 16 位或 8 位寄存器的机器,因为您已经拥有足够的寄存器。为了使编码和硬件更简单,他们决定不直接访问前 16 位。一切都是有代价的。有趣的事实:64 位扩展确实带来了r8-r15但您也无法直接访问其中的前 32 位。
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |