【发布时间】:2026-01-28 06:35:02
【问题描述】:
对于这两条指令:
12 /r 带进位 r/m8 加到字节寄存器中。
REX + 12 /r 带进位 r/m64 加到字节寄存器。
如果第一条指令上的寄存器是 9-16,那么这两个都可以有 REX 前缀……那么 CPU 是如何区分这两者的呢?第一条指令上的 REX 前缀是否缺少第 7 位中的 1,所以它只是 REX.B 0x01?
【问题讨论】:
标签: 64-bit machine-code
对于这两条指令:
12 /r 带进位 r/m8 加到字节寄存器中。
REX + 12 /r 带进位 r/m64 加到字节寄存器。
如果第一条指令上的寄存器是 9-16,那么这两个都可以有 REX 前缀……那么 CPU 是如何区分这两者的呢?第一条指令上的 REX 前缀是否缺少第 7 位中的 1,所以它只是 REX.B 0x01?
【问题讨论】:
标签: 64-bit machine-code
不,显然不是。第一个没有 REX 前缀,第二个有。第一种形式 按定义 没有 REX 前缀,因此不能有它(根据定义,这将再次使其成为第二种形式)。它们都在手册中的原因是,表格旁边可以有带有 REX 前缀的星号,并注意它不能编码 AH、BH、CH 或 DH。
第一条指令的 REX 前缀是否缺少第 7 位的 1,所以它只是 REX.B 0x01?
这毫无意义。
那么 CPU 是如何区分这两者的呢?
嗯,一个有 REX 前缀,另一个没有。
【讨论】: