オペコード

コンピューティングにおいて、オペコードオペレーションコードと略される)[ 1 ] [ 2 ]は、実行される演算を指定する列挙値です。オペコードは、算術論理演算装置(ALU)、中央処理装置(CPU)、ソフトウェア命令セットなどのハードウェアデバイスで使用されます。ALUでは、オペコードは入力信号バスを介して回路に直接適用されます。一方、CPUでは、オペコードは実行される演算を指定する 機械語命令の一部です。

CPU

オペコードは、CPUの機械語命令だけでなく、一部の抽象計算機にも見られます。CPUでは、オペコードは命令機械コード[ 3 ]命令コード[ 4 ]命令シラブル[ 5 ] [ 6 ] [ 7 ] [ 8 ]命令パーセル、またはオペストリングと呼ばれることがあります。[ 9 ] [ 2 ]特定のプロセッサ(汎用CPU場合もあれば、より特殊な処理ユニットの場合もあります)では、オペコードはプロセッサの命令セットアーキテクチャ(ISA)によって定義されます。[ 10 ]オペコードはオペコード表を使用して記述できます。演算の種類には、算術演算、データコピー、論理演算、プログラム制御、特殊命令(CPUIDなど)などがあります。[ 10 ]

オペコードに加えて、多くの命令は操作の対象となるデータ(オペランドと呼ばれる)を指定しますが、一部の命令は暗黙のオペランドを持つか、オペランドを持たない場合があります。 [ 10 ]命令セットの中には、オペコードとオペランド指定子のフィールドがほぼ統一されているものもありますが、他の命令セット(x86アーキテクチャなど)はそれほど統一されていない可変長の構造になっています。[ 10 ] [ 11 ]命令セットは、予約済みのバイトシーケンスに続く既存のオペコードで構成される新しい命令のサブセットを追加するオペコードプレフィックスによって拡張できます。 [ 12 ]

サンプルオペコードテーブル

この表は、1972 年のシンプルな 8 ビット マイクロプロセッサであるIntel 8008のオペコードを示しています。

各オペコードは 8ビット長です。それぞれは、オペコード列に 1 と 0 のバイナリパターンとして表示されます。最大 2 つの追加フィールドをオペコードに埋め込むことができます。一部の 3 ビット フィールドには、DDD、SSS、CC、および ALU というラベルが付けられています。SSS (ソース) フィールドと DDD (宛先) フィールドは、8008レジスタまたはメモリの 8 つ (A、B、C、D、E、H、L、または M) のいずれかを指定します。CC は、特定の JMP、CAL、および RET 命令をアクティブにする 8 つの結果条件のいずれかを指定します。ALU は、命令中に実行される算術論理ユニット機能の 8 つ (具体的には、加算、キャリー付き加算、減算、ボロー付き減算、論理 AND、論理 XOR、論理 OR、および比較) のいずれかを指定します。一部のフィールドのX は、1 または 0 を挿入しても効果がないことを意味します。

固定された1と0はパラメータフィールドと組み合わされ、8ビットのオペコードを構築します。さらに、命令全体を実行するには、1バイトまたは2バイトの追加オペランドが必要になる場合があります。これらは表の2番目の主要列「オペランド」に示されています。オペランドが不要な場合は、その列にダッシュ(—)が記入されます。

1 と 0 は覚えにくいため、ニーモニック列には、アセンブリ言語プログラマが必要なオペコードを呼び出すために使用できる 、短くて覚えやすい文字コードが表示されます。

説明列にはマイクロプロセッサが特定のオペコードに遭遇したときに実行される機能が表示されます。

オペコードオペランドニモニック説明
76543210b2b3
0000000XHLT停止
00DDD000INrDDD ← DDD + 1 (AとMを除く)
00DDD001DCrDDD ← DDD - 1 (AとMを除く)
00000010RLCA 1-7 ← A 0-6 ; A 0 ← Cy ← A 7
00CC011Rcc(RET条件付き)ccが真の場合、P ← (スタック)
00アルミ100データADI ACI SUI SBI NDI XRI ORI CPIデータA ← A [ALU演算] データ
00101RST n(スタック)← P, P ← N × 8
00DDD110データLrIデータ(rに即値データをロード)DDD ← データ
00XXX111RETP ← (スタック)
00001010RRCA 0-6 ← A 1-7 ; A 7 ← Cy ← A 0
00010010RALA 1-7 ← A 0-6 ; Cy ← A 7 ; A 0 ← Cy
00011010rarA 0-6 ← A 1-7 ; Cy ← A 0 ; A 7 ← Cy
01CC000追加アディJcc追加(JMP 条件付き)ccが真の場合、P ← 追加
0100ポート1INPポートA ← ポート(ポート0~7のみ)
01ポート1出力ポートポート ← A (ポート8~31のみ)
01CC010追加アディCcc追加(CAL 条件付き)ccが真の場合、(スタック)←P、P←追加
01XXX100追加アディJMP追加P ← 追加
01XXX110追加アディCAL追加(スタック)←P、P←追加
10アルミSSSADr ACr SUr SBr NDr XRr ORr CPrA ← A [ALU演算] SSS
11DDDSSSLds (d を s でロード)DDD ← SSS
11111111HLT停止
76543210b2b3ニモニック説明
SSS DDD210CCアルミ
000FC、C 偽ADr ADI (A ← A + arg)
B001FZ、Z 偽ACr ACI (A ← A + arg + Cy)
C010FS、S 偽SUr SUI (A ← A - arg)
D011FP、P奇数SBr SBI (A ← A - arg - Cy)
E100TC、C 真NDr NDI (A ← A ∧ arg)
H101TZ、Zは真XRr XRI (A ← A ⊻ arg)
L110TS、S 真ORr ORI (A ← A ∨ arg)
M111TP、PもCPr CPI (A - arg)
SSS DDD210CCアルミ

ソフトウェア命令セット

オペコードは、バイトコードやソフトウェアインタープリタによる実行を目的としたその他の表現形式に見られます。これらはハードウェアオペコードよりもやや高水準のデータ型や演算を用いることが多いですが、ハードウェアオペコードと同様の構造をしています。例としては、Java仮想マシンによって解釈される Javaクラスファイル内のバイトコード、 GNU EmacsでコンパイルされたLispコードに使用されるバイトコード、そして.NET共通中間言語( CIL)などが挙げられます。[ 13 ]

参照

参考文献

  1. ^バロン、デイビッド・ウィリアム(1978) [1971, 1969]. 「2.1. シンボリック命令」.英国サウサンプトン大学にて執筆。フロレティン、J. ジョン (編) 『アセンブラとローダー』 コンピュータ・モノグラフ (第3版) ニューヨーク、米国:エルゼビア・ノースホランド社、 p. 7. ISBN 0-444-19462-2LCCN  78-19961(12+100ページ)
  2. ^ a b千葉 茂 (2007) [1999]. 「Javassist, a Java-bytecode translator toolkit」 . 2020年3月2日時点のオリジナルよりアーカイブ2016年5月27日閲覧。
  3. ^ 「付録B - 命令マシンコード」(PDF) . MCS-4アセンブリ言語プログラミングマニュアル - INTELLEC 4マイクロコンピュータシステムプログラミングマニュアル(暫定版) . サンタクララ、カリフォルニア州、米国:Intel Corporation . 1973年12月 . pp.  B-1 – B-8 . MCS-030-1273-1 . 2020年3月1日時点のオリジナルからアーカイブ(PDF) . 2020年3月2日閲覧
  4. ^ Raphael, Howard A. 編 (1974年11月). 「コンピュータの機能:命令レジスタとデコーダ」(PDF) . MCS-40 ユーザーズマニュアル ロジック設計者向け. 米国カリフォルニア州サンタクララ: Intel Corporation . p. viii. 2020年3月3日時点のオリジナルよりアーカイブ(PDF) . 2020年3月3日閲覧. […] プロセッサが実行できる各操作は、命令コードと呼ばれる一意の2進数によって識別されます。 […]
  5. ^ Jones, Douglas W. (1988年6月). 「A Minimal CISC」 . ACM SIGARCH Computer Architecture News . 16 (3). ニューヨーク, 米国: Association for Computing Machinery (ACM): 56– 63. doi : 10.1145/48675.48684 . S2CID 17280173 . 
  6. ^ドマガワ、ウカス (2012). 「7.1.4. ベンチマークスイート」VLIW プロセッサの命令モジュロ スケジューリングへの CLP の適用。ポーランド、グリヴィツェ: Jacek Skalmierski Computer Studio。 80–83 ページ [83]。ISBN 978-83-62652-42-6. 2020年3月2日時点のオリジナルよりアーカイブ2016年5月28日閲覧。
  7. ^ Smotherman, Mark (2016) [2013]. 「Multiple Instruction Issue」クレムソン大学コンピューティング学部. 2016年5月28日時点のオリジナルよりアーカイブ。 2016年5月28日閲覧
  8. ^ Jones, Douglas W. (2016) [2012]. 「A Minimal CISC」 .コンピュータアーキテクチャオンラインコレクション. アイオワシティ、米国:アイオワ大学、コンピュータサイエンス学部. 2020年3月2日時点のオリジナルよりアーカイブ。 2016年5月28日閲覧
  9. ^ Schulman, Andrew (2005-07-01). 「Opstringsと関数ダイジェストによるバイナリクローンの検出」 . Dr. Dobb's Journal . パートI. 第30巻、第7号. CMP Media LLC . pp.  69– 73. ISSN 1044-789X . #374. 2020年3月2日時点のオリジナルよりアーカイブ。 2020年3月2日閲覧。 ; Schulman, Andrew (2005-08-01). 「オプストリングと関数ダイジェストを用いたバイナリクローンの検出」 . Dr. Dobb's Journal . 第2部. 第30巻第8号. CMP Media LLC . pp.  56– 61. ISSN 1044-789X . #375. 2020年3月2日時点のオリジナルよりアーカイブ。 2016年5月28日閲覧。 Schulman , Andrew (2005-09-01). 「Opstringsと関数ダイジェストによるバイナリクローンの検出」 . CMP Media LLC . 第3部. 第30巻、第9号. United Business Media . pp.  64– 70. ISSN 1044-789X . #376. 2020年3月2日時点のオリジナルよりアーカイブ。 2016年5月28日閲覧 
  10. ^ a b c d Hennessy, John L.; Patterson, David A.; Asanović, Krste ; Bakos, Jason D.; Colwell, Robert P.; Bhattacharjee, Abhishek; Conte, Thomas M.; Duato, José; Franklin, Diana; Goldberg, David; Jouppi, Norman P.; Li, Sheng; Muralimanohar, Naveen; Peterson, Gregory D.; Pinkston, Timothy M.; Ranganathan, Parthasarathy; Wood, David A.; Young, Cliff; Zaky, Amr (2017-11-23).コンピュータアーキテクチャ:定量的アプローチ(第6版). マサチューセッツ州ケンブリッジ:Morgan Kaufmann Publishers . ISBN 978-0-12811905-1. OCLC  983459758 .
  11. ^マンスフィールド、リチャード (1983). 「入門:なぜ機械語なのか?」初心者のための機械語』 Compute ! Books (第1版). ノースカロライナ州グリーンズボロ、米国: COMPUTE! Publications, Inc.American Broadcasting Companies, Inc.Small System Services, Inc. ISBN 0-942386-11-6. 2008年2月13日時点のオリジナルよりアーカイブ2016年5月28日閲覧。
  12. ^ Tanenbaum, Andrew S; Austin, Todd (2013). Structured Computer Organization (Sixth ed.). Pearson Education, Inc. p. 367. ISBN 0-13-291652-5
  13. ^ 「バイトコードの定義」。PC Magazine。PC Magazine百科事典。2012年10月6日時点のオリジナルよりアーカイブ。 2015年10月10日閲覧