ここまで来ると、プログラムを開発する準備が出来ましたが、なぜ、21世紀の今、PDP-11のような古いコンピュータを知ることが大切か、少し考えてみました。
現在の主流は、X86アーキテクチャの流れを引くINTEL CORE シリーズだと思われます。AMDの互換プロセッサもこの範疇に含まれるます。元をたどれば、インテルの8086マイクロプロセッサの命令に、その時々の必要性に応じる形で、拡張に拡張を重ねて、古い温泉旅館の新館、別館、別棟の大浴場のような初見では、何が、どこにあってどのように使うのか大変見通しの悪い構造になってしまいました。新たに、コンピュータアーキテクチャを学ぶ人は、どこから手をつければ良いのか、なぜこうなっているのか、迷える仔羊のようになっているのではないでしょうか。本当に同情いたします。
以前に紹介した竹内郁郎さんのブログにこのような一節がありました。長くなりますが引用してみます。(竹内さんは、LISPという人口知能関係の言語の専門家です)
「2010年に東大を定年退職したあと、ヒマになったので、そのへんに転がっているIntelマシンをLispマシンにできないかなと思い、IntelのWebページからIntel 64およびIA-32アーキテクチャの膨大なマニュアルをダウンロードしてみた。Intelマシンでも機械語の重箱の隅をつつけば、Lispマシン風に仕立てることができるかもしれないと考えたからだ。最悪でも、それまで独自マシンのために書いていたマイクロコード(第13回の写真2参照)を「なんらか」の形で移植すればいい。だが、マニュアルがなんと総計4,716ページ。いくら読まなくてもいい部分が多いとはいえ、ちょっとめげてしまった。でも、過去のしがらみを一杯背負っていて、まぁ、大変な、かつ使いにくそうなアーキテクチャだということまではわかった。」
Balconも、まったく同感です。度々引用している木村泉先生も講義で、インテルアーキテクチャを採用するという苦渋の選択をした背景についてこのように書いています。
インテル8086のことを品劣れるとか、PDP-11の不祥の子孫とか書いています。(苦笑)
これに対して、PDP -11のことは、「実に美しい計算機で、講義するのがとても楽しかった。」(同感)
Balconを含めて、PDP-11のことを覚えている人々の偽らざる感想ではあると思います。インテルのX86アーキテクチャを知る上でも、その先祖のPDP-11を知ることは、役にたつとは言い過ぎでしょうか。
では、表題の5匹のカタツムリのサブルーチン版にかかりましょう。
プログラムは1000番地から、スタートします。今回は、スタックに帰り番地を積むので、スタック・ポインタをまずセットします。 MOV #1000,SP でスタック・ポインタに1000番地をセットすると、スタックに値が入るたびに、776番地から、774番地、772番地‥‥とスタックが使われていきます。
R1レジスタを繰り返しのカウンタとして、繰り返し回数の5をセットします。
1文字出力するサブルーチンは、R0レジスタの下位1バイトに出力するアスキー・コードを入れると、テレタイプ(TTY)に出力する1文字出力すると言う設計にします。
サブルーチンから戻ると、R1レジスタの値を一つ減らして、結果が0でなければ、1014番地に飛んで、ループします。
5回ループをまわると終了します。
サブルーチンの方は、TTYの状態を調べて、出力可能になったら、一文字書き込んで、RTS PCで、戻ります。
(紙テープと高速紙テープ紙テープ・リーダ/パンチ装置の巻へつづく)