NOP 命令の誕生
(前のページより続く)
目次
なぜ NOP が必要なのか
初期の命令表では、opr 命令はビットフィールドごとに、「1にすると機能が使える」と言う形で書かれていました。
場合によってはビットの組み合わせが必要になりますが、この場合も、0 と 1 の組み合わせを示すだけで、わざわざ「全部 0 だと何もしない」とは書きません。
なぜなら、プログラムをするうえでは「機能」こそが重要で、何もしない命令を示す必要はないからです。
ところが、大改造の提案では、ビットの組み合わせが複雑化したため、わかりやすい「表」にしました。
表の中に互換を取るための命令を納め、新設予定の命令を納め…何もないところは、「今後の拡張予定」としました。
この時は、すべてが 0 の部分も空欄でした。
ここで混乱が生じます。空欄が拡張予定だとすれば、すべての bit が 0 の部分も拡張予定なの?
opr 命令は、「複数の機能を一度に実行する」ことが出来る命令です。
しかし、同時には実行したくない、と言う命令だって、当然あります。勝手なことをされたら、プログラムができません。
重要なのは、「実行する」ことではなく、「実行するかしないかをはっきりする」ことでした。
拡張案が実装されたとき、すべてが 0 の部分は「NOP」と示されました。
ここは拡張予定ではなく、「何もしない、と言う機能が実装されている」と考えたのです。
これまでは、何もしないなら明記しないでよい、と考えていました。
しかし、「何もしないと保証する」ことが重要だと、この時初めて気づいたのです。
この発見は、数学上の「ゼロの発見」に匹敵するほどの大発見だった、と僕は思います。
だからこそ、この後のコンピューターには必ずと言って良いほど NOP 命令が実装されることになるのです。
この時の NOP は、opr 命令で解釈される、bit 4~8 という、一部の小さな部分につけられた名前でした。命令の名前ではありません。
しかし、同じ文書の opr の組み合わせ機能例では、すべてを 0 にすると「no operation」であると示されています
これ、「bit 4~8 以外に関しても、0 のときは何もしない」と明記しようとしたのではないかと思います。
当たり前すぎることの再定義。それが、すべてが 0 のときは「no operation」だという記述の意味です。
ニーモニックこそ NOP ではなく opr なのですが、no operation が「命令として」はじめて公式に文章化されたのは、おそらくこれが最初だと思います。
その後
ちょうど1年後の 1961年7月、命令をまとめた文書が更新されました。
ここでは、opr 命令の bit 4~8 を示す表は、改造計画時のものと同じ表記方法になっています。(クリックで全体表示します)
そして、すでに互換性を失う再編が行われたこともわかります。いくつかの命令が、このビットフィールドに移行しているのです。
全体を見ると、NOP と共に SPARE の文字が見られます。
SPARE は未実装部分です。なにもしないと思いますが、動作は保証されません。
そして、この文書では、opr 命令の組み合わせ例としても、「NOP」が記載されています。
ここで、NOP は「何もしない、と言う一部機能」ではなく、「何もしない命令」になったのです。
もっとも、先に書いた PDP-1 のマニュアルも 1961年でしたから、どちらが先に「命令化」したかは不明です。
PDP-1 と TX-0 の関係
TX-0 と PDP-1 は、ともにケン・オルセンが関わったマシンです。
オルセンは、TX-0 の開発指揮をとった後、DEC 社を創設します。
しかし、並行して MIT のリンカーン研究所で TX-2 の開発指揮をとっています。大学は辞めず、DEC はサイドビジネスとして始めたのでしょう。
TX-0 はリンカーン研究所から RLE に貸し出されます。おそらく、リンカーン研究所と TX-0 はここで関係が切れます。しかし、DEC社はその後も TX-0 の周辺機器を作成したり、かかわり続けています。
改造は、教授や職員と一部のハッカーたちが TX-0 の内部構造を調べ上げて行ったことになっているのですが、おそらくは DEC も関係しているでしょう。
…というか、関係していないと考える方が不自然です。直接の改造をやっていなかったとしても、アドバイスくらいはやっているはず。だって、この後も DEC と MIT のハッカーたちの良好な関係は続くのだから。
そのような状態ですから、TX-0 と PDP-1 がほぼ同時期に nop を明記したのも当然です。
ただ、この命令はやはり TX-0 由来だったのだろうなぁ、と思います。
PDP-1 の命令は、TX-0 よりもシンプルで、素直です。
そんな状況では、「何もしない」と保証することが重要、という発見にはたどり着かない。
改造に次ぐ改造で、命令セットがぐちゃぐちゃになっていたからこそ、将来の保証として「何もしない」が重要になったのです。
次ページ: 僕の見解
(ページ作成 2013-06-27)
(最終更新 2014-07-06)