NOP 命令の誕生

さて、TX-0 の話題も、これで最後にしましょう。


前回の「拡張後のTX-0の命令」で、opr命令の拡張は「最初は互換性を保ったまま拡張が行われた」と書きました。

まだそのことを書いていません。


また、拡張後のビットフィールドを、初期と同じ形で記述しました。

実は、拡張案の決定文書以降は、違う形式が取られています。しかし、その書き方は使いませんでした。


これは、初期と比較しやすいように…ということもあるのですが、今回書こうと思っている核心部分がばれてしまうのを防ぐため。


今回は、世界で最初の NOP 命令についてです。

2014.7.6 追記 2015.6.20 再修正
TX-0 が NOP の最初ではない、という情報が寄せられました。
TX-0 が最初である、という点に関し、このページの記述は誤りでした。

まず、2014年時点で、IBM 701が最初、と判りました。
さらに、2015年時点で、701 の前に作られた IBM SSEC が最初、というところまで遡れました。

TX-0 が最初である、という記述は誤りですが、他の記述が間違っているわけではありません。
資料性の高い内容もあるためページはそのまま公開を続けます。

目次

TX-0 の概要(別ページ)

初期のTX-0の命令(別ページ)

改造後のTX-0の命令(別ページ) 訂正記事

NOP命令と都市伝説

再検証

EDSAC の「何もしない」命令PDP-1 の NOP 命令

NOP の誕生

なぜ NOP が必要なのかその後PDP-1 と TX-0 の関係

僕の見解

世界初のテレビゲーム(別ページ)


NOP命令と都市伝説

実は、Whirlwind (WWI) の記事を書く際に、WWI - TX-0 - PDP-1 と続く系譜を調査していました。

その際、PDP-1 の命令セットを調べていて見つけたのが「NOP命令と都市伝説」という記事。


念のために解説すれば、NOP とは「何もしない」と言う意味のコンピューター命令です。


計算するために作られたコンピューターに、なぜ「何もしない」なんて無駄な命令があるのか?


詳細はリンク先を見てもらうとして、上述したページでは、NOP がなぜ生まれたのか、に関する根も葉もない話…「都市伝説」を取り上げ、誤っていることを解説しています。

(僕はこれらの話を聞いたことはなかったのですが、そういうことをいう人がいそうだ、というのはわかる気がします)


そして、最初の NOP がいつ生まれたのか、という調査結果と、なぜ生まれたのかの推察を書いています。


ここでは「NOP」は、「何もしない命令」とは違うことになっています。

何もしないだけなら、EDSAC の X 命令があるそうで、あくまでも調べる対象は「NOP」と名付けられた「何もしない命令」である、とのこと。


ここでは、最初の搭載は 1960年11月完成の PDP-1 、理由はインストラクションデコーダ(命令を解釈する回路)の設計上の理由により自然発生、としています。


しかし、著者の方はこれを「自分の調査範囲でわかったこと」と断ったうえで、さらなる情報提供を求めています。

…というわけで、今回は情報提供のために記事をまとめます。


再検証

著者の方を疑うわけではありませんが、一応再検証しておきます。


EDSAC の「何もしない」命令

著者の方は、EDSAC に「何もしない命令があった」が、これは NOP とは呼ばれていなかった、として「最初の NOPではない」と考えています。

EDSAC の命令は過去に見たことあったけど、「何もしない命令」になんて注目していませんでした。改めて調べます。


探してみると、EDSAC の命令コード一覧は、EDSAC Simulator のチュートリアルにありました。


EDSAC はアルファベット1文字で命令を表します。上記チュートリアルによれば、X は No operation です。


EDSAC 2001年の命令そして、「使っていないアルファベット」は他にもあるにもかかわらず、X だけが No operation と明記されているのです。

つまり、「未実装」だったから何もしないのではなく、何らかの意図があってわざわざ「何もしない」命令を作っている、と言うことになります。


右はチュートリアルの、No operation が記された部分。

ただし、このチュートリアルが書かれたのは 2001 年ですから、「No operation」というのは NOP 命令を知っている人間の書いた説明です。EDSAC 開発当時の資料がないと、鵜呑みにはできません。

何もしない命令は、当時どのように説明されていたのか? 裏を取る必要があります。


探せば、他にも EDSAC の命令コード一覧を載せているページは見つかります。

しかし、それらのページのほぼすべてで、上の Simulator の存在に触れています。

つまり、これらのページは上記チュートリアルを元に書かれた内容であり、検討に値しません。


いろいろなページを探し回り、やっと1950年の雑誌の記事の中に「EDSAC 開発当時の」命令コード表を見つけました。


EDSAC 1950年の命令なんということ!

この命令コード表には、X なんて命令は載っていません。

「何もしない命令」を意図して作ったのであれば、載っていて当然なのに。


右は先のチュートリアルと同じ説明の部分。X命令は存在しない。

…いや、もしかしたら開発者が意図して作った命令を、記事を書いた人が「何もしないのなら、わざわざ命令表に入れる必要ないじゃないか」と削除してしまった可能性もあります。


そう思って記事を書いた人の署名を見ると、M. V. Wilkes とあります。これ、EDSAC の開発者です。


なんということ!

つまり、開発者は「何もしない」なんて命令は作っていません。


最初はなかった X 命令を後から追加した、という可能性も考えたのですが、EDSAC Simulator のチュートリアルには「1949年の命令セット」と書かれています。

先ほどの命令コード表が 1950年に書かれたものですから、「後から X を追加した」のでもありません。


ところで、この X 命令の「追加」位置ですが、おかしいです。

命令が X Y Z …と並んでいて、何もおかしそうには見えませんが、この命令表は「アルファベット順」ではなく、「機能別」にまとめられています。

EDSAC は計算機ですから、計算に必要なものから順に書かれています。Y は計算上「必須」ではないが、工学的には計算を行うのに必要とされる「桁あふれの処理」をする命令。そして Z は純粋に工学的な「計算機の停止」命令です。

もし「何もしない」命令を入れるなら、Y よりも後のはずです。何もしない命令は、工学的な必要があって作られていたとしても、数学的には不要なのですから。

確定的なことは言えませんが、X 命令の記述は、何かがおかしいです。


EDSAC Simulator のチュートリアルには、最後に参考文献が並んでいます。

残念ながら、すべてが 1980年以降に発行された本です。すでに NOP 命令が一般化してから書かれた資料です。

一応、1950年当時の本の再版もありますが、それだって「再版」なのです。手が加えられた可能性を排除できません。

開発に関係していた誰かが、未実装であった X 命令を「実は NOPだった」と言い出して手を加えていたとしても、誰も疑問には思わないでしょうし、すでに検証もできなかったでしょう。


今のところ見つかっている、一番信用できそうな資料は、1950年に書かれた開発者本人による解説です。そして、そこには X 命令は書かれていません。

となると、EDSAC に何もしない命令は存在していなかったか、もしあっても重要だとは思っていなかった、と捉えるのが妥当なように思います。


次ページ: PDP-1 の NOP 命令


1 2 3 4 次ページ

(ページ作成 2013-06-27)
(最終更新 2015-06-20)

前記事:後期TX-0命令     戻る     次記事:世界初のテレビゲーム
トップページへ

-- share --

8007

-- follow --




- Reverse Link -