コンピュータは、よく言われるように、ソフトウェア(プログラム(と、関連デー タ))をインストールして実行しなければ何もできません。逆に考えると、プ ログラムとは、コンピュータが何か役に立つような仕事をするための手順(段取り) をコンピュータにわかるように記述されたもの、というとらえかたもできます。
では、プログラミングって何?ということになるわけですが、これはコンピュー タになんらかの仕事をさせるための手順を コンピュータがわかるよう に書いてあげる、と言うことができるでしょう。この『コンピュー タがわかるように』 というのがミソです。つまり、コンピュータは人間の言葉 (自然言語とい うことがあります) が理解できませんし、仕事の仕方も(手足や口もな く)限られてますから、コンピュータがわかるような言葉、すなわち プログラミ ング言語 で コンピュータが実行できる 形で書いてあげる、というこ とになるわけです。
この『 実行できる形で 』というのもミソで、C言語のようなものは、 実はコンピュータでは『直接は』実行が出来なくって、実行できる形に 変 換 するか、そのプログラミング言語を実行できるプログラムを介し て実行しないといけないわけです。
前者については後に述べるように、最終的には 機械語=ビットの並 び になっています。これをつくる方法としては、プログラム言語を 「 コンパイル(+リンク) 」して実行イメージを作る方法がありま す。後者の実行方法としては、プログラム言語を1ステップ(行)ずつ読みだ しては解釈して実行することのできるプログラム (インタープリタ) を介して実行するやりかた等があります。
厳密にいうと、組み込み等を除くと、今日のコンピュータ環境では生の機械語で直接 処理する(させる)というのは、(ライブラリ、ミドルウェアを含んだ広い意 味での)OS (Operation System, MS 的に言うと「基本ソフト」) 自体を除いてほぼありません。OSのサポートなしでは動けないほどソ フトウェアの規模は大きくなっています。とはいえ、OS自体は機械語レベル で動いている、というのもまたまぎれもない真実です。
CPU は、所詮は状態機械です。状態機械というのは聞きなれない
かもしれませんが、要するに状態(データ)を内部に持っていて、その状態に
応じて挙動(動作、データ入出力も挙動のうち)が変わるような機械
(メカとは限らない)です。CPUの構成は、組み合わせ回路+順
序回路(=論理回路+メモリ)です。例えば、1ビットの足し算(!?)
は、以下のように、AND (論理積)、OR (論理和)、NOT (論理否定)を組み
合わせた回路(半加算器, Half Adder (HA))になっています。
![]() |
|
さらに、これを組み合わせて、繰り上がりに対応したものが全加算器
(Full Adder, FA) と呼ばれています。3ビットを足した結果を
出力します。
![]() |
|
以下の演習で、ちょっと馴染んでください。
さらに、上の論理回路がどう組み合わされば CPU になるかを真剣に知りたい人 には 「CPUの創りかた」 がお勧めです。CPU内のレジスタを含め、メモリ=(補助記憶を含む)記憶装置に計算の処 理手順(プログラム)と処理対象(データ)がどちらも置かれ る (von Neumann type) というのが、今日のコンピュータの基本です。別の言 い方をすると、所詮はビット列なので、全く同じビット列をデータとして読む か命令(プログラムの一部)として読むかは状況次第、というわけです。ちなみに以下が、その回路図の抜粋(単純なゲートだけじゃなくロジックIC まるごとも使われている)です。
![]()
*これを理解できているかどうかがこれから先の分かれ目ですんで、よくみて おいてください。要するに、(最近のほとんどの)CPU の動作原理は
ということで、まずは たとえ話を参照 してください。 これは上 で紹介している「CPUの創りかた」の CPU (TD4 と呼びます)をターゲットとし ています。