Lesson
3.システム
コール |
Lesson 3CP/M のシステムコールシステムコールを利用したアセンブリ言語プログラムCP/M 上で動作するプログラムは,システムコール を介して CP/M が提供するシステムサービスを利用できます.ここでは,システムコールとその使い方について説明します. 目次システムコールについてシステムコールは,CP/M がユーザー提供するサービスプログラムです.主に,CPU から見た外部の機器を操作するときに使います.ユーザーが作成したプログラムが外部デバイスとのデータの送信/受信等を行うときに,システムコールを呼び出します.こうすることにより,外部デバイスの低レベルの操作を意識することなく,外部機器の操作ができます.Lesson 2 の「HELLO WORLD」のプログラム (リスト 1) を使い,システムコールの具体的な内容を示します.このプログラムは,スクリーンに「HELLO WORLD」を表示する操作でシステムコールを使っています. 01 ;--------------------------------------------------- 02 ; "HELLO WORLD" PROGRAM USING BDOS 03 ;--------------------------------------------------- 04 ORG 100H 05 START: 06 MVI C,09H 07 LXI D,TEXT 08 CALL 0005H 09 RET 10 TEXT: DB 0DH,0AH,'HELLO WORLD',0DH,0AH,'$' 11 END このプログラムの 01 – 03 はコメント文なので,動作には影響しません.マクロアセンブラでは,セミコロン「;」が現れると,そこから行末までがコメントになります.04 行目は実行時に機械語のプログラムが格納される先頭アドレスを示しています.CP/Mのプログラムは,アドレス 100H からメモリーに格納されなくてはなりません.05 行目は実行命令の開始を示しています.おまじないみたいなもので,あまり意味はありません.06 – 08 がシステムコールのための命令です.これについては,後で詳細に説明します.09 行目はプログラムの実行を OS に戻すためのリターン命令です.10 行目は,スクリーンに表示するデータを表しています.実行時に,命令と共にここに書かれているデータがメモリーロードされます.データの先頭アドレスは,シンボル「TEXT」で参照できます.11 行目のシンボル 「END」はプログラムの終了行を示してます. Lesson 2 で示したとおり,このプログラムを実行すると,スクリーン上に「HELLO WORLD」と文字列が表示されます.これを,CPU が持っている命令のみで記述することは骨の折れる作業です.CPU は,スクリーンに文字を表示をするレジスターにプロトコルに従いデータを送る必要があります.普通に考えると,(1)スクリーンのレジスターに接続,(2)データ送付のための初期処理,(3)データの送付,(4)終了処理が必要になります.システムコールは,このような面倒な作業を引き受けてくれます.そのため,リスト 1 に示したような単純なプログラムでも,システムコールを用いることにより,本来複雑な作業であるスクリーンへの文字の表示ができます. リスト1のシステムコールの動作を説明します.06 行目でシステムコールの機能を選択します.レジスター C の値を 09H にすることで,9番の機能である「文字列のプリントアウト」を選択します.プリントアウトとなっていますが,スクリーンに表示されます.07 行目で,プリントアウトする文字列の先頭アドレスを DE レジスターに設定します.マクロアセンブラーがシンボル TEXT をアドレスに変換します.プリントアウトされる文字列は,この先頭アドレスにある文字から順に,「$」(アスキーコード:24H) の文字が現れるまでです.08 行目で,実行を 0005H番地へ移すことによりシステムコールが実行されます.システムコールの処理後,実行は 09 行目の RET の命令に移ります. システムコールに加えて,10 行目に書かれているスクリーンに表示するデータについても説明しておいた方がよいでしょう.最初の「ODH」はアスキーコードで,制御文字「CR」を表します.「0AH」は制御文字「LF」です.CP/M は「CR+LF」で改行になります.つぎは,「HELLO WORLD」の文字列です.再び「CR+LF」が現れて,表示するデータの終わりを表す「$」が書かれています.このデータにより,前後に改行のある「HELLO WORLD」が表示されることが理解できるでしょう. システムコールのプログラム自体は,BDOSの領域に書かれています.0005H を CALL すると,Cレジスターの値に従い,BDOS のプログラムルーチンが実行されます.その際,BIOS を通して外部デバイスとの処理が行われます.このようにすることで,コンピューター毎のハードウェアーの違いは BIOS のプログラムで吸収できます.ハードウェアーが異なっても,BDOS は同一です.メーカーは BDOS に合わせた BIOS さえ書き直せば CP/M が動作するコンピューターを供給できます.プログラマーは,ハードウェアーの違いを気にすることなく,システムコールを使うことができます.したがって,CP/M の流儀にしたがって書かれたプログラムは,メーカーが異なったコンピューターでも同じように動作します. システムコールの一覧CP/M 2.2 は 38 個のサービス機能 (Service Fucntion) を提供しています.英文ですが詳しい情報は「CPM BDOS」から得られます.この説は,それをまとめたものです. システムサービス
ページ作成情報参考資料
更新履歴
|