トップ->アセンブラ 第2章

あなたは

人目のアセンブラの受講生です。

アセンブラ入門内検索

目次

アセンブラ入門

アセンブラ 〜MS-DOSの世界〜 トップ
0. はじめに

1. コマンドラインからの引数
   1. コマンドラインからの引数
   2. 自分の名前は?

2. メモリー管理
   1. 環境変数
   2. 練習問題
   3. メモリーの割り当て
   4. メモリーの解放
   5. UMB
   6. メモリー管理
   7. 常駐プログラム(TSR)

3. 標準入出力
   1. 1文字入力
   2. キーボードバッファー
   3. 1文字出力
   4. 文字列出力
   5. 文字列入力
   6. 練習問題
   7. RS-232C
   8. プリンタ

4. ファイル操作
   1. ファイルオープン
   2. ファイルクローズ
   3. ファイルリード
   4. ファイルライト
   5. 練習問題1
   6. ファイルポインタの移動
   7. 練習問題2
   8. ファイル作成
   9. ファイル属性
   10. ファイル削除
   11. ファイル名変更
   12. ファイル属性の設定・取得
   13. ファイル日時の設定・取得
   14. ファイル検索
   15. 練習問題3
   16. 予約されているファイルハンドル
   17. ファイルハンドルの二重化(リダイレクト)

5. ディレクトリ操作
   1. ディレクトリ操作
   2. カレントディレクトリ変更
   3. カレントディレクトリ取得
   4. ディレクトリ作成
   5. ディレクトリ削除
   6. 練習問題

6. ディスク操作
   1. ディスクのリセット
   2. カレントディスクの取得
   3. カレントディスクの変更
   4. ドライブ情報の取得
   5. 空き容量取得
   6. 練習問題
   7. 交換可能ドライブの検査
   8. リトライ回数の設定
   9. ディスクの直接操作

7. プロセス管理
   1. プログラムの実行
   2. 練習問題
   3. プログラム終了
   4. リターンコード
   5. PSPアドレスの取得・設定
   6. DTAアドレスの取得・設定
   7. プログラムの実行2
   8. 練習問題2

8. その他のシステムコール
   1. 日付の取得・設定
   2. 時間の取得・設定
   3. 割り込みベクタの設定・取得
   4. ベリファイフラグ
   5. MS-DOSのバージョン取得
   6. 国別情報の取得・設定
   7. CTRL + Cの検査
   8. CTRL + Cの処理

9. EMS
   1. EMSとは
   2. EMSを使用するには
   3. EMSが使用可能か?
   4. EMSのバージョン取得
   5. ページフレームのアドレス取得
   6. 未使用ページ数の取得
   7. アロケート、デアロケート
   8. マップ、アンマップ
   9. ページマップのセーブ、リストア
   10. ハンドル数の取得
   11. ハンドルページの取得
   12. 再アロケート
   13. ハンドル名
   14. その他

10. XMS
   1. XMSとは
   2. XMS使用法
   3. XMSバージョンの取得
   4. HMAとは
   5. HMAの割り当て・解放
   6. A20ラインの設定
   7. EMBとは
   8. EMBの空き容量取得
   9. EMBの割り当て・解放
   10. EMBのコピー
   11. EMBのロック・アンロック
   12. EMBハンドル情報取得
   13. EMBの再割り当て
   14. UMBの割り当て・解放

11. エスケープシーケンス
   1. エスケープシーケンスとは
   2. エスケープシーケンス表

12. 終わりに


・ このページの先頭に戻る
・ トップページに戻る



・ このページの先頭に戻る
・ トップページに戻る

トップ-> アセンブラ 第2章-> 第2章.メモリー管理-> 2-7. 常駐プログラム(TSR)

←前ページへ :  トップへ :  次章へ→



  常駐プログラムでは一般にとても厳しい制限があります。それは システムコールを使用してならないというものです。(マァ、 常駐プログラムの種類によりますが)

  特にプログラムの実行中にも、制御が移る場合のある常駐プログラムは、 システムコールを使用すると暴走することもあります。しかし使用しても良い場合も あります。MS-DOSの動作の流れがわかれば、システムコールを使用しても良い場合、 悪い場合というのがわかりますが、なれるまではそれを判断することはできません。 そこで、使用しても良いか、悪いかというのを判断するシステムコールがあります。 このシステムコールはほとんどの場合で使用できるので、このシステムコールのみ 使用するならば、まあ安全でしょう。


システムコールが使用可能かどうかの検査(MS-DOS非公開)

	AH = 34h
	INT 21h

	戻り値:ES:BX = Indosフラグのアドレス

  Indosフラグとは、1バイトのフラグでMS-DOSの機能が使用可能かどうかを 示すフラグです。このフラグが0の時はMS-DOSの機能が使用可能(システムコールを 使用しても良い場合)で、1の時は使用不可能(システムコールを使用しては ならない場合)です。



  また、他にも制限というか、いろいろ面倒な作業があります。それらを列挙します。


スタック領域の確保
  常駐プログラムは、割り込み処理と同じでいつ処理するかわかりません。そこで、 PUSH, POP, CALL, RETなどスタックを使用する場合、呼び出しもとのスタック領域を 使用すると、呼び出しもとのスタックが残り少なかった場合、元のプログラム領域や データ領域を破壊する場合があります。もしMS-DOSが処理中の場合、MS-DOSを壊して しまう場合もあります。そこで、新たな自分専用のスタック領域を用意する方が 無難です。

リエントラント
  常駐プログラムに制御が移り、新しいスタック領域を用意し、そのスタック領域を 使用していたとします。そのときに新たな割り込みが発生し、同じ常駐プログラムが 呼ばれたとします。このときに、自分のスタックを使用し、正常に実行され、元の プログラムに戻ります。元のプログラムとは、1度目に呼ばれた自分自身なので、 そこに戻ると、スタック領域は2度目に呼ばれた自分によって破壊されていますので、 正常に動作できなくなってしまいます。したがって自分が実行中は、自分が呼ばれないように (呼ばれても良いように)しなくてはなりません。これはスタック領域だけではなく、 変数を保管する領域も同じです。

CTRL + Cが押された場合
  標準ではCTRL + Cが押された場合、プログラムを終了しMS-DOSに戻ります。常駐 プログラムが処理中に、これが押された場合どうなるかわからないので、CTRL + Cを 無効にする必要があります。その方法は後述します。

同じハードを使用する場合
  例えば、タイマー割り込みを使用する常駐プログラムが2つあったとします。 しかし、タイマーは1つしかないので、後にタイマーを使用し始めた方が有効になり、 最初に使っていた常駐プログラムは、呼ばれなくなってしまいます。これを回避するのは、 常駐プログラムが常駐する場合に気をつけるか、ユーザーが気をつけるしかありません。 しかし、良いプログラムというのは、ユーザーが何も気にしなくても使えるように 配慮するものです。

  このように常駐プログラムは割り込みと どうように、面倒なプログラムですので、作る場合は気をつけてくださいね。


←前ページへ :  トップへ :  次章へ→