Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x64 LAR指令(加载访问权限字节)_Assembly_X86_64 Bit_X86 64_Machine Code - Fatal编程技术网

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

Assembly x64 LAR指令(加载访问权限字节),assembly,x86,64-bit,x86-64,machine-code,Assembly,X86,64 Bit,X86 64,Machine Code,此指令有一些令人困惑的模式,以下是《英特尔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 那个寄存器的大小是多少?这是一条需要16位

此指令有一些令人困惑的模式,以下是《英特尔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

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

AMD文档对此更清楚一些:

LAR reg16, reg/mem16 0F 02 /r ... LAR reg32, reg/mem16 0F 02 /r ... LAR reg64, reg/mem16 0F 02 /r ... 而且:

在64位模式下,大多数指令默认为32位操作数大小。对于这些说明,请使用REX前缀 (第14页)可以指定64位操作数大小,66h前缀指定16位操作数大小。雷克斯 前缀优先于66h前缀

引用AMD64体系结构 程序员手册 第三卷: 一般用途及
系统指令

reg/mem16始终是16位寄存器吗?英特尔参考资料将其列为r16和r32…@RyanBrown在AMD文档上,它总是16位。Intel one在一个小注释中提到“只使用16-0位,其他位被忽略”,因此这意味着32位被接受,但毫无用处。此外,我经常使用快速测试(不是100%可靠,但方便),它似乎强制16位。
reg/mem16 : Word (16-bit) operand in a GPR register or memory.