コンピュータの仕組み(機械語〜アセンブリ、高級言語)

先日、なぜか@putanとプログラム言語の中身の話をする機会あったんですが、ふと、以前書いコンピュータの仕組み(基本論理回路〜機械語) - yokkunsの日記の続きを書いてないことに気付いたので、まとめることにしました

機械語からアセンブリ言語

前回、無事回路と機械語がつながりましたが、機械語は、コンピュータにとっては快適な言語ですが、
我々人間にとっては、大変つらい言語です。
そこで、命令番号を意味のある単語の頭文字で置き換えてプログラムを書く方法が考えられした。
このような記法を「ニーモニック」と言います。

オペレーションコード ニーモニック 命令の種類
00000000 ADD 加算
00000001 SUB 減算
00000010 AND AND
00000011 OR OR
00000101 LD メモリからACCへ (Load)
00000110 ST ACCからメモリへ (Store)

これを使って、前回の例を記述すると、

LD  2  # メモリから 2を ACCに保存
ADD 3  # ACCにある2と3を加算して結果をACCに保存
ST  4  # ACCから結果を取って,メモリの4番地に保存

いくらか、人間にとってもマシな状態になってきました。このニーモニックで書かれたプログラムを「アセンブリ言語」、コンピュータが分かる0と1のプログラムに変換するプログラムを「アセンブラ」と言います。

アセンブリ言語から高級言語

0と1の世界より、いくらかマシにしてくれたアセンブリ言語ですが、まだ大きな問題があります。
0と1よりはマシというくらいで、普通の数式とは程遠いし、機械語はハードウェア毎に異なるので、ハードウェアが変わると、アセンブリで書いたプログラムは動きません。
そこで、ハードウェアに依存せずにプログラムを書くために発明されたのが、「コンパイラ」です。
コンパイラの登場により、ハードウェアに依存せず、しかも、かなり人間にやさしい文法でプログラムを書けるようになり、開発効率もぐっと上がりました。
ちなみに、アセンブリのようにハードウェアに近い言語を低級言語、C言語Javaなど人間に近い言語を高級言語と言います。

参考

以下の書籍を参考にしました.

電子計算機基礎論

電子計算機基礎論

アセンブリ言語スタートブック

アセンブリ言語スタートブック