Mac業界の最新動向はもちろん、読者の皆様にいち早くお伝えしたい重要な情報、
日々の取材活動や編集作業を通して感じた雑感などを読みやすいスタイルで提供します。

Mac Fan メールマガジン

掲載日:

プログラミングっていったいどんなもの?

プログラミングっていったいどんなもの?

●プログラムとは

コンピュータはとても働き者ですが、人間に命令されたことしかできません。しかも、「こんな風に」などといった大雑把な言い方も伝わりません。コンピュータに仕事をしてもらうには、曖昧な部分がないように細かく、順を追って命令する必要があります。

この命令をまとめたものが「プログラム」、プログラムを作る行為を「プログラミング」といいます。プログラムは「プログラミング言語」という、コンピュータに命令を与えることに特化した言語で書かれます。

【POINT】プログラムとは命令をまとめた「命令書」のこと

●プログラムのやりとり

コンピュータはプログラムに書かれた命令を上から順に実行していきます。その際に重要なのが「CPU」です。CPUは、プログラムに従って計算や判断(演算)をして、コンピュータの各部署に指示を出す(制御)役割を担っています。

プログラム自体はCPUにあるわけではなく「メモリ」に格納(記憶)されていて、そこから受け取ります。ただし、それらは電源を切ると消えてしまうため、永続的に使いたいものは「内蔵ストレージ」に保存されます。

メモリに書き込まれる命令やデータは、「011011…」のように2進数の「マシン語」で表現されます。といっても本当に「0」や「1」の文字が書き込まれているわけではありません。電圧の高い/低い、磁気のあり/なし、スイッチのオン/オフのように2つの異なる物理状態を利用して記録します。現在のコンピュータのほとんどがシリコンを原材料とした半導体技術で作られているため、電圧の高低で表現されることが多いです。たとえば0Vならば「0」、3.3Vならば「1」といった具合です。

この「演算」「制御」「記憶」のほかに、コンピュータには、キーボードなどでの「入力」、ディスプレイでの「出力」といった要素があります。

【POINT】すべてのプログラムは「マシン語」でやりとりされる

●プログラムが実行される様子

2進数で表現されるマシン語で「0か1か」の2通りの状態を表現できる情報量を「1ビット」といいます。「1010」のように4つのビットが並んだ4ビットでは、2×2×2×2=16通りの状態を表現できます。つまり、4ビットずつデータを処理できるコンピュータ(4ビットコンピュータ)は、16種類の命令や文字、数を区別できるということです。ここでは、単純化した4ビットコンピュータで「1+1」の計算をする際の動作を見てみましょう。このコンピュータは、下記3つの命令を実行できるよう設計されたものとします。「1+1」の計算をするためのプログラムは、これらの命令を組み合わせて作られます。メモリに書き込まれている32個(4×8)分の数値が、今回のプログラムです。これを上から順に実行していきます。

10進数と2進数の対応表

私たちが普段使うのは、0~9の10個の数値で数を数える「十進法」です。対してマシン語は0と1の「二進法」で表現されます。それぞれの方法で表された数を、10進数、2進数といいます。

CPUの基本構造

CPUの演算機構には、計算を行う「演算部」、命令やデータなどを一時的に記憶する「レジスタ」などがあります。CPUが命令を実行する際は、命令を「命令レジスタ」に、命令が参照するデータの番地を「番地レジスタ」に、それぞれメモリから読み取って格納します。

CPUが実行できる命令群(命令セット)

このコンピュータのCPUが実行できる命令は3つ。それぞれの命令に上記マシン語を設定しました。たとえば、ここでマシン語の「0001」は「MOVEA」という命令を意味します。また、番地とはメモリ内でデータが格納されている場所を表わす数値のことです。このコンピュータのメモリには0番地から8番地まで9つの番地があります。

【POINT】コンピュータが動くのはプログラムのおかげ

 

4ビットコンピュータで「1+1」を計算する

【命令1】最初の「1」を記憶せよ

レジスタAへのデータ書き込み

このコンピュータは、4ビットずつ2回(8ビット)データをメモリから読み取る設計です。上から順に、1番地の「0001(MOVEA)」という命令と、2番地の「0110(十進法の6)」という番地を読み取ります。MOVEAの命令に従って、6番地のデータである「0001(十進法の1)」をレジスタAに書き込みます。

【命令2】次の「1」を記憶せよ

レジスタBへの書き込み

次に、3番地の「0010(MOVEB)」という命令と、4番地「0111(十進法の7)」という数値を読み取ります。MOVEBの命令により、7番地に書かれた「0001(十進法の1)」という数値を、レジスタBに書き込みます。これで、レジスタAに「1」という数値が、レジスタBにも同じく「1」という数値が書き込まれました。

【命令3】「1」と「1」を足せ

足し算

最後は、4番地の「0011(ADD)」という命令、5番地の「1000(十進法の8)」という番地を読み取ります。レジスタAとレジスタBの数値を足して、その結果(数値の2)を8番地に戻します。こうして、導き出された結果は、また別のプログラムを通じて出力されたり、ほかの演算の材料になったりします。