ModR/M

ModR/Mバイトは、の命令エンコーディングの重要な部分である。

 説明 
x86のオペコードは通常1バイトだがしかし、2バイトの命令とプリフィックスも存在する。ModR/Mはオペコードに続くバイトで、命令がどのように実行されるかについての追加情報を追加する。フォーマットは以下の通りであり:
ビット76543210用途MODREGR/M
REGにはレジスタの指定が、R/MにはMODの値に応じてレジスタを格納するか、アドレッシングモードの指定が当て嵌まる。 一部の命令はModR/MバイトのREG部分を利用できない。これらの命令の多くは、(1つのオペコードで複数の命令を参照でき、そしてREGフィールドが命令を決定する)このフィールドを使用して「多重化」される(からである)。 オペコードのリストでは、これらはオペコードの後にスラッシュ () と数字0～7を続けることによって指定される。

 64ビット切り替え 
ModR/Mバイトは、AMDの64ビット拡張によってオリジナルの命令セットへ導入された変更の中心となる。では、最上位4ビットが0100 (10進数の4) であるオペコードは、新しいプリフィックスであるとみなされる。プリフィックスバイトの下位4ビットは、それに続くModR/MバイトのREGおよびR/Mフィールド用の追加ビットを含め、さまざまな目的に使用される。その他の変更点としては、これらの値を3ビットから4ビットに拡張すると、使用可能なプロセッサレジスタの数が8から16に倍増する。

 SIBバイト 
SIBバイトは、i386以降ののオプションのポストオペコードバイトで、複雑なアドレス指定に使用される。 SIBバイトはModR/Mバイトと同様にフォーマットされ、(scale * index) + base + displacementの形を取り、SCALEには1、2、4、または8が当て嵌まる。BASEとINDEXはそれぞれレジスタをエンコードする。ディスプレイスメントは、最終アドレスに適用されるSIBバイトの後にエンコードされた定数オフセットである。 を使用することにより、必要に応じてSIBバイトがSSEレジスタを使用できるようになる。
ビット76543210用途SCALEINDEXBASE

 リファレンス 

 関連項目 


 コンピュテーショナルRAM




 ModR/M

 #関連項目
 F16C

Category:命令処理
Category:x86アーキテクチャ