REXプリフィックス
読み:アーイーエックス-プリフィックス
外語:REX prefix
x64(AMD64 ISA/Intel 64)で追加された、64ビット拡張に関する接頭辞。
概要
ロングモードでは、64ビット化するにあたり、16ビット時代から存在した1バイトのinc/dec命令であるinc reg16/dec reg16命令(op 0x40〜0x4f)を廃止してこの位置にプリフィックスを再定義した。結果として、4ビット分のビットフィールドが確保された。
このプリフィックスは、従来のx86命令では決定的に情報量が不足していたModR/MとSIBバイトの拡張用としての機能を持っている。つまり、CPUの64ビット化にあたってオペランドのサイズを64ビットにするというだけではなく、オペランドの数を倍にして、従来はなかったr8〜r15を使用することを可能とする。
つまり、ロングモードで32ビット命令を使う場合でも、r8〜r15を使う場合はREXプリフィックスを使用する。
特徴
併用
他のプリフィックス、例えば66Hや67Hなどのプリフィックスは、REXプリフィックスの前に置く。なお 0F プリフィックス以降は後にする。
例
66 REX.W 0F 3A 16 /r ib ‐ PEXTRQ r/m64, xmm2, imm8
技術
4ビットの領域のうち、ビット3から0の順にREX.w、REX.r、REX.x、REX.bと呼ばれている。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 1 | 0 | 0 | REX.w | REX.r | REX.x | REX.b |
- REX.w ‐ 1=オペランドサイズを64ビットにする。
- REX.r ‐ ModR/Mのregフィールドのビット4として機能する。
- REX.x ‐ SIBバイトのindexフィールドのビット4として機能する。
- REX.b ‐ ModR/Mのr/mフィールドや、SIBのbaseフィールドのビット4として機能する。
ちなみにREXプリフィックスを用いると、bp/sp/si/diの下位8ビットレジスターも利用可能になり、それぞれbpl/spl/sil/dilと呼ばれる。
もっとも、sil/dilはともかく、bplやsplのメリットは誰にも分からないが、あくまでも都合上生じた産物である。
再検索