2015-05-05 27 views
2

此指令有一些容易混淆的模式,這裏是爲Intel的x64手冊的862頁上的64位版本表:64 LAR指令(加載訪問權限字節)

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前綴可能?我認爲它需要一個前綴,因爲操作碼是相同的......

回答

1

的AMD文檔是關於一個更清楚一點:

 
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. 

而且也:

在64位模式下,大多數指令默認爲32位操作數大小。對於這些指令,REX前綴 (第14頁)可以指定64位操作數大小,而66h前綴指定16位操作數大小。 REX 前綴優先於66h前綴。

AMD64架構 程序員手冊 第3卷

行情: 通用和 系統指令

+0

那是 'REG/mem16' 總是一個16位的寄存器?英特爾的參考資料列出它作爲r16和r32 ... –

+1

@RyanBrown在AMD文檔上,它總是16位。英特爾在小記錄中提到「僅使用16-0比特,其他比特被忽略」,所以這意味着32比特被接受但是沒用。另外,我經常使用[this](https://defuse.ca/online-x86-assembler.htm)進行快速測試(不是100%可靠但方便),並且它似乎強制使用16位。 – ElderBug

+0

不錯,謝謝!這將派上用場 –