gpt4 book ai didi

assembly - 为什么英特尔不提供其 CPU 寄存器的高阶部分?

转载 作者:行者123 更新时间:2023-12-04 13:06:25 27 4
gpt4 key购买 nike

在汇编中编程并进行某种字符串操作时,我使用 al , ah有时其他人持有字符,因为这允许我在我的寄存器中保留更多数据。我认为这是一个非常方便的功能,但英特尔的工程师似乎不同意我的观点,因为他们没有使寄存器的两个高位字节可访问(或者我错了吗?)。我不明白为什么。我想了一会儿,我的猜测是:

  • 它们会使 CPU 变得过于复杂
  • 他们没用
  • 也许以上两者

  • 我想出了第二个,因为我从来没有见过一个编译的程序(比如 gcc)使用 albh或其中任何一个。

    最佳答案

    虽然有点笨拙,但你可以用 rol reg,16 交换寄存器的一半。 (或 ror reg,16 ,如果您愿意)。在 Netbust CPU (Pentium IV) 上,这非常低效,但在大多数较新(或较旧)的 CPU 上,您通常有一个桶形移位器可以在一个时钟内完成这项工作。

    至于他们为什么不这样做,很简单:如果他们真的想这样做,他们需要彻底重新设计指令编码。在最初的设计中,他们用完了所有适合他们用来指定寄存器的字段大小的代码。事实上,他们已经使用了一些技巧,其中编码的含义取决于模式,如果您需要使用不同的大小,还有地址大小和操作数大小前缀。例如,要在 32 位模式下运行时使用 AX,指令将在指令本身之前有一个操作数覆盖前缀。如果他们真的非常想要,他们可以扩展这个概念来指定诸如“寄存器 X 的第 16-23 位中的字节”之类的东西,但这会使解码更加复杂,并且解码 x86 指令已经相对痛苦.

    关于assembly - 为什么英特尔不提供其 CPU 寄存器的高阶部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5317928/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com