初めにお話すると、Balconは、PDP-11のFORTRANとアッセンブラのプログラミングはしたことありますが、機械語は使ったことはありません。ではなぜ機械語なのかというと、よく言及されるPDP-11のアーキテクチャは16ビットマシンの完成形だとか、命令の直交性だとかを味わえるのは、やはり機械語で見ていくのが、一番じゃないかと思われるからです。
当時は、実験で一杯、一杯だったので、プログラミングにしても、PDP-11の凄さを味わう余裕はありませんでした。世界で初めてのデータを取るということで、測定機器の設計、制作、PDP-11との接続、プログラムの開発と、ハンダ付け、配線のラッピング、プログラムのデバック、実験データの取り込み全てに関わっていました。
ラッピングとは、裸にみむいた、テフロン線を、生花の剣山ように長く伸びた端子に巻きつけて配線していく方法で、当時は一般的でした。
PDP-11の後ろから見た写真です。21世紀の今なら、バスラインはプリント基板でしょうが、こんな感じで配線されていました。
配線の変更・追加が巻き付いた線の巻き戻し、巻きつけで簡単できてしまいます。
では、機械語の話に入ります。
前回、例に使ったまず足し算は、063737でしたが、8進で、06の部分は、演算子(oprator)と言って、演算の種類を指定します。足し算の機械語は、データのありかを指定する被演算子(oprand)を二つ取る命令なので、被演算子37 が二つ続きます。37は、命令の番地の次の番地に書かれているデータがオペランドのアドレス(番地)だよと指示しています。
番地 命令
1000 063737
1002 1010
1004 1012
これで一つの完成した機械語命令になり、1010番地のデータと1012番地のデータを足して、1012番地に書き込みます。 PDP-11には、オペランドを 二つ取る命令が、12個あり、第一オペランドをソース(source)、第二オペランドを、デスティネーション(destination)と呼んでいます。演算の結果はデスティネーションに入ることが多いですが、例外的に、デスティネーションが変化しない命令もあります。
オペレータには、記憶しやすいようにニックネームが付いています。06にはADDというニックネームがついています。このニックネームのことをニーモニック(mnemonic)と言います。
ADD命令は、オペランドを2個取りますが、オペランドを1個取る命令やオペランドを取らない命令もあります。前回の例の1006番地の000000は、ニーモニックはHALTで、プログラムの停止を命令しますが、オペランドは取りません。
木村先生のOHP原稿を見ると、次のように纏めらています。図中RSTはRTSの誤りですが、Balconも同じ間違いをよくやらかして、アセンブラに怒られました。
なお、二つオペランドを取る命令の代表的ものは、MOV(01)命令で、データのコピー・ペイントをします。SWAB(0003)命令は、1語のハイバイトとローバイトを入れ替えます。
分岐命令は以下は、また後ほど説明します。(命令の観光地図の巻につづく)
※コメント投稿者のブログIDはブログ作成者のみに通知されます