🏹

アセンブラとは何か?(アセンブリ言語、アセンブル)

2022/05/16に公開

この記事ではアセンブラとは何か?というテーマでまとめています。アセンブラは似たような言葉も多いので意味を混同しがちです。歴史・背景なども含めて整理していきます。

1、機械語の時代

機械語でコードを書く煩雑さを減らすためにアセンブラは誕生した..という背景から確認します。コンピュータが登場した当初、0と1によってコードを書いていました。コンピュータは0と1の機械語を解釈して実行します。その機械語を人間が直接書いていました。

A10010
8B160210
01D0
A10410

こちらが機械語のコードのサンプルです。しかし0と1の数字だけでコードを書くのは辛すぎますよね。そこで「人間がもっと読み書きしやすい言語」が求められました。

2、アセンブラとは?

機械語の複雑さを減らすために生まれたのがアセンブラです。アセンブラとは機械語と一対一で対応する命令を並べることでプログラムを記述する言語です。 要は機械語にニックネームを付けたモノだと思って下さい。

MOV AX, X
MOV DX, Y
ADD AX, DX
MOV Z, AY

アルファベットは機械語の0と1と1対1で対応する仕組みとなっています。ここではメモリに対して数値をロードし、足し算を行なっています。確かにこれでもわかりづらいですが、先ほどの数字の羅列よりはだいぶマシです。機械語に対して付けられたニックネーム(名前)のことをニーモニックと呼びます。英語のmnemonicは「記憶を助けるモノ」という意味があります。アセンブラによって「読み書きしやすさ」を追求したプログラミング言語はまた1つ進化しました。

アセンブラの欠点

しかしアセンブラには欠点が2つあります。
(1)CPU(処理系)に依存すること
(2)メモリ管理などが複雑なこと

(1)CPU(処理系)に依存すること

カンタンに言えば「OSが違えばコンピュータの使い方も違う」ようなものです。CPUの種類が違えば機械語の書かれ方も異なり、アセンブラも違う書き方をする必要がありました。

そもそも機械語はどのようなルールに基づいて書かれているのでしょうか。それはCPUの種類によって異なります。つまりIntelのCUP、ARMのCPUとでは別のルールで機械語が書かれています。例えば010100011110という機械語があったとします。これをIntelのCPUではADD A、Bと解釈したとします。しかしARMのCPUではMOV A、Bと解釈することもあるのです。

そしてアセンブラは機械語と1対1で対応するとお話ししました。つまりCPUが違えば機械語も違う。つまりアセンブラも別で用意しないといけないことになります。

CPUが違えば機械語をゼロから学び直さなければいけません。せっかくニックネームを付けて多少は分かりやすくなったのに、結局は0と1に逆戻りしなければなりません。これはプログラミングをする上で大きなストレスでした。

(2)メモリ管理などが複雑なこと

これは今の時代でも同じかもしれませんが..。アセンブラでコードを書く場合、メモリやレジスタに直接データをロードする必要があります。

レジスタA :数値の1を保存
レジスタB:数値の2を保存
レジスタC:AとBの計算結果を格納

といったイメージです「作りたいプログラム」と同じくらいに「コンピュータのメモリ」についても考えなくてはいけません。実行命令を1個1個書くのは面倒ですし、少しメモリ管理を間違えばコンピュータが暴走しかねません。0と1よりは分かりやすくなったとはいえ、まだまだコンピュータ目線でコードを書かなければいけませんでした。(アセンブラより更に進化して高級言語へと後に進化していきます。)

3、アセンブリ/アセンブラ/アセンブル

最後に似たような言葉を整理しておきます。アセンブリ、アセンブラ、アセンブルについてです。英語のassemblyは「組み立てること」を意味します。 ここから3つの言葉の違いを考えていきます。

言葉 意味
アセンブリ 「組み立てること」という名詞
アセンブル 組み立てる「動作」
アセンブラ 組み立てる「人、物」

アセンブリ:assembly

「組み立てること」をという名詞を意味します。日本語でいうなら「組み立てること」という行為です。「アセンブリ言語」と合わせて、機械語と1対1の関係にある低水準言語を指したりもします。

アセンブル:asssemble

組み立ての「動作」を意味します。アセンブリ言語を機械語へ翻訳する作業を指します。コンパイル(高級言語を機械語へ翻訳)に使い方は近いかもしれません。

アセンブラ:assembler

組み立てを行う「人やモノ」を意味します。assemble(組み立てる)+er(〜する者)が合わさった単語です。具体的には機械語へ翻訳するソフトウェアを意味します。コンパイラ(高級言語を機械語へ翻訳するソフトウェア)に使い方は似ています。

Discussion