「「何もしない」 != 「無駄」」の編集履歴(バックアップ)一覧はこちら
「「何もしない」 != 「無駄」」(2006/02/12 (日) 02:09:49) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
たいていのCPUには、「何もしない」ための命令が実装されています。
「No OPeration」ということで通常NOP命令などと言われます。マシン語としてはだいたい0x00h、アセンブラとしてはNOPであらわされることが多いようです。
この命令は、ほんとに何もしないで、実行ファイルのバイナリ領域と実行時のマシンサイクルタイムを消費するだけです。
なぜ、こんな命令が、しかもほとんどのCPUに実装されているのでしょうか?
CPUは、通常単体では意味を成しません。基盤にCPUをおいてVccとGNDをつないでも、それはまったく意味が無いただのオブジェにしかなりません。
したがって必然的に、CPUの周りにはさまざまな周辺回路が接続されることになります。
そういったさまざまな周辺回路とCPUの間でデータや制御命令をやり取りすると言うことは、基板上で通信を行っていると言うことです。
通信とは、自分と相手があることですから、当然信号の同期が必要です。
同期をとると言うことは、
・処理速度が遅いほうにあわせる
・送受信の開始時にタイミングを合わせる必要がある
と言うことです。
高速なCPUを使っている場合、そのCPUが自分のタイミングで信号を送出したとしても、それを受信する側の機器ではそれを処理することはできません。お互いにデータおよび制御コマンドの送受信を行うためには遅いほうのタイミングにあわせてやら無くてはならないわけです。
そのタイミングあわせに、NOP命令が使われます。
1コマンド送信→NOP→NOP→次のコマンド送信・・・
みたいな感じでしょうか。
また、アセンブラでプログラミングする際によく使われるテクニックに「ジャンプテーブル」と言うものがあります。
詳細は省きますが、このテクニックを使う場合には一定バイトごとにジャンプ命令を並べる必要があります。その際にも、命令を並べるアドレスの調整にNOP命令が使用されます。
さらに、デバッグ時にICEなどを使用していて、一時的にある条件分岐を無効にしたい場合なども、NOP命令でジャンプ命令を上書きしてやれば以降の命令やデータのアドレス値を変更することなく実現することができます。
このように、「何もしない」という命令は非常に重要な意味を持っているのです。
「何もしない」と言うことが無駄ではなく、むしろ「何もしない」ということそのものが重要な意味を持つというのはなんだか奥が深いように思います。
私たちの身の回りの一見無駄なようなものにももっと深読みしてみると面白い発見があるのかもしれません。
表示オプション
横に並べて表示:
変化行の前後のみ表示: