x64 LAR 指令(加载访问权限字节)

x64 LAR instruction (Load Access Rights Byte)

这条指令有一些令人困惑的模式,这里是table英特尔x64手册第862页的64位版本:

Opcode    Instruction         Description
0F 02 /r  LAR r16, r16/m16    r16 ← access rights referenced by r16/m16
0F 02 /r  LAR reg, r32/m16    reg ← access rights referenced by r32/m16

那个'reg'是多大的寄存器?这是一条需要 16 位 66H 前缀的指令吗?或者可能是 67H 或 REX.W 前缀?我认为它需要一个前缀,因为操作码是相同的...

A​​MD 文档对此更清楚一些:

LAR reg16, reg/mem16        0F 02 /r        ...
LAR reg32, reg/mem16        0F 02 /r        ...
LAR reg64, reg/mem16        0F 02 /r        ...
reg/mem16 : Word (16-bit) operand in a GPR register or memory.

还有:

In 64-bit mode, most instructions default to a 32-bit operand size. For these instructions, a REX prefix (page 14) can specify a 64-bit operand size, and a 66h prefix specifies a 16-bit operand size. The REX prefix takes precedence over the 66h prefix.

引自AMD64架构 程序员手册 第 3 卷: 通用和 系统说明