NOP 命令

|

大型汎用機(メインフレーム)の機械命令(マシン語)に NOP 命令というのがある。私は二十年前に計算機プログラミングを習いはじめた時,面食らったもののひとつである。これは要するに「何もしない」という命令(NOP = No OPeration)なのである... ドキュメント作成システム LaTeX(「ラテック」,「ラテフ」あるいは「レイテック」と読む。「ラテックス」じゃないよ。それじゃコンドームになっちまう) を使う方は,同様に「何もしない」\relax 命令をご存知のはずである。

「何もしない」命令なんてどうして必要なのだろうかと誰しも思うだろう。ところが沈黙が文芸表現において意味をもつように「何もしない」命令が素晴らしいトリックを実現する場合がある。計算機の世界でも,沈黙が時に雄弁に勝ることがある。

例えば,アセンブラで書いたプログラムにおいて BC(Branch on Condition)命令で条件分岐をする手続きがあり,通常はフラグレジスタの値によって分岐するわけだが,運用上の問題からその条件分岐をさせたくないことが起こったとしよう。そのような場合,実行時パッチ(パッチとはプログラム訂正コード。訂正したい部分だけのコードなのでパッチ=「継ぎ接ぎ」と呼ばれる。大型汎用機にはディスク上のプログラムそのものを書き換えるのではなく,メモリにロードする時点でパッチを適用できる機能がある。アセンブラで書いたプログラムでないとこんな芸当はできない)で記憶装置にこのプログラムをローディングする際に,BC 命令を NOP 命令で書き換えたりしたものである。これにより分岐命令が無効化され,いかなる条件においても次の命令以降が実行されるわけだ。

汎用機のコーディングにはこれに類するトリックがゴマンとあった。先輩のプログラムをメンテナンスした時のこと,意味不明の領域確保命令が書かれていて「これ何ですか」と聞いた。アセンブラは領域の制御をすべてプログラマの知性に委ねることができる。記憶装置のどの位置にどのバイナリコードが配置されているかが正確に分る。ローディングされた時,高速化の鍵を握るループ処理がきちんとプロセッサの超高速バイポーラ一次キャッシュに収納可能かを正確に設計することができる。記憶域セグメントに余裕があると,プログラムの問題修正時にパッチをあてる領域を確保しておくことがある。こうしておくとメモリ配置に影響のある実行サイズを変えることなくプログラムに追加/修正コードを付加できるわけだ。先輩の領域確保命令の意図はそのようなものであった。

LaTeX の \relax についても一度定義したマクロ命令を無効化するのに利用でき,同じマクロ命令の意味を状況に応じて変更する使い方がある。もちろんそのほかに「何もしない」ことが逆説的に機能するいろんな局面がある。さあ,リラックスしてプログラムに魔法をお掛けしよう — LaTeX の作者・クヌース教授の懐の深さが知れるというものである。

「何もしない」命令。これは計算機科学者による最高のデジタル・ジョークに違いない。

Moon Calendar

Profile

ISAO YASUDA。システムエンジニア。神奈川県在住。昭和 30 年代を懐かしむオヤジ。ロシアに興味があります。
[more], [About our site]

Notice

この文書はフィクションであり,実在する個人,団体等とは一切関係ありません。

R-18 指定サイトです。そのうち「18 歳以上ですか」の認証を入れる予定です。

文書の記述内容は無保証です。不適切な表現があればコメントにてご指摘ください。

コメント,トラックバックは,現在,運用を停止しています。ご意見等ありましたら isao@yasuda.homeip.net 宛電子メールにてお願いします。

Links

About this entry

Written by isao at 2007年7月26日 19:45.

Previous: アジア杯

Next: アジア杯3位決定戦

Recent Entries in Main Index.
All Entries in Archive Index.

February 2012

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
Powered by Movable Type 4.1 blog counter