2nd Stage:Scene 3

走り回るCPU


 ごく基礎的な電気の話だったのに、無残にもオバさんパワーに圧倒されてしまったことで、若い成康は少なからずショックを受けていた。
 放心状態……とまではいかないが、まるで考えごとをしているかのように、うつろな目をしてトボトボと歩いていた。いつの間にやら日が暮れたのだろうか、不思議な闇が周囲を覆っていた。
ドカチ〜ン!
 成康の身体が瞬間的に宙に舞い、そしてお尻からドッス〜ンと落ちた。目から火が出るホーホケキョ!
 あまりの衝撃に、成康の脳波にも乱れが生じた。と、そのとき……。数メートル離れた場所で、同じように落下する衝撃音が聞こえた。ドッス〜ン!
 これがマンガなら、頭の周りを星がグルグル回っているところだ。それとも小鳥がピヨピヨ鳴いて……と思ったとたん、成康は正気に戻った。そして、全身に痛みが走った。

「い、痛てててっ……!」
「それは、こっちの言うセリフだいッ。いったい、どこを歩いているんだッ!」
「ど、どこをって。ここは天下の往来、ただの道でしょ」
「ア〜、何というミチな……じゃなかった無知な人間。よく見ろよ。ここは、オイラだけが走ることを許されているメモリじゃないか!」
「エ、エェ〜ッ!?」

 足元を見ると、確かにシリコンロードの雰囲気とは一変していた。暗闇に延々と続いている線路のない枕木。いや、枕木みたいに見える黒い御影石……のようなもの。
 不覚にも、いつからこんなところを歩いていたのか、まったく気づかなかった。いくらオバさんの正体をいろいろと詮索していたとはいえ、明らかに落ち度は自分にある。ましてや、これがパ界にとって大切な内部メモリの上だったとは……。
 それにしても、この走る球体ロボットらしき物体は何者なのか。自分だけがメモリ上を走ることを許されていると自慢していたが、いったいその根拠はどこにあるのか。ナゾがナゾを呼び、すべてがわからないことだらけだった。こういうときは、とりあえず謝っておくに限る。

「ども、すンません。ところで、いろいろと聞きたいことが……」
「フム、しょうがないなァ。ちょっとだけだゾ、こう見えても多忙なんだからな」
「いったい、貴殿の正体は何なんスか?」
「正体? オイラはCPU(シーピーユー)という名のスーパースターだッ!」
「そんな妙な名前を聞かされても正体はわからないッスよ」
「いわば、パ界の頭脳といったところだ!」
「どうりで、大きな頭をしているわけだァ」

 CPU(Central Processing Unit:中央演算処理装置)は、パ界の中枢部にあって各種演算制御処理を担当している。つまり、数学的な計算をしたり、各種機器類の動作をコントロールしているわけである。
 場合によってはMPU(Micro Processing Unit:超小型演算装置)と呼ばれることもあるが、実質的にはまったく同じものを指している。

CPUとMPU


 かつては、IBM社製パソコンやその互換機などに採用されたインテル社系のものがCPUと呼ばれ、Apple社のMacintosh(マッキントッシュ)シリーズなどに採用されているモトローラ社製はMPU……という使い分けをされることが多かった。
 しかし、近年では曖昧かつ乱れた用い方をされており、明確な区別をするだけの論拠は薄れてしまった。どちらかというとCPUと呼ばれることが多いという程度だ。
 CPUは、メモリ内容(8ビットの2進数=0〜255)を命令と解釈し、規定どおりの処理を実行する。
 もちろん、命令が完了したら次の命令があるメモリへと自動的に進む。この動作を、ただひたすら延々と繰り返すのである。
 すなわち、CPUにとっては足元のメモリ内容(8ビットの2進数)こそが動作の指針ということになる。
 そして、その動作の指針となる命令のことをマシン語(機械語)といい、連続するマシン語によって一定のプログラムが形成されているのだ。CPUがパ界の頭脳とされるのは、このマシン語を解読して実行できるからに他ならない。

 逆にいうと、内部メモリに記憶されている8ビットの2進数=マシン語命令こそが、知能に匹敵する賢さを演出する母体なのだ。決して、CPUそのものが自発的な思考回路を持っているわけではない。
 したがって、命令内容が変化すれば実行内容も変わる。パソコンがワープロになったりゲーム機になったりできるのは、この「命令を自在に変えられる」という特徴があるからなのだ。
 例えば、ワープロ専用機がワープロにしかならないのは、プログラムがROM化されているためで、これをRAMに置き換えてプログラムを変更可能にすれば、旧型のパソコンに匹敵するだけの実力を備えているのである。

