矢沢久雄 グレープシティ アドバイザリースタッフ
皆さんが使っているパソコンには,WindowsなどのOSがインストールされています。OSもプログラムの一種であり,主プログラムと多数の副プログラムから構成されています。これらの副プログラムの中には,キーボードやディスプレイなどの周辺装置とデータの入出力を行う機能を提供するものがあり,それらを皆さんが作るプログラムから呼び出すことができます。OSが持つ副プログラムを呼び出すことを「スーパーバイザ・コール(またはシステム・コール)」と呼びます。今回は,スーパーバイザ・コールを使って,キーボードからデータを入力する方法と,ディスプレイにデータを表示する方法を紹介します。OSによって,I/Oというハードウエアを意識しないプログラミングができることに注目してください。ハードウエアを隠すことは,OSの役割の1つだからです。
●キーボードからの入力
OSが持つ副プログラムの呼び出しは,CALL命令とRET命令で行われるのではありません。キーボードから入力を行うスーパーバイザ・コールのニーモニックは,IN(INput)です。INのオペランド(目的語)は2つあり,1つ目に入力データの格納領域のメモリー・アドレス(ラベル)を指定し,2つ目に入力された文字数の格納領域のメモリー・アドレス(ラベル)を指定します。プログラムのユーザーは,何文字入力するか分かりませんから,入力データの格納領域は,余裕を持った大きめサイズにしておかなければなりません。
リスト1は,256文字分の入力データの格納領域のラベルをBUFFとし,入力された文字数の格納領域のラベルをLENとして,キーボードから入力を行うプログラムです。入力されたデータをどう処理するかは省略しています。DS(Define Storage)命令は,メモリー領域を確保します。DSのオペランドには,確保するメモリー領域のサイズを指定します。メモリー領域1個で1文字を格納できます。
リスト1●IN命令の使い方
IN | BUFF,LEN | ;スーパーバイザ・コール | |
: | |||
BUFF | DS | 256 | ;入力データの格納領域を確保しておく |
LEN | DS | 1 | ;入力された文字数の格納領域を確保しておく |
図1●メモリー・アドレスを知らせてデータを格納してもらう |
●ディスプレイへの出力
ディスプレイへの出力を行うスーパーバイザ・コールのニーモニックは,OUT(OUTput)です。OUTの使い方は,INによく似ています。OUTのオペランドも2つあり,1つ目に出力データの格納領域のメモリー・アドレス(ラベル)を指定し,2つ目に出力する文字数の格納領域のメモリー・アドレス(ラベル)を指定します。
リスト2は,256文字分の出力データの格納領域のラベルをBUFFとし,出力する文字数の格納領域のラベルをLENとしてディスプレイへ出力を行うプログラムです。
リスト2●OUT命令の使い方
OUT | BUFF,LEN | ;スーパーバイザ・コール | |
: | |||
BUFF | DS | 256 | ;出力データの格納領域を確保しておく |
LEN | DS | 1 | ;出力する文字数の格納領域を確保しておく |
図2●メモリー・アドレスを知らせてデータを表示してもらう |
リスト3は,IN命令とOUT命令を組み合せたサンプル・プログラムです。キーボードから入力された文字列を,そのままディスプレイに表示します。意味のないプログラムのように思われるかもしれませんが,皆さんが実際のコンピュータでキーボードから入力を行っている時も,IN命令とOUT命令に相当するスーパーバイザ・コールが呼び出されているのです。IN命令だけでは,入力された文字がディスプレイに表示されません。
リスト3●キーボード入力をディスプレイに表示する
IN | BUFF,LEN | ;スーパーバイザ・コール | |
OUT | BUFF,LEN | ;スーパーバイザ・コール | |
: | |||
BUFF | DS | 256 | ;入出力データの格納領域を確保しておく |
LEN | DS | 1 | ;入出力する文字数の格納領域を確保しておく |
もしもスーパーバイザ・コールが使えないとしたら,どうやって周辺装置と入出力を行えばよいのでしょう?本物のCPUには,OSを仲介させずに直接I/Oと入出力を行うための命令や,I/Oからの割り込み(I/Oから皆さんのプログラムの中にある副プログラムを呼び出すこと)を受け付ける機能が装備されています。ただし,これらを使いこなすには,ハードウエアに関する高度な知識が必要となります。難しいことを考えずに周辺装置との入出力を可能にしてくれるスーパーバイザ・コールとは,実に便利なものです。そしてこのスーパーバイザ・コールを提供してくれるOSは,実にありがたいものなのです。
次回(最終回)は,アセンブラでソートやサーチを行う高度なプログラムを紹介します。どうぞお楽しみに!