かつて(1970年代前半まで)、私達が普段行う「計算」には、算盤や計算尺が使われました。算盤は金銭の正確な計算に、また、計算尺(精度は3桁程度)は科学計算に、広く活用されました。
算盤の代わりに機械式計算機も使われました。オドネルの計算機(1874年)を原形とする「タイガー計算機」(1923年)は、国内における機械式計算機の代名詞にもなり、低価格の電卓が現れる1970年頃まで使われました[6]。各桁の置数レバーでセットした数だけドラムからピンが出て、これが歯車となり(出入り歯車)、ハンドルを回転させることにより右ダイヤルの対応桁を回転させます。つまり右ダイヤルの値に置数の値が足し込まれます。繰り上げ時には繰り上げピンが出て、上位桁に足し込まれます。

| (a) 計算尺 | (b) 計算尺の仕組み(「2 × 4」の例) |

| (c) 機械式計算機(日本計算器 HL21) | (d) 電卓の操作・演算・表示 |
1964年にトランジスタ式の電卓(50万円)が登場し、その後の電卓の価格競争の中で、1971年にマイクロコンピュータ 4004 が誕生しました。それまでのように電卓専用のICを新たに設計しなくても、プログラムを入れ替えるだけで新しい電卓を開発できるようになったのです。機械式計算機を製造販売していた日本計算器(株)が電卓に参入し、社名をビジコン(株)に改め、電卓に使うために米INTEL社と共同開発したのが4004です。
電卓の中のデータは2進数で表現されています。2進1桁は「低い電圧」の時「0」、「高い電圧」の時「1」というように、「0」か「1」のいずれかを表します。この「2進1桁」をビットという単位で表します。
2ビットつまり2進2桁では、00, 01, 10, 11の4通りのうちのいずれかを表わすことができます。8ビットでは00000000〜11111111(10進で0〜255)の数を表すことができます。
(練習)
計算尺を用いて次の計算をしなさい。
(練習)
機械式計算機を用いて次の計算をしなさい。
世界初の電子計算機(コンピュータ) ENIACは、1946年に、アメリカ陸軍の依頼で、弾丸の落下位置を、爆薬の量、砲の特性、信管の特性、大気の影響などを考慮しながら「大量に計算」するために開発されました。プログラムは、主記憶装置に置くタイプではなく、結線によるものでした。また、18800本の真空管を使っていて、しばしば故障したと言われています。
1947年、ノイマンが次章で説明する「プログラム内蔵方式」を提案し、その後のコンピュータはこのタイプとなりました。同じ1947年にトランジスタが発明され、1958年にはIC(集積回路)が発明され、1964年にIBMはこれらの技術を結集したコンピュータ System/360 を発売しました。その後の System/370 を含め、国内でも富士通・日立により互換機が製造されるなど、コンピュータの一時代を築きました。
これらのコンピュータは、以下の写真にあるように、1フロアあるいは1部屋を占有する大規模のものでした。

| ENIAC 出典: http://www.computersciencelab.com/ |
IBM System/360 出典: http://www-03.ibm.com/ibm/history/ |
IBM System/360 System/370に代表されるコンピュータは、大型コンピュータまたは汎用コンピュータと呼ばれました。当初は、コンピュータを直接利用者が操作することはできず、利用者は計算機室や情報処理センターにプログラムを持参し、半日後あるいは1日後に処理結果をプリンタの印刷物として受け取りました。コンピュータへの指示やプログラムやデータの「1行分」が、パンチカード(マークシート専用用紙と同じサイズのカードに専用の機械で穴を開ける)1枚で表わされました。何かの計算をさせようとすると、プログラムやデータは相当枚数のカードになり、専用のジュラルミンケースに入れて持ち歩きました。
利用者がコンピュータを「直接」操作できるようになったのは、1970年代になってTSS(タイムシェアリングシステム)と呼ばれる技術が普及してからのことで、これは複数の利用者が時分割でコンピュータを占有する方法です。また、同じく1970年代にIBMがフロッピーディスク(8インチ 256KB)を開発し、プログラムやデータの持ち運びが格段に便利になりました。
図3は、1947年にノイマンが考案した「プログラム内蔵方式」コンピュータの構成で、通常用いられるコンピュータはこの構成になっています。
主記憶装置には、コンピュータが行うべき仕事の手順がプログラム(コンピュータに対する命令の並び)として格納されています。
CPU(中央制御装置)は、いわば司令塔で、主記憶装置の中のプログラムを「ひとつずつ順に取り出し」ては、その「内容を解読」し、その指示どおりに実行、すなわち演算を行ったり、入力装置からデータを入力したり、出力装置にデータを出力したりします。これがコンピュータの仕組みです。
繰り返しますが、CPUは、主記憶装置に格納された命令をひとつずつ順に取り出しては、その内容を解読し、その指示どおりに実行(つまり演算を行ったり、入力装置からデータを入力したり、出力装置にデータを出力したり)します。

バスは、そこに接続された装置間でデータを送受信する際に共用する信号線で、いわば道路の役割をします。ある時は主記憶装置からCPUに信号を伝えるための「専用道路」となり、ある時はCPUから出力装置に信号を伝えるための「専用道路」となるというように、時分割で道路(信号線)を占有します。次節で例示する8ビットマイコンのデータバスは、8本の信号線が装置間を結んでいて、パラレルバスとなっています。
一方、シリアルバスは、8個のデータを1本の信号線を使って1ビットずつ順に送受信する方法で、パソコンの USB などがその例です。
コンピュータの中のデータ、あるいはバスの信号線は2進数で表現されています。ある1本の信号線は、「低い電圧」の時「0」、「高い電圧」の時「1」というように、「0」か「1」のいずれかを表します。この「2進1桁」をビットという単位で表します。
2ビットつまり2進2桁では、00, 01, 10, 11の4通りのうちのいずれかを表わすことができます。4ビットでは0000〜1111の16通り、8ビットでは00000000〜11111111の256通りのうちのいずれかを表すことができます。8ビットのメモリ(記憶装置)はこの256個のいずれかの値を記憶できます。
8ビット(2進8桁)をバイトという単位で表し、処理や記憶や通信は多くの場合、バイト単位で行われます。
1970年頃、主に科学計算や制御の用途でミニコンピュータ(ミニコン)が活躍しました。代表例がDEC社のPDP-11(1970)、国内ではHITAC 10(日立)、OKITAC(沖)などです。それまでのコンピュータが、一部屋を占有する規模のものであったのに対し、1本のラックに収まる程度の「ミニサイズ」でした。また、実時間のデータ処理や入出力の拡張に特徴を有するミニコンは、大型計算機が苦手とする科学計算や制御の分野で活用されました。
電卓用として開発されたマイクロコンピュータ4004が誕生して3年後の1974年には、8ビットマイクロコンピュータ8080が開発され、広く使われました($350)。
下図右の写真は、米MITS社のALTAIR 8800(1974年)というミニコンタイプの8ビットマイコンです。個人で購入できる規模の初めてのコンピュータでもありました。装置内部は、底面の基板にコネクタが並んでいて、それらがバスで接続されていて、コネクタにはメモリボード、CPUボード、入出力ボードなどを挿すようになっています。モニタプログラムにより、パネルのスイッチ操作で、番地を指定して機械語を入力したり、指定した番地からプログラムをスタートさせたりできます。
図中のROM(Read Only Memory)は読み出し専用メモリで予め機械語が書き込まれていて、その内容を変更することはできません。これに対し、RAM(Random Access Memory)は読み書き可能ですが、その内容は電源を切ると消えてしまいます。

| ALTAIR 8800 出典: http://www.oac.cdlib.org/ark:/13030/kt638nc7xf/ |
1976年にNECからワンボードマイコン TK-80(88500円)が発売されました。上の ALTAIR 8800 とほぼ同程度の性能です。モニタプログラムにより、ボード上のテンキーの操作で、番地を指定して機械語を入力したり、指定した番地からプログラムをスタートさせたりできます。

| NEC TK-80 出典: http://www4.airnet.ne.jp/mit/Musium/NEC/TK-80.html |
1979年にNECが発売したパソコン PC-8001(168000円)は、本体がキーボードと一体になっていて、ディスプレイ(またはテレビ)を接続して使います。主記憶装置(ROM)にBASICインタープリタが入っていて、ユーザがキーボードからBASIC言語のプログラムを入力すると、それを「解釈」しながら実行してくれます。そのままでは「BASIC専用機」でしたが、メモリとフロッピーディスク装置(310000円)を増設すれば、CP/MというOS(基本ソフト)を利用することもでき、利用の幅が大きく拡がりました。

| NEC PC-8001 出典: NEC PC8001 カタログ |
(練習)
PC-8001に次のプログラムを入力し、実行してみなさい(1から10までの和の計算)。また、プログラムを変更し、1から100または1から1000までの和の計算をしてみなさい。
|
|
CP/M, MS-DOS, Windows, MacOS, UNIX, Linux などのOSを搭載したパソコンは、OS上で、ワープロソフト、表計算ソフト、その他さまざまなアプリケーションソフトが利用でき、パソコンをさまざまな目的で利用することができます。また、アプリケーションソフトに共通して必要となる入出力やファイル管理の機能がOSに用意され、アプリケーションソフトの開発が容易になっています。
初期のパソコンではレジスタや演算の処理単位は8ビットでしたが、現在のパソコンでは32ビットや64ビットになっています。また、クロックも高速になり(例えば4MHz→2GHz)、処理能力は大きく向上しています。

現在は、初期のワンボードマイコンと同程度のことがワンチップマイコン(IC 1個)でできるようになりました。下図右はATMEL社のATtiny2313(100円)です。
このようなワンチップマイコンは、家電製品などに組み込まれ、私達は通常「コンピュータ」を意識することはありません。

| ATtiny2313 |
ATtiny2313では、レジスタの加算命令は1クロックサイクルで実行されます。CPUが1MHzのクロックで動作していた場合、1クロックサイクルは1μsですから、1μsでこの命令が実行されることになります。コンピュータの性能を表す指標のひとつにMIPS(Mega Instruction Per Second)があります。1秒間に何百万回命令を実行できるかという単位です。このワンチップマイコンの性能は「1MIPS」ということになります。
参考まで、下に、次章の表3(8080のプログラム)に相当するATtiny2313のプログラムを示します。レジスタの構成が異なっていること、機械語が2バイトで表されること、アセンブリ言語の仕様が異なっていることなどをがわかります。
| アドレス | 機械語 | アセンブリ言語 | 説明 |
|---|---|---|---|
| 0000 | E20B | LDI R16,43 | R16レジスタに43を格納せよ |
| 0001 | E111 | LDI R17,17 | R17レジスタに17を格納せよ |
| 0002 | 0F01 | ADD R16,R17 | R16レジスタの値とR17レジスタの値を加算し、結果をR16レジスタに格納せよ |
図9で、コンピュータの動作の仕組みを具体的に見てみましょう。この図は、1974年にインテルが開発した 8080 という8ビット マイクロコンピュータ(マイコン)を例にしています。

今、主記憶装置の4番地に「10000000」という機械語命令が格納されていたとします。また、プログラムカウンタが「00000100」(4番地)になっていて、Aレジスタには「00101011」(10進で43)が、Bレジスタには「00010001」(10進で17)が入っていたとします。この時、コンピュータは次のように動作します。
(1) プログラムカウンタが指し示す番地(つまり4番地)の内容「10000000」が命令レジスタに取り込まれます。この動作はフェッチ(Fetch)と呼ばれます。
(2) プログラムカウンタに1が加えられ、「00000101」(5番地)となります。
(3) 命令レジスタの内容が命令デコーダで解読され、実行(execute)されます。命令を解読すると、この命令が「Aレジスタの値とBレジスタの値を加算し、結果をAレジスタに格納せよ」という内容であることがわかります。その実行に必要な制御信号が生成され、Aレジスタの値(43)とBレジスタの値(17)がALU(演算装置)で加算されて、Aレジスタの値が加算結果の「00111100」(60)に更新されます。制御信号は、どこの通路(信号線)を開通させ、どこの通路を遮断するかというような指示を与えるものです。
以下、(1)〜(3)が繰返されます。
このように、コンピュータがプログラムを実行する仕組みは、
| → |
| → |
|
|---|
の繰返しで、フェッチ実行サイクル(fetch-execute cycle)と呼ばれます。プログラムカウンタの値が1ずつ加算されるので、メモリに格納されたプログラムは順に実行されます。
なお、8080では、レジスタの加算命令は4クロックサイクルで実行されます。CPUが2MHzのクロックで動作していた場合、1クロックサイクルは0.5μsですから、2μsでこの命令が実行されることになります。命令によってクロックサイクルは異なります。
このコンピュータはレジスタや演算の処理単位は8ビットで、「8ビットコンピュータ」と呼ばれます。この処理単位を「ワード」といいます。今日のパソコンは「32ビットコンピュータ」や「64ビットコンピュータ」です。
上記の例で、4番地に加算命令の機械語「10000000」が格納されています。この命令を実行し終えると、次は5番地の命令が実行されます。コンピュータの動作に必要なものはこのような機械語の並びです。どのような機械語の並びにするかは、人(プログラマ)がコンピュータにさせたい仕事の手順を考えて決めるわけで、これがプログラミングに他なりません。
ここで、「AとBの加算は10000000」というように機械語を人が覚えるのは大変ですから、アセンブリ言語が登場します。上の例では、「10000000」を「ADD B」と表すのです。こうすることにより、命令の意味をおさえながらプログラムを考えることができるようになります。
今、
| アセンブリ言語 | 説明 |
|---|---|
| MVI A,43 | Aレジスタに「00101011」(43)を格納せよ |
| MVI B,17 | Bレジスタに「00010001」(17)を格納せよ |
| ADD B | Aレジスタの値とBレジスタの値を加算し、結果をAレジスタに格納せよ |
一方、コンピュータの主記憶装置に格納するのは機械語(2進数)で、表2は表1のそれぞれの命令がどのような機械語に置き換えられるかを示したものです。このマイコンは、「MVI」命令は2バイト、「ADD」命令は1バイトで表されます。なお、この例は、主記憶装置の「00000100」番地に「10000000」という機械語が格納されている図2と対応しています。また、一般に、コンピュータは電源投入時にプログラムカウンタの値が0になり、0番地からプログラムが実行されます。
| アドレス | 機械語 | アセンブリ言語 | 説明 |
|---|---|---|---|
| 00000000 00000000 | 00111110 00101011 | MVI A,43 | Aレジスタに「00101011」(43)を格納せよ |
| 00000000 00000010 | 00000110 00010001 | MVI B,17 | Bレジスタに「00010001」(17)を格納せよ |
| 00000000 00000100 | 10000000 | ADD B | Aレジスタの値とBレジスタの値を加算し、結果をAレジスタに格納せよ |
ところで、上のようにアドレスや機械語を2進表記すると桁数が多くなり、私達が扱いやすくありません。2進4桁を16進1桁で表すと表3のようになり、見通しが良くなります。
| アドレス | 機械語 | アセンブリ言語 | 説明 |
|---|---|---|---|
| 0000 | 3E2B | MVI A,43 | Aレジスタに「00101011」(43)を格納せよ |
| 0002 | 0611 | MVI B,17 | Bレジスタに「00010001」(17)を格納せよ |
| 0004 | 80 | ADD B | Aレジスタの値とBレジスタの値を加算し、結果をAレジスタに格納せよ |
TK-80(または互換機 ND80ZIII)で表3のプログラムを入力するには、次のように操作します。ただし、ユーザプログラムは8000番地からとなっているので、そうします。
なお、上の「8000」や「3E」などは、16進表記であることに注意してください。もしも上記の入力操作を16進ではなく2進で行うようになっていたとしたら、
コンピュータの中でデータが16進で表されているわけではなく、単に私達が桁数の多い2進データを扱うのが不便なので、2進データを4桁ずつに区切って16進で表記しているというわけです。2進データを3桁ずつに区切って8進で表記していた時代もあります。
| 2 進 数 | 16 進 数 |
|---|---|
| 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 |
0 1 2 3 4 5 6 7 8 9 A B C D E F |
(練習)
表4を参考に、表2が16進表記で表3のように表されることを確認しなさい。
(練習)
TK-80(または互換機 ND80ZIII)に次のプログラムを入力し、実行してみなさい。
また、8013番地からの内容を変更し、「Error...」や自分の名前が表示されるようにしてみなさい。なお、8013番地すなわちDATAの箇所が「76」となっているのは下表との対応による(各ビットは1で点灯、0で消灯)。
|
|
|
|
(練習)
TK-80(または互換機 ND80ZIII)に次のプログラムを入力し、実行してみなさい。
|
|
以上のように、まずはアセンブリ言語でプログラムを考え(表1)、作ったプログラムを機械語一覧表を片手に機械語に置き換え(表2または表3)、機械語プログラムをコンピュータに入力すると、作ったプログラムを実行させることができます。前出のミニコンタイプのコンピュータやワンボードマイコンでは、上の機械語プログラムをスイッチ操作で入力して実行させることができます。
その後、アセンブリ言語のプログラム(表1)から対応する機械語プログラム(表2または表3)を作り出すアセンブラと呼ばれるソフトが開発され、利用されるようになりました。この時、表1のプログラムはソースプログラムと呼ばれます。
また、アセンブリ言語はCPUによって言語仕様が異なりますが、CPUに依存しないFORTRAN(1957年)、C(1972年)、などの高級言語が開発され、利用されるようになりました。これらの言語で作成したソースプログラムは、コンパイラで機械語プログラムに変換され、その機械語プログラムが主記憶装置に格納され動作します。
コンパイラと少し異なる動作をするのが、BASIC言語(1975年)です。主記憶装置にはBASIC言語の翻訳プログラム(インタープリタ)が格納され、この翻訳プログラムが、ユーザが入力したソースプログラム(表1のような文字の並び)を随時解釈しながら必要な処理をするという仕組みになっています。インタープリタの別の例を挙げると、InternetExplorerなどのWebブラウザにはJavascript言語のプログラムを解釈できるような同様の仕組みが組み込まれています。
| 1837 | 電信機(米S.Morse) |
| 1876 | 電話機(米A.Bell) |
| 1895 | 無線電信(伊G.M.Marconi) |
| 1897 | ブラウン管(独K.F.Braun) |
| 1901 | 3000km大西洋横断通信(伊G.M.Marconi) |
| 1906 | 三極真空管(Forest) |
| 1920 | ラジオ放送開始(米) |
| 1923 | 虎印計算機(大本製作所)...オリジナルはオドネルの計算機(1874) |
| 1925 | ラジオ放送開始(NHK) |
| 1925 | 八木・宇田アンテナ(八木秀次・宇田新太郎) |
| 1926 | ブラウン管受像式TVの成功(高柳健次郎) |
| 1929 | TV実験放送(英BBC) |
| 1936 | TV実験放送(米) |
| 1938 | 交流バイアス磁気記録方式(永井健三) |
| 1946 | 電子計算機ENIAC(米ペンシルバニア大:J.Mauchly;J.P.Eckert) |
| 1947 | プログラム内蔵方式の構想(米J.V.Neumann) |
| 1947 | トランジスタ(米BTL:W.H.Brattain, J.Bardeen) |
| 1948 | 情報の量と通信の理論(米BTL:C.E.Shannon) |
| 1949 | プログラム内蔵型計算機 EDSAC(英ケンブリッジ大:M.V.Wilkes)...命令とデータで512個のメモリ |
| 1951 | 商用コンピュータ UNIVAC1 |
| 1953 | TV放送開始(NHK,NTV) |
| 1953 | カラーTV放送開始(米) |
| 1955 | トランジスタラジオ(SONY) |
| 1957 | FORTRAN言語(米バッカス) |
| 1958 | IC(米TI:J.S.Kilby) |
| 1960 | カラーTV放送開始(NHK) |
| 1964 | IC使用コンピュータ System/360, OS/360(IBM) |
| 1964 | トランジスタ電卓(シャープ;25kg;50万円) |
| 1969 | LSI電卓(シャープ 米rockwell) |
| 1969 | インターネットの原点 ARPANET(米国防省) |
| 1969 | UNIX(米BTL:K.Thompson, D.Ritchie) |
| 1970 | DRAM(Intel ICメモリ) |
| 1970 | ミニコン(米DEC PDP-11) |
| 1971 | 4bit CPU i4004(米インテル:ファジン, ビジコン:嶋正利) |
| 1972 | 低価格電卓(カシオ;12800円) |
| 1972 | C言語(米Bell研 B.Kernighan, D.Ritchie) |
| 1972 | 8inch フロッピーディスク(米IBM) |
| 1974 | 8bit CPU i8080(米インテル:ファジン,嶋正利) |
| 1974 | 8bitマイコン ALTAIR 8800(米MITS) |
| 1975 | BASIC言語(米ゲイツ) |
| 1976 | ワンボードマイコン TK-80 88500円(NEC) |
| 1976 | 8bit OS CP/M(米Digitalresearch) |
| 1976 | VHS-VTR(日本ビクター) |
| 1977 | 8bitパソコン APPLE II(米Apple), PET(米Comodor), TRS-80(米Tandy) |
| 1978 | 16bit CPU i8086(米インテル) |
| 1978 | かな漢字変換日本語ワープロ JW-10(東芝;220kg;630万円) |
| 1979 | 8bitパソコン PC8001 168000円(NEC) |
| 1979 | ワープロソフト WordStar(米MicroPro), 表計算ソフト VisiCalc(米SoftwareArts) |
| 1981 | 16bitパソコン(米IBM PC), 16bit OS MS-DOS/PC-DOS(米Microsoft) |
| 1981 | GUIパソコン ALTO(米XEROX) |
| 1982 | 16bitパソコン PC9801(NEC) |
| 1985 | Macintosh(米APPLE) |
| 1986 | パソコン通信 PC-VAN(NEC) |
| 1987 | 携帯電話 TZ-802(NTT) |
| 1989 | BS-TV本放送(NHK) |
| 1991 | WWW(米CERN Tim Berners-Lee) |
| 1992 | インターネット商用サービス |
| 1992 | Windows3.1(米Microsoft) |
| 1993 | Webブラウザ Mosaic(米イリノイ大) |
| 1994 | 個人向けインターネット商用サービス |
| 1999 | 携帯電話インターネット接続 |
| 2011 | 地上波デジタルTV |