コンピューティングにおいて、オペコード接頭辞とは、後続のオペコードの機能を変更する数値接頭辞コードのことです。[ 1 ]一部の命令セットアーキテクチャでは、複数のオペコード接頭辞が連続して許可され、それらすべてが組み合わさって後続のオペコードを変更します。オペコード接頭辞は、実行される操作を指定する、より大きな機械語命令の一部です。 [ 2 ]
オペコードに加えて、一部の命令では、演算の対象となるオペランドを指定します。オペコードの接頭辞によって、オペランドの数、サイズ、またはアドレッシングモードが変更される場合があります。
RISCプロセッサはオペコード接頭辞を使用しません。
オペコード接頭辞は、一般的に次の2つのカテゴリに分類されます。
以下は、オペコード接頭辞の網羅的なリストではなく、様々なCPU命令セットアーキテクチャにおいてオペコード接頭辞がどのように使用されてきたかを示すものです。
ナショナルセミコンダクターのCOP400は、1977年に発表された4ビットマイクロコントローラファミリです。255個の1バイトオペコードを備えています。33Hオペコードプレフィックスを使用して、187個のオペコードの代替セットを有効にします。[ 3 ]
ナショナルセミコンダクターのCOP8は、1988年に発表された8ビットマイクロコントローラです。COP8は、ナショナルセミコンダクターの以前のCOP400の改良版です。COP400とは異なり、オペランドを変更するためにオペコードプレフィックスを使用します。通常、絶対RAMアドレッシングは、、、、およびの4つの命令に対してのみ直接エンコードされます。通常、メモリにアクセスするためにBインデックスレジスタを使用する他の命令には、2バイトのオペコードプレフィックスを追加して、その命令を絶対RAMアドレッシングに変換できます。プレフィックスは、0xBDに続いて8ビットの絶対アドレスです。このプレフィックスは、1バイトではなく2バイトであるという点で特殊です。[ 4 ]LD addr8,#imm8LD A,addr8X A,addr8IFEQ addr8,#imm8DIR
Zilog Z80は、1976年に発売された8ビットマイクロプロセッサです。Intel 8080とのソフトウェア互換性を維持するように設計されており、オペコード接頭辞を使用してオペランドを変更したり、命令セットを拡張したりします。
新しいIXレジスタとIYレジスタのオペランドにアクセスするために、従来の8080命令に0xDDまたは0xFDをプレフィックスとして付加することで、これらの命令がそれぞれHLの代わりにIXまたはIYを使用できるようになります。(HL)を使用する場合は、(IX+disp)および(IY+disp)アドレッシングモードに置き換えられます。
0xCB および 0xED プレフィックスは、8080 にはない新しい命令を有効にします。プレフィックスは組み合わせることができます。0xDD または 0xFD IX/IY プレフィックスは、HL を使用する任意の 0xCB プレフィックス付き命令のプレフィックスとして使用できます。[ 5 ]
Intel 8086および8088 には 3 種類のプレフィックスがあり、これらはすべて組み合わせて[注 1 ]、後続の命令の一部を変更することができます。[ 6 ]
セグメントオーバーライド:通常、ほとんどのデータアクセスにはデータセグメント(DS)が使用され、BPまたはSPに関わるアクセスにはスタックセグメント(SS)が使用されます。ES、CS、SS、またはDSを置き換えるために、1バイトのセグメントオーバーライドプレフィックスが用意されています。
繰り返し:文字列命令LODS、STOS、MOVS、CMPS、 および はSCAS通常 1 回だけ実行されます。 REP文字列命令にプレフィックスを追加すると、CX 回繰り返されます。CMPSおよびSCAS命令は、等しいか等しくないかの条件が満たされると、早期に終了する可能性があります。これらの命令は、ソース文字列のセグメントオーバーライドプレフィックスと組み合わせることができます。
ロック:このプレフィックスは、読み取り・変更・書き込み命令(、などLOCK)で使用され、他のバスマスターが読み取りまたは書き込み操作に干渉できないようにします。 はセグメントオーバーライドプレフィックスと組み合わせることができます。INCDECXCHGLOCK
AMD64またはx86-64は、 x86 命令セットの 64 ビット拡張です。1999年に発表され、2003 年にAMD Opteronファミリーで初めて利用可能になりました。64 ビットのアドレッシング モードをエンコードするための追加のスペースと、x86-64 アーキテクチャに存在する追加の 8 つの整数レジスタを提供するREXオペコード プレフィックスが導入されました。 [ 7 ] [ 8 ]