コンピューターの基礎知識
コンピューターの基礎知識ですが、そもそも
コンピューターって何?
どうやって動くの?
プログラミング言語って何?
あたりは、本来どんなエンジニアも知っている必要があるのですが、最近は高級言語が当たり前になっているので、このあたりの知識が無くてもプログラミングはできちゃうんです。
でも、コンパイラ(プログラム言語をコンピューターが理解できるように変換するもの)にバグがあったり、OS(オペレーティング システムの略で、コンピューター全体を管理、制御し、人が使えるようにする役割を持つ、Windows、iOS、Androidなどのこと)の動きを調べなくてはならない場合、これらの知識が必要となります。
ということで、今回はそもそもコンピューターってどうやって動くの?
詳細はWikipediaとかで調べてもらうとして、コンピューターはCPU(Central Processing Unit:中央処理演算装置)を持ち、アドレスバスとデータバスを経由して外部から情報を取得し、その情報(命令=数字の羅列)を解釈して言われたことを実行する装置です。
プログラム言語とのつながりですが、プログラムはコンパイラによって(コンパイラ経由ではない言語もありますが)コンピューターが理解できるアセンブラ言語に翻訳され、アセンブラ言語はマシン語と言われる数字の羅列の命令に置き換わり(ここをアセンブルするという場合もあります)、メモリ上に配置され、それをアドレスバスとデータバスを経由して読み、命令を実行します。
どんな高級言語でも最終的にはマシン語(数字の羅列の命令)に置き換わるので、以前も書きましたがプログラム言語は人間のために高級化されているのです。
主目的は、人間が分かり易くすることで効率化(生産性を上げる)すること。
例えば、私が最初に使ったコンピューターは、かけ算も割り算もできないマイコンだったので、自分でかけ算とか割り算を関数で作る必要がありました(つまりアセンブラ言語でかけ算と割り算命令が無いということ)が、今はC言語だと、かけ算は「*」、割り算は「/」と書けばいいだけ。
さらに、割り算したときの余りは「%」、べき乗の関数は標準装備、などなど、どんだけ簡単に書けるんだ・・・という感じです。
アセンブラ言語でプログラムする場合、基本的には、
・IF文は書けない
・演算はCPUの能力依存
・メモリとレジスタのやりとりを直接指示
・2進数とか16進数とかの知識が必要
・アドレスとデータを明確に意識する
・キャリーとかボローとかを駆使
なんだそれっ! と思うかもしれませんが、低級言語の宿命です。
(次回に続く)