オペコード

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

オペコード (operation code, opcode) とは、機械語の1個の命令の部分で、実行する操作 (operation) の種類を指定する部分のこと、およびそのコード(符号)のことである。数式における演算子に相当する。命令のもうひとつの主要部分は、操作される対象を指定するオペランド被演算子)である。

命令セットアーキテクチャ[編集]

機械語命令の仕様やフォーマットは(一般的なCPUや、特化されたGPUなどといった)当該プロセッサ命令セットアーキテクチャ (instruction set architecture, ISA) 内に設計される。オペコード以外に、命令は通常1つ以上の、操作が処理すべきオペランド(すなわちデータ)に対する指示子を持つ。いくつかの操作は暗黙的なオペランドを持つか、全く持たなかったりする。オペコードとオペランドについて、ほぼ固定された構造で少数のバリエーションのみを持つもの(いわゆるRISC)もあれば、x86のようにより複雑で長さが変化する構造のものもある。[1]

オペランドは、レジスタ値、コールスタック値、他のメモリ値、I/Oポートなどである。アーキテクチャによるが、単純な、あるいは複雑なアドレッシングモードを利用して指定されアクセスされる。操作の種類には、(CPUIDなどのような)特別な命令や、算術、データコピー、論理演算、そしてプログラム制御(分岐命令など)が含まれる。

アセンブリ言語[編集]

アセンブリ言語は、命令のニーモニックオペランド機械語を表す低水準言語である。アセンブリ言語は機械語を正確に制御しながら読みやすさを補強する。現在では、大半のプログラミングは、通常は読み書きを容易にするため高水準言語を用いて行う。[2][3]これらの言語はコンパイルする(機械語に変換する)か、他のコンパイルされたプログラム(インタプリタ)により解釈実行する。[4]

仮想機械[編集]

ハードウェアだけでなく、ソフトウェアで実装されたいわゆる仮想機械抽象機械にもオペコードは存在する。具体的には、いわゆるバイトコードやその他の中間表現の中にある。これらのコードは、しばしば相当するハードウェアより高い水準のデータ型と操作をおこなう命令セットに基づいているが、それでも類似のラインに沿って構築される。例としては、Java仮想マシン (JVM) により解釈されるJavaクラスファイルのバイトコード、EmacsのコンパイルされたEmacs Lispバイトコード、.NET 共通中間言語 (CIL) 、そして多くの他のコードが含まれる。[5]

関連項目[編集]

脚注[編集]