指令字首0x66到底是幹什麼用的

時間 2021-05-05 18:21:50

1樓:陳劭源

在x86指令集中,0x66字首的全稱是Operand Size Override Prefix,用於翻轉指令運算元的長度(32位變16位,16位變32位)。當指令的運算元長度和default operand size不一致時,需要指令前加0x66。

如在default operand size是32位時,MOV EAX, EBX會被編碼為8B C3,但MOV AX, BX這條指令會被編碼成66 8B C3;PUSH DWORD PTR [EAX]會被編碼為FF 30,PUSH WORD PTR [EAX]則會被編碼為66 FF 30。default operand size是16位時相反。

2樓:勝勳

如果處理器執行在32位模式下,處理器認為指令是32位的。

如果加了0x66,那麼就表示指令的運算元是16位的。

[16位模式下]

mov cx,dx ;89 D1mov eax,ebx ;66 89 D8[32位模式下]

mov cx,dx ;66 89 D1mov eax,ebx ;89 D8