「なるほど、メモリの中身はマシン語というプログラムだったのか」
「そのとおり。オイラは、パ界の頭脳なんて称されているけど、ホントはメモリにある命令に従って行動しているだけなんだ。マシン語プログラムこそ、正真正銘の頭脳だヨ」
「アレ、ずいぶんと謙虚な……」
「謙虚は、オイラの信条さ。それに、どうせマシン語命令を理解して実行できるのは、この世でオイラただひとり……なんだから!」
「だけど、8ビットの2進数といえば0〜255のことでしょ。いったい、256種類の命令だけで、どうやってゲームやワープロなんかが実現できるの?」

 成康は、まず大きな勘違いを犯していた。確かに、メモリには0〜255に相当する8ビットの2進数しか記憶することはできない。しかし、それをもって、命令が256種類しかないと結論づけるのは早とちりというものだ。
 1バイトで足りなければ2バイトで、2バイトで足りなければ3バイトで……というように、マシン語の命令は必ずしも1バイトとは限らないのだ。
 例えば、メモリ内容のCBh(11011101b=221)が「1つ先のメモリ内容を新たな命令とする」という命令だとすれば、それだけで256種類の新命令を構築できる。つまり、その気になればいくらでも命令総数を増やすことが可能ということになる。
 もちろん、それが許されるのはCPUそのものを開発/設計する段階だけ。完成してしまったCPUに手を加えて、都合のよい命令体系を作るというわけにはいかない。
 ただし、CPUの本格バージョンアップをする場合には、旧CPUの命令体系の未使用部分に新命令を割り当てたり、そこで設定を切り換えて新しいモードへ移行させるのが一般的な手法となっている。マシン語レベルでの命令体系は、不用意に変更すると過去のソフトウェアがすべて動かなくなってしまうからだ。
 黎明期における新製品ならいざ知らず、現在では過去との互換性を保つような配慮がなければ、ユーザーの支持は絶対に得られない。ソフトウェアは、パソコンの命運を握る貴重な資産なのである。
 いずれにしても、マシン語と呼ばれる命令の総数はたかだか数百程度。あらゆるソフトウェアは、それらを論理的に組み合わせることで作られているのだ……が、まだまだ成康はそのロジックを理解するレベルに至っていない。

ロジック


 考え方とか論理的な思考法のこと。コンピュータのプログラムでは、ある目的を達成するための進行方法を示す。
 そんなわけで、ここでは「CPUはマシン語命令の内容によって必要バイト数を判断し、実行後にその分だけ先へ進む」ということで一件落着だ。

「ちょっとした疑問なんだけど、メモリって一本道なの?」
「ウ〜ム、例えていうなら山手線みたいなものかな」
「ということは、始まりも終りもないってこと?」
「要するに、終点の次が始まりってことだよ」
「エッ、それってどこで判断するの?」
「なんだ、メモリにアドレス(番地)があることも知らないのか。ホラ、メモリの横に数字が書いてあるじゃないか!」
「どれどれ……?」
「おっと、こんなところでノンビリしてはいられない。次は、別のアドレスへのジャンプ命令だ。じゃねッ!」

 成康が、メモリにあるアドレスに目をやろうとしたとき、CPUはまるで瞬間移動でもするかのように「フッ!」と消滅してしまった。
 そのあまりのすばやさに、呆然と立ち尽くす成康。すると、それまでCPUの陰に隠れて気づかなかったが、一枚の看板が目に飛び込んできた。

****** アドレス(番地)について ******


@ 内部メモリには区別のためのアドレスがあるなり。
A アドレスは連続する番号で示されるなり。
B 通常、すべてのアドレスは16進法で表記されるなり。
C 終点(例:64KBならFFFFh)の次は、0番地へ戻るなり。
D 同じアドレスが重複するメモリもあるなり。
E アドレスの指定方法は1つとは限らぬなり。

 あえて語るまでもないが、実際のメモリアドレス(番地)は電圧の高低による2進法で区別されている。もちろん、CPUも2進法によって識別をしている。しかし、人間には桁数が多過ぎて追随できないため、われわれの目に触れる際には例外なく16進法で表記されているのだ。
 Bの終点というのは、どんなに巨大なメモリ空間を供給したところで、有限である以上は必ず存在する。ただし、その先は0番地へとループしており、行き止まりという意味ではない。
 数学的にいうなら、有効桁数を超えたものは無視(=上位切り捨て)されるということだ。これは、アドレスに限らずメモリの中身でも同じになる。
 例えば、メモリの中身がFFhのときに+1すれば、そのメモリの中身は0になるという具合だ。

 とはいえ、常識的なプログラムにおいては、終点から0番地にループするようなことはない。つまり、そういう作り方(プログラミング)はしないということである。
 それよりも、ここで重要なのは「有効桁数に対するコンピュータの対処法」にある。メモリアドレスにしてもメモリの中身にしても、桁数が有限なのにエンドレスとして扱われているのだ。
 よく「天才と○○は紙一重」というが、パ界では「最大値と最小値は紙一重」ということ。したがって、最大値/最小値を限界点として扱いたい場合は、プログラム側でそれを考慮しなければならない。ゲームの最高点などは、その典型的な例といえるだろう。
 Dの同じアドレスが重複するというのは、限られたメモリ空間を増やすことを目的として考え出されたものだ。ちょうど、鉄道線路のポイントを切り換えて部分的に複線化するようなもので、バンク切り換え方式と呼ばれている。

 これは、どちらかというと1980年代〜1990年代前半にかけて活躍した旧式のCPUでよく見受けられた手法である。
 Eの複数のアドレス指定というのは、メモリ空間は広く確保してあるのに、番地表示に限界があるケースだ。
 人間社会でいえば、番地に4桁しか使えないのに家が5桁分あるようなもので、このままでは全部を特定することができない。そこで、○丁目×番地というように2段階で指定するようになっているのだ。
 この場合、○丁目に1桁を割り当てれば間に合うが、これを○丁目のほうにも4桁を使えるようにし、それを10倍して4桁の×番地と合算するのだ。当然、同じ場所に対して複数のアドレス表示が存在することになる。
 例えば、12345番地を指定したいなら「1000丁目2345番地」でも「1234丁目5番地」でも構わない。同様に「1200丁目345番地」とか「1100丁目1345番地」……など、1つのメモリに対して多様なアドレスが生じるわけである。
 ちなみに、この○丁目に相当するほうをセグメントアドレスといい、×番地のほうはオフセットアドレスという。この方式は、過去の膨大なソフトウェアに支えられており、未だに完全な形での決別はできていない。
 メモリというのは、本体内部にセットされた位置によって、絶対的な位置を示す絶対アドレス(物理アドレスともいう)が決定される。しかし、CPUの持つ特性によっては、このような管理上のアドレス(論理アドレスともいう)がマシン語プログラムにおいて使われているのである。

 これが、成康が見た看板に書かれていた内容の詳細だ。といっても、これは真実を覆い隠さず説明しただけのこと。覚えなければならないポイントは、単に「メモリは連続するアドレスで区別され、終点で最初にループする」ということである。
 そう納得した成康は、例のオバさんのことなどスッカリ忘れ、メモリの脇を注意しながら歩き始めた……。


COFFEE BREAK:本体の言い訳

 パ界へ入る直前に、成康がマカイ老師に投げかけた最後の疑問。それは「本体の直接コントロール下にある内部メモリ」という一文の「本体とは何か?」という素朴な内容であた。
 にもかかわらず、マカイ老師は「自分で捜し出すべし!」として即答を避けている。メモリ内容を解読して実行するCPUが出現したことで、このときの本体がCPUを意味していたことは、もはや明白であろう。
 その場で口にこそ出さなかったものの、おそらくはノンビリ屋の成康も気づいていたに違いない。それとも、疑問を抱いたことすら忘れてしまっただろうか。
 このあたりの真相は、本人が口にしなかった以上は、誰にもうかがい知ることはできない。しかし、CPUを説明すればメモリが絡んでくるし、メモリを追究すればCPUが関係してくるとなると、マカイ老師の本音もチラホラと見え隠れする。
 つまり、両方を一度に説明をすることはできないということ。だからこそ、あえて言葉を濁したというわけである。
 アレ、それってもしかするとマカイ老師の仮面をかぶった筆者のぼやき……なんていうのは、あまりにも深読みというもの。あくまでも、これはマカイ老師の成康に対する思いやりから出た激励の言葉(←ン?)。ただひたすら、そう信じてください。