r8-15寄存器编码的"X"部分是什么?
What is the "X" part of the encoding of the r8-15 registers?
在this chart上表明两个寄存器的寄存器值都为0b010
:
这里的 X
值是多少?在反汇编下面两条指令:
add , %dl
add , %r10b
我得到:
>>> x/3bt $pc
0x401000 <_start>: 10000000 11000010 00000001
>>> x/4bt $pc+3
0x401003 <_start+3>: 01000001 10000000 11000010 00000001
所以,我猜 X
是前缀字节中的 LSB,因为 0100
是静态的,对吗? X
是什么意思,每当使用 r8-r15 寄存器中的一个时,额外的字节需要 added/prefixed 是什么意思,才能说“这是寄存器 r10 而不是 rdx”?
X
是您在页面顶部链接的 table 中的占位符。它适用于 any 机器代码中有寄存器号的时间。前导位来自 REX 前缀中的字段之一,具体取决于这是哪个字段。
这就是 0.010
位模式中前导位与其他 3 位分开的原因;没有 REX 前缀,它隐含地 0
.
在你的例子中,它是 .B
位,因为它正在修改 add $imm8, r/m8
中 ModRM 的 r/m
字段。 (因为我们可以看到它是 REX 前缀的低位)。
The REX prefix(您链接的同一页面上的另一部分)是 x86-64 如何添加 8 个新寄存器,以及选择 32 位或 64 位 operand-size,通过前缀而不修改指令编码的其余部分。 16 位和 32 位 x86 机器代码当然使用 3 位字段作为寄存器编号。
REX 前缀可以为 add r8, [rcx + r9*8]
等指令提供第 4 个 reg-num 位,其中包括 3 个寄存器编号(MODRM.reg、MODRM.rm 或 SIB.base,和 SIB.index)。并为 64 位操作数大小设置了 .W
位。
选择 X
作为占位符有点令人困惑,因为其中一个 REX 字段被命名为 X
(SIB.index). 但他们指的不是。
另请注意,r10l
和 r10b
是同一寄存器的备用名称。 AMD 最初在定义 AMD64 时使用 r8-15b
(“字节”)。英特尔显然后来发明了 r8-15l
(“低”)名称(与 AL/CL/DL/BL/SPL/... 相似),但 b
名称更受欢迎和广泛使用。
在this chart上表明两个寄存器的寄存器值都为0b010
:
这里的 X
值是多少?在反汇编下面两条指令:
add , %dl
add , %r10b
我得到:
>>> x/3bt $pc
0x401000 <_start>: 10000000 11000010 00000001
>>> x/4bt $pc+3
0x401003 <_start+3>: 01000001 10000000 11000010 00000001
所以,我猜 X
是前缀字节中的 LSB,因为 0100
是静态的,对吗? X
是什么意思,每当使用 r8-r15 寄存器中的一个时,额外的字节需要 added/prefixed 是什么意思,才能说“这是寄存器 r10 而不是 rdx”?
X
是您在页面顶部链接的 table 中的占位符。它适用于 any 机器代码中有寄存器号的时间。前导位来自 REX 前缀中的字段之一,具体取决于这是哪个字段。
这就是 0.010
位模式中前导位与其他 3 位分开的原因;没有 REX 前缀,它隐含地 0
.
在你的例子中,它是 .B
位,因为它正在修改 add $imm8, r/m8
中 ModRM 的 r/m
字段。 (因为我们可以看到它是 REX 前缀的低位)。
The REX prefix(您链接的同一页面上的另一部分)是 x86-64 如何添加 8 个新寄存器,以及选择 32 位或 64 位 operand-size,通过前缀而不修改指令编码的其余部分。 16 位和 32 位 x86 机器代码当然使用 3 位字段作为寄存器编号。
REX 前缀可以为 add r8, [rcx + r9*8]
等指令提供第 4 个 reg-num 位,其中包括 3 个寄存器编号(MODRM.reg、MODRM.rm 或 SIB.base,和 SIB.index)。并为 64 位操作数大小设置了 .W
位。
选择 X
作为占位符有点令人困惑,因为其中一个 REX 字段被命名为 X
(SIB.index). 但他们指的不是。
另请注意,r10l
和 r10b
是同一寄存器的备用名称。 AMD 最初在定义 AMD64 时使用 r8-15b
(“字节”)。英特尔显然后来发明了 r8-15l
(“低”)名称(与 AL/CL/DL/BL/SPL/... 相似),但 b
名称更受欢迎和广泛使用。