![見出し画像](https://assets.st-note.com/production/uploads/images/84665026/rectangle_large_type_2_c1940262f26bc4ece91e9d85b64c980a.png?width=1200)
【CS】コンパイルとは?
今回はコンパイルを紹介します。
ソースコードは読めない
そもそもプログラミングとはコンピュータにしてほしい仕事を人間がプログラミング言語という言語を使って命令するものです。そのプログラミングは下の画像のようなものを書くことを指していると考えることでしょう。
![](https://assets.st-note.com/img/1660411614979-ZkJ64EwdV9.png)
しかし、実はこういったソースコードはコンピュータが理解できるものではありません。コンピュータが理解できる言語は下の画像のような機械語で書かれた、こういったものなのです。
![](https://assets.st-note.com/img/1660411921853-X50Emj620H.png?width=1200)
アセンブリとは?
先ほどの機械語は、一見読みにくい意味のなさそうな数字の羅列に見えるかもしれません。しかし、これはアセンブラが理解すれば機械語の意味が分かるようになります。
しかし、そのアセンブラを理解する前に、機械語とプログラミング言語の違いについて話します。
機械語とプログラミング言語の違い
プログラミング言語は人間の分かりやすい言語でコンピュータに指示することができます。その人間に分かりやすいとは、具体的には構造的に指示が出せる、つまり「変数、条件分岐、反復」を使うことで指示が出せるのです。
しかし、コンピュータではその構造的な指示もそのままCPUやメモリに命令できるわけではありません。
例えば、条件分岐は「条件に関係する変数を取得 → 変数を用いて条件の真偽を計算 → 計算結果によって次の実行するプログラムを決定」と内部的にはいくつかの仕事の組み合わせで実現されています。(1.メモリ、2.CPU、3.CPU に仕事を委託していることに注意)
機械語ではその細かな指示を丁寧に表現しています。
これを後は先頭から順に実行していくとうまくプログラムは実行できるわけですね。
アセンブリとは
そのような機械語も実は人間が読めるようにできます。それがアセンブリです。
![](https://assets.st-note.com/img/1660412977043-OFWBvDW4VG.png)
実はこの一行一行の命令と先ほどの数字の羅列は対応しています。
つまり、この命令を一行一行まねていくとコンピュータと同じ処理ができてしまうわけです。
少し読んでみると
movl %0, %eax
これは0をレジスタEAXに代入することを指しています。
結局コンパイルってなに?
人間が分かるプログラミング言語から、アセンブリに変換し、アセンブリから機械語に翻訳する一連の流れのことを言います。
簡単にまとめると「プログラミング言語を機械語に翻訳すること」といえるでしょうか。
以上!
ちなみに..
C言語のコンパイラー(コンパイルしてくれるソフトウェア)はアセンブリを出力できるので、アセンブリに興味ある人は試してみるといいかもしれません。
この記事が気に入ったらサポートをしてみませんか?