アセンブリ言語 CASL2 スーパーバイザコールとNOP命令
CASL2の命令の中には、実際のプログラミングで使用しない命令があります。
それが、「スーパーバイザコール命令(SVC)」です。プログラミングに使用することがないとはいえ、必要な命令になります。
今回は、スーパーバイザコールやノーオペレーション命令などについて情報を共有したいと思います。
スーパーバイザコール命令
スーパーバイザコール命令は、入出力やハードウェアの制御といったOSのみが実行できる処理を、一時的に使用するための命令です。
通常入出力処理はOSが担当しているため、絶対に他のプログラムが処理を担当することはありません。
すなわち、ハードウェア制御と入出力処理はOSの独断場となります。
例えば、ハードウェアへの直接的なアクセスや、仮想メモリの管理、割り込み設定の変更などはCPUの特権命令を用いて処理され、スーパーバイザモードと呼ばれる特権的な動作モードで稼働しているOSカーネルしか実行できない。出典:システムコール 【system call】 スーパーバイザコール / supervisor call / SVC
しかし、入力されたデータを自作のプログラムなどで扱いたい、といった場合が発生します。
そのようなときに、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
何もしないことを実行せよ。
最後に
今回は、スーパーバイザコールとノーオペレーション命令について見てきました。
スーパーバイザコールは、実際に記述して使用することはないため、特に知らなくてもいい命令です。(笑)
それでは次回にお会いしましょう。