2014年07月01日の日記です


NOP 命令が作られた日(1960)  2014-07-01 12:16:50  コンピュータ 今日は何の日

今日は NOP 命令が初めて公式文章に記された日(1960)。


…本当かどうかわかりませんが。

僕の調べではこれより古い NOP 命令の記述はありません。


2014.7.6 追記

もっと前の記述がある、という情報が寄せられました。情報提供ありがとうございます。

この記事の内容全てが誤りではありませんが、少なくとも「初めて公式文書に記された日」は誤りでした。


最初に NOP が登場したのは IBM 701。しかし、考え出したのは先に開発を始め、後で発売された IBM 702のようです。

IBM 702 では、明確な目的を持って NOP が作られています。

詳細は別記事にまとめてあります。


えーと、1年近く前に書いた記事、「NOP命令の誕生」は、自分では結構面白い内容だと思うのですが、面白さが伝わる人はかなり限られたようです。


うん。妻にすら、なんだかわからないと言われたよ。

まず、普通は NOP 命令が何かわからないよね。それで当然。


もっと多くの方に読んでもらえるように、前知識を解説しちゃいますよ!

面白いと思ったら本文も読んでいってね。




現代のコンピューター機器は、大抵 CPU を搭載しています。

会社によっては MPU って呼んだりするけど、つまりはコンピューターの本体部分。


コンピューターは電流を使って計算をしているわけですが、これは、計算できる回路をたくさん用意して、切り替えているのです。


足し算をしたいなら足し算回路を、引き算をしたいなら引き算回路を、掛け算をしたいなら掛け算回路を、割り算をしたいなら割り算回路を呼び出すだけ。

計算以外では、メモリにデータを記録しておく、とか、逆にデータを読み込む、とか。全部回路で用意されている。


そんな、小さな命令の寄せ集めでコンピューターは動いています。


ちなみに、画面に文字を書いたり、キーボードからの入力を読み込むのは、「記録」の一種です。

特定の場所に書いたデータは画面に表示されて、特定の場所のデータは、キーボードの内容によって勝手に書き変わる。


コンピューターって、本当に、驚くほど簡単な事しかできません。




さて、そんなコンピューターの「命令」も、データとしてメモリに記録されています。

コンピューターは数字しか扱えませんから、10 だったら足し算、11だったら引き算…みたいに、命令は数字と対応している。


しかし、数字だとプログラムしにくいので、一対一対応で、英語を省略したような名前が付いているのが普通です。


足し算なら add 、引き算なら sub 、掛け算なら mul 、割り算なら div 、という具合。

データの読み込みは CPU によって mov (ムーブ、移動、の意味)だったり、ld (ロード、読み込む、の意味)だったり、store (ストア、保存する、の意味)だったり。


余程単純な英語でない限り、CPU メーカーによって命令の呼び名も、その動作詳細も異なるのが普通です。



ところが、メーカーに寄らずほとんど同じ名前、動作も同じ命令があります。

それが NOP 命令。


No OPeration (なにもしない)の略なのですが、略であれば NOOP になりそうなものが、なぜか NOP 。

(NOOP にしているメーカーもあります)




…と、これが「NOP命令」が特別な理由なのですが、理解できる人が非常に少ないんですよね。


多分、プログラム能力がある人って、非常に簡単なものを作る能力でも 100人に1人いない。

ましてや、機械が理解できる言葉(機械語)で直接プログラムしようなんて人は、プログラムできる人のうち 100人に1人いない。


そして、機械語プログラムができる人でも、NOP 命令に興味を持つ人なんて、100人に一人いない。


…となると、今日が「NOP が初めて公式文書に記述された日」と書いて関心を持つ人は、日本全国で 100人程度しかいないことになる。


#今まで NOP に興味を持ってなかった人の2人に1人が、このページを読んで興味を持ってくれれば、5千人程度には増える計算(笑)



僕がコンピューターを使い始めた時には NOP はあって当たり前の命令でした。

だから僕も、正直なところ NOP の存在を特に疑問に思ったことはありませんでした。


これがちっとも「常識」ではないと知ったのは、がたろうさんのページに、「NOPと都市伝説」というコーナーを見つけたから。


そして、上記ページを見つけた時、すでに僕は がたろうさん が求めている答えを知っていました。




がたろうさんは、ある程度有名なマシンを調べて PDP-1 が NOP を最初に搭載したマシンである、と結論付けていました。

そして、その理由はおそらく技術的に自然発生しただけだろう、と。

NOP の名前の由来も、同じように自然発生と考えています。


しかし、PDP-1 の前には TX-0 があり、TX-0 には NOP が存在しなくてはならない、強い理由があるのです。

実際、PDP-1 よりも前に TX-0 の技術文章に NOP が登場していました。



TX-0 は、非常に複雑な命令系を持っています。


先に、CPU の命令を「足し算」「引き算」などの簡単なものしかない、と書きましたが、TX-0 にはそれすらもないのです。


「半加算」と呼ばれる、繰り上がりの無い足し算は出来ました。

また、「繰り上がり処理」も出来ました。

だから、組み合わせれば足し算ができます。でも、それを組み合わせるのはプログラマの責任でした。


全ての命令が、いくつか組み合わせたら何かできそうな機能どまりなのです。

そして、これらの命令は「同時に」実行することが可能でした。


命令の特定のビット(2進数の1桁)を 1 にすると実行され、0 にすると何もしないのです。

いくつかの命令は、2進数1桁ではなく、5桁で表現されました。


この命令体系は TX-0 独特のもので、僕は他のマシンでこのような方法を見たことは無いです。




5桁で示される命令は…2進数5桁では、32種類の組み合わせを作り出せます。

しかし、当初は全ての数字に命令が割り振られていたわけではありません。


命令表で「何も入っていないところは将来の拡張予定」とされました。


しかし、ここで問題が起こります。


1桁で示される命令は「0」を指定すると、その命令は実行しない、と決められています

5桁の場合、すべての桁が 0 の場合は、何もしないことになっていました。


しかし、「何もしない」がゆえに、命令表には何も書かれていませんでした。


何も書かれていないのですから、これは、将来の拡張予定なのでしょうか?

もし拡張されたら、5桁の2進数で示される部分は、「何もしない」ことができなくなり、他の命令に悪影響を与えるのでは?



そして、懸念していた事態…すべてが 0 の「将来の拡張予定」部分に、命令が拡張される時が来ます。


追加された命令は「NOP」。意味はもちろん「No OPeration」でした。

「命令が入ってない場所は将来の拡張予定」でしたが、すべてが 0 の時は何もしないことを保証したかったため、「何もしない」命令が作られたのです。


この追加命令が公式文章に登場したのが、1960年の7月1日。つまり54年前の今日でした。



ちなみに、TX-0 は、6bit を 1byte とする、18bit コンピューターでした。

当時はアスキーコード選定前。1文字は 6bit で、3文字を同時に扱える、ということになります。


このため、TX-0 の機械語命令は、3文字で1命令とするのが普通でした。

NOOP ではなく NOP となっているのはそのためです。



…と、概要は以上の通り。

詳細は「NOP命令の誕生」を読んでね。





ちなみに僕が書いたページ、がたろうさんのページでは触れられていませんが、書いてすぐに連絡済みです。

いろいろお忙しい方なので、ページ更新の暇が無いようです。


お忙しい方の手を煩わせたくないので、「こんな記事があるよ」というような無駄な追加連絡はしないように。

(こっちも趣味、あっちも趣味だから、主張が違ったって構いませんし)




同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

関連ページ

ヴァネバー・ブッシュ 誕生日(1890)【日記 15/03/11】

訂正・NOP命令の誕生

ダグラス・エンゲルバート 誕生日(1925)【日記 16/01/30】

ダグラス・エンゲルバートの命日(2013)【日記 14/07/02】

【訂正】NOP命令が作られた日【日記 14/07/06】

別年同日の日記

05年 再引越し

08年 溶連菌感染症

11年 節電

13年 凝集度の高いプログラム

15年 A Dark Room , Candy box! , Cookie Clicker.

16年 PHSサービスが始まった日(1995)

18年 氷川丸


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

200000

-- follow --




- Reverse Link -