アセンブリ言語 【assembly language】
概要
アセンブリ言語(assembly language)とは、プログラミング言語の類型の一つで、コンピュータのCPU(MPU/マイクロプロセッサ)が直接解釈・実行できる機械語(マシン語)と正確に対応する命令語で構成された言語。人間が実用的に使用できるプログラミング言語で最も機械に近い低水準(低級)な言語で、具体的な仕様はプロセッサの機種(命令セットアーキテクチャの種類)ごとに異なる。
コンピュータはCPUがプログラムとして与えられた機械語の命令列を順番に実行することで処理を行うが、機械語の命令は「オペコード」(opcode)と呼ばれる識別番号(正確にはビット列)で表されるため、これを直に人間が記述してプログラムを作ることは困難で、無理に書いたとしても後から読み解くのが難しく、書き間違いも起きやすい。
そこで、それぞれのオペコードに対応する「ニーモニック」(mnemonic)と呼ばれる短いアルファベットの命令語を定義し、これを用いてプログラムを記述する手法が考案された。あるプロセッサのオペコードの体系に対応するニーモニックの集合を定義したものを、そのプロセッサに対するアセンブリ言語という。
例えば、米インテル(Intel)社の8086プロセッサにおいて、指定されたレジスタの値を指定されたメモリ番地に書き込む命令は「10001000」というビット列で表され、十進表記では136、16進表記では88となるが、これに「mov」というニーモニックを対応付ければ何をする命令なのか分かりやすい。
オペコードとニーモニックの対応関係
機械語の場合、値を代入するという同じ動作でもオペランド(引数)として指定される対象の組み合わせ(即値→レジスタ、レジスタ→レジスタ、レジスタ→メモリなど)によって異なるオペコードが割り当てられている場合がある。これらは動作に即して同じニーモニックで表されることが多く、オペランドの組み合わせから適切なオペコードに変換される。
このため、オペコードとニーモニックは必ずしも正確に一対一には対応していないが、ある命令セットを完全に実装したアセンブリ言語では、どのオペコードにも必ず対応するニーモニックが用意されている。
アセンブラ/アセンブル
アセンブリ言語で記述されたソースコードはそのままでは実行できないため、アセンブラ(assembler)と呼ばれるソフトウェアで機械語のプログラムに変換されてから実行される。この変換処理をアセンブル(assemble)という。
アセンブラは機械語への置き換えだけでなく、マクロの展開や、シンボル名を実際の値やメモリアドレスに置き換えたりといった処理も行なう。
ニーモニックの体系はアセンブラに実装されるため、同じ命令セットに対応したアセンブラでもアセンブリ言語は異なっていることがある。ただし、通常はプロセッサの開発元が命令セットの仕様を公開・提供する際に標準のニーモニックを公表するため、これに沿った実装が行われる。