• icon-clock
  • icon-undo

アセンブリ言語 CASL2 スーパーバイザコールとNOP命令

アセンブリ言語 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

何もしないことを実行せよ。


最後に

今回は、スーパーバイザコールとノーオペレーション命令について見てきました。

スーパーバイザコールは、実際に記述して使用することはないため、特に知らなくてもいい命令です。(笑)

それでは次回にお会いしましょう。