訂正・NOP命令の誕生

目次

まずはお詫び

701/702/650 の NO OP 命令

IBM 702 の構造

IBM 702 の NO OP双子の命令自己書き換えの必要性

NO OP から NOP へ

TX-0 の NOP

調査済みの歴史

現在の NOP

まとめ


IBM 702 の NO OP

そろそろ、IBM 702 の NO OP 命令の話に入りましょう。


マニュアルの説明は、3つの項目に別れています。


第1に「何もせず、次の命令に進む」

第2に「アドレスは意味を持たない」。

第3に「パイロットセレクタのように使用できる」。


1番目と2番目は、あっさり書かれています。上に書いたのが、省略なしにほぼすべて。そして、第3の説明で、非常に長い、図や例示の入った説明が行われています。


その説明の冒頭の一文が「パイロットセレクタのように使用できる」です。

これは、「何もしない命令が非常に便利である」という、当時の常識を超えた概念を説明するために、皆の慣れた技術から類推できるようにして、理解を助けるための一文です。

しかし、当時は当たり前の技術だったとしても、今の我々はパイロットセレクタが何か知りません。まずは、この説明から始めましょう。


IBM がコンピューター事業に乗り出す前の大ヒット商品に、IBM 407 会計機という機械がありました。パンチカードに入力されたデータを、分類し、並び替え、集計することができる機械でした。


IBM 407 では、パンチカードをどのように扱うか、配線によって「プログラム」することができました。


右写真は IBM 407 のプログラム用パッチボード。ここで配線を行う。
コロンビア大学より引用。

パンチカードは読み取られ、穴が開いていれば、対応する電極に電流が流れるようになっています。そこで、その電流をコード(電線)によって別の電極に流してやります。

装置に対応する電極に電流が流されると、装置が作動します。パンチカードを別の受け皿に送ったり、別の穴から入った信号を数として足し合わせたり…などなど。

これが、IBM 407 の「プログラム」でした。


IBM 407 、というのは、実は「シリーズ」の名前であり、この中にも機種があります。その中でも、高級機種でのみ使えた機能が「パイロットセレクタ」でした。


IBM 407 のパイロットセレクタ説明図1つの「パイロットセレクタ」は、4つの電極を持っています。1つはスイッチ。1つは入力。そして、2つは出力でした。


スイッチに入れられた信号により、入力信号は、2つの出力のどちらかに振り分けられます。これを使って、パンチカードにあけられた穴など、特定の条件を見て働く回路を作ることができました。

(条件により、2つの回路を切り替えることもできます)



図は IBM 407 のマニュアルに示された、パイロットセレクタの概念図。クリックで拡大します。
PU (PickUp : カード読み取り機)からの信号により、C (Common : 入力信号) は、N (Normal) か T (Transfer) に振り分けられます。

スイッチはパンチカードからの信号に限定されているわけではなく、「これまでに集計した数が一定数を超えたら」などでも構いません。
非常に柔軟なプログラムが作れました。


これ、ある種の「条件分岐」でした。IBM 407 はコンピューターではありませんが、プログラム可能で条件分岐も出来たのです。


双子の命令

話を IBM 702 に戻します。


IBM 702 には条件ジャンプ命令とともに「無条件ジャンプ」命令がありました。まぁ、大抵のコンピューターには存在する命令です。

無条件とは、「常に条件が整っている」条件ジャンプだと言い換えられます。つまり、条件ジャンプの一種ではあるが、必ずジャンプするのです。

IBM 702 では、無条件ジャンプは TR という命令でしたので、以下 TR と書きます。(Transfer 、「移動する」の略です)


この逆に、「常に条件が整わない」条件ジャンプがあったらどうなるでしょう?

つまり、その命令は「何も起こさない」命令だということになります。


IBM 702 のマニュアルによれば、NO OP はそのような使用用途を想定した命令でした。


IBM702 の NO OP 説明図NO OP と TR は、命令コードでいえば上位 2bit が違うだけでした。

そして、先に書いた通り、IBM 702 には、メモリの上位 2bit だけを操作する命令があります。


つまり、TR は簡単な操作で NO OP になり、ジャンプしなくなります。そしてまた、簡単な操作で TR に戻すこともできます。


右図は IBM 702 のマニュアルに示された説明図。クリックで拡大する。
フローチャートの中央下に、ひし形で SW と書かれた部分がある。
自己書き換えで TR にすれば左側に、NO OP にすれば右側に、と処理を振り分けられる「スイッチ」となっていることがわかる。


IBM 407 会計機は、パイロットセレクタ機能によって、「一定条件の場合だけ動かすプログラム」を作れました。

IBM 702 は TR と NO OP を切り替えることで、「一定条件の場合だけ動かすプログラム」が作れます。

これが、NO OP の説明の3番目、「パイロットセレクタのように使用できる」の意味です。




TR と NO OP の命令コードは、「交換しやすいように」考慮して定められています。

そしてその動作も、これを条件ジャンプの一種とみなすと、正反対です。TR は必ず真、NO OP は必ず偽の条件ジャンプです。


何かをさせるために作られた機械に、「何もしない」なんて命令を作るには、それなりの理由があるはずです。

IBM 702 では、条件ジャンプのバリエーションの一つとして、常に真の「TR」と対になる命令として、常に偽の「NO OP」が着想されたように思います。この二つは双子の命令なのです。


先のパイロットセレクタの図で、出力状態が2つあったことを思い出してみてください。
出力は「T」と「N」と呼ばれていました。そして、IBM 702 の対応する命令の頭文字も「T」と「N」です。

もっとも、T は両方とも「Transfer」の意味で同じです。
N は Normal と No operate。これは、狙ったのか偶然なのかわかりませんが、理解を早めるために類似させた可能性はあります。


次ページ: 自己書き換えの必要性


前ページ 1 2 3 4 次ページ

(ページ作成 2014-07-06)
(最終更新 2015-06-13)

前記事:世界初のテレビゲーム     戻る
トップページへ

-- share --

74000

-- follow --




- Reverse Link -