Loading AI tools
機械語命令の一部 ウィキペディアから
オペコード (英: opcodeあるいはOpCodeあるいはoperation code) は、操作(operation)に関する命令のコードという意味で、具体的には
操作(operation)に関する命令のコード(code) だからオペレーションコード(operation code)と呼ばれ、通常は略してオペコード(opcode, OpCode)と呼ばれている。
機械語関連の用語としては、操作命令の識別番号である。
例えば、Intel 8086の「指定されたレジスタの値を、指定されたメモリ番地に書き込め」という命令に割り当てられたオペコードは二進表記(ビット列)では「10001000」であり、16進表記では「0x88」であり、十進表記では「136」である[1]。8086のオペコードの一覧表はこちらに掲載されている。
各CPUごとに、命令セットアーキテクチャ(ISA:Instruction Set Architecture)が定められており、その中でオペレーションコードが定められている[1]。
オペコードの多くは、操作対象のデータを示すオペランド(被演算子)と組み合わせて使う。
喩えるなら、オペコードは数式における演算子のようなものであり、一方、オペランドは数のようなものである。演算子は基本的には数と組み合わせて使うように、オペコードは基本的にはオペランドと組み合わせて使う。
ただし、オペコードの中には暗黙的なオペランドを持つものもある。
オペコードが示す操作命令は、主にはレジスタ、コールスタック、他のメモリなどへデータを書き込む命令である。I/Oポートに関する命令もある。アドレッシングモードを利用して指定されアクセスされる。またCPUIDのような特別な命令や、算術、データコピー、論理演算の命令や、プログラム制御命令(分岐命令など)もある。
機械語命令の仕様やフォーマットは当該プロセッサ(CPUやGPU) の《命令セットアーキテクチャ》 (instruction set architecture, ISA) 内で定められる。オペコードの多くはオペランド(操作対象のデータ)と組み合わせて使う。
オペコードとオペランドは、もともとはx86のもののように、長さが変化する複雑な構造のものが一般的だったが、その後、ほぼ固定された構造で少数のバリエーションのみを持つもの(いわゆるRISCなど)も登場した。[2]
アセンブリ言語はニーモニックで記述されるが、ニーモニックのうち操作に関する命令を示すものはやはりopcode(オペコード)と呼ばれる[3][4][5]。やはりオペランド(操作対象を示すコード)と対比される。
ソフトウェアで実装されたいわゆる仮想機械や抽象機械にもオペコードは存在する。具体的には、いわゆるバイトコードやその他の中間表現の中にある。これらのコードは、しばしば相当するハードウェアより高い水準のデータ型と操作をおこなう命令セットに基づいているが、それでも類似のラインに沿って構築される。たとえばJava仮想マシン (JVM) により解釈されるJavaクラスファイルのバイトコード、EmacsのコンパイルされたEmacs Lispバイトコード、.NET 共通中間言語 (CIL) 、そして多くの他のコードなどがある。[6]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.