命令プリフィックス
読み:めいれい-プリフィックス
外語:instruction prefix

 オペコードの前に置いて使う、機能を変更したり指示したりするプリフィックス
目次

概要
 CISCなどにおいて、命令を拡張したり、単純な命令の幅を広げたりする際に用いられる。
 対してRISCの場合は、大抵は固定長命令を採用するため、こういったものは稀である。

IA-32

種類
 IA-32では、次のようなプリフィックスが使われている。
  1. オペランドサイズプリフィックス (66)
  2. アドレスサイズプリフィックス (67)
  3. セグメントオーバーライドプリフィックス (26、2E、36、3E、64、65)
  4. リピートプリフィックス (F2、F3)
  5. REXプリフィックス (40〜4F)
  6. VEXプリフィックス (C4、C5)

オペランドサイズプリフィックス
 i386から採用された。
 リアルモードでは、従来の16ビット命令の頭に「66」を置くことで、オペランドサイズが32ビットとなる。
 66 41 ‐ inc eax
 41 ‐ inc ax
 プロテクトモードでは、従来の16ビット命令はそのままで32ビット命令となっているため、命令の頭に「66」を置くことで16ビット命令とする。
 41 ‐ inc eax
 66 41 ‐ inc ax
 なお、SSE命令(0F xx xx)では、66は本来の意味とは無関係に命令拡張用プリフィックスとして用いられている。

アドレスサイズプリフィックス
 i386から採用された。
 命令の頭に「67」を置くことで、オフセットアドレスサイズが32ビットとなる。
 66 a1 34 12 ‐ mov eax, [1234h]
 67 66 a1 78 56 34 12 ‐ mov eax, dword ptr [12345678h]
 オペランドサイズプリフィックスよりも前に置く。

セグメントオーバーライドプリフィックス
 リアルモードでは、アドレスの指定にセグメントを用いる。
 80286まではCS、SS、DS、ESがあり、i386からFS、GSが追加されている。

リピートプリフィックス
 主としてストリング命令の前に付けて用いるプリフィックスである。次の二種類がある。
 なお、SSE命令(0F xx xx)は、F2/F3は本来の意味とは無関係に命令拡張用プリフィックスとして用いられている。
 またHLE(Hardware Lock Elision)ではlock命令(F0)の前にF2/F3をおくことで、XACQUIRE/XRELEASEプリフィックスとして動作させている。

REXプリフィックス
 REXプリフィックスは、x64(AMD64 ISA/Intel 64)で採用された、命令を64ビットに拡張するプリフィックスである。
 オペランドの64ビット化、追加されたレジスターの指定などに用いる。

VEXプリフィックス
 VEXプリフィックスは、「Sandy Bridge」コア採用のCore i7/i5/i3から搭載された拡張命令セットである。
 複雑化したMMX/SSE命令の整理と、更なる拡張を目的として新設された。
 拡張が続き、複数のプリフィックスによって表現されていた命令を、新設するプリフィックスとその後に続くペイロードによってシンプルに表現し、命令解読の簡略化と高速実行の両立を目指すものである。

再検索