CASL2で用いられる命令の中には、実際のプログラミングで使用しない命令があります。
それが、
「SVC」命令です。プログラミングに使用することがないとはいえ、必要な命令になります。
今回は、スーパーバイザコールとノーオペレーション命令を見てみたいと思います。
スーパーバイザコール命令
スーパーバイザコール命令は、入出力やハードウェアの制御といったOSのみが実行できる処理を、一時的に使用するための命令です。
通常、
入出力処理はOSが担当しているため、絶対に他のプログラムが処理を担当することはありません。すなわち、ハードウェア制御と入出力処理はOSの独断場となります。
しかし、入力されたデータを自作のプログラムなどで扱いたい、といった場合が発生します。
そのようなときに、OSに「OS様、あなたの入出力機能を使わせてください」とお願いするのがこのスーパーバイザコール命令です。
すなわち、OS専用のコール命令ということになります。スーパーバイザコール命令は、OSのサブルーチンを呼び出す点で、コール命令と同じと考えて問題ないでしょう。
名称 | オペコード | 第1オペランド | 第2オペランド
|
SuperVisor Call | SVC | アドレス | ---
|
アドレス | レジスタ
|
使用例1: SVC 5
5番地にあるプログラムの使用許可をOSに出しなさい。
使用例2: SVC 5, GR1
汎用レジスタGR1のデータ+5番地にあるプログラムの使用許可をOSに出しなさい。
※ CASL2ではSVC命令を実際に記述して用いることはありません。
COMET2のOSが具体的にどのようなものなのかは不明です。WindowsでもMacでもない何か専用のOSが動いていると思われます。
また、SVC命令は、IN命令やOUT命令などのマクロ命令内にも記述されていて、OSの機能を借りて入出力処理を行っています。
ただし、マクロ命令がどのような命令群で構成されているかについては、ブラックボックスのため分かりません。
ノーオペレーション命令
ノーオペレーション命令は、何もしない命令です。
この命令は、本当に何もしません。
何もしないことを明示的に記述したいときに使用します。
また、何もしない命令であるため、オペランドには何も指定しません。
何もしない命令の存在意義について少しイメージし難いですが、実際に手を動かしている内に分かると思います。
名称 | オペコード | 第1オペランド
|
No OPeration | NOP | ---
|
使用例1: NOP
何もしないことを実行せよ。
最後に
今回は、スーパーバイザコールとノーオペレーション命令について紹介いたしました。
スーパーバイザコールは、実際に記述して使用することはないため、特に知らなくてもいい命令でしょう。
しかし、この命令がOSと深く関わっていることを理解する上で助けになることは確実ですから、知っておいて損はないかもしれません。
続きはまた次回にご期待を!