命令プリフィックス

読み:めいれい・プリフィックス
外語:instruction prefix 英語
品詞:名詞

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

目次

CISCなどにおいて、命令を拡張したり、単純な命令の幅を広げたりする際に用いられる。

対してRISCの場合は、大抵は固定長命令を採用するため、こういったものは稀である。

種類

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が追加されている。

  • 2E ‐ CS(コードセグメント)
  • 36 ‐ SS(スタックセグメント)
  • 3E ‐ DS(データセグメント)
  • 26 ‐ ES(データセグメント)
  • 64 ‐ FS(データセグメント)
  • 65 ‐ GS(データセグメント)

リピートプリフィックス

主としてストリング命令の前に付けて用いるプリフィックスである。次の二種類がある。

  • F2 ‐ REPNE/REPZE
  • F3 ‐ REP/REPE/REPZ

なお、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命令の整理と、更なる拡張を目的として新設された。

拡張が続き、複数のプリフィックスによって表現されていた命令を、新設するプリフィックスとその後に続くペイロードによってシンプルに表現し、命令解読の簡略化と高速実行の両立を目指すものである。

関連する用語
プリフィックス

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club