トップ->アセンブラ 第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-5. UMB

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



2-5. UMB

  UMBとはMS-DOS Ver.5.0で正式にサポートされたメモリーで(Ver.3.30頃から メモリーのデバイスドライバを作っているサードパーティーが独自にサポートしていた)、 640KBytesを越える通常ROMなどが格納されているアドレスにRAMを割り当てようと言う規格です。 例えば、PC-9801シリーズではN88-BASICのROMが搭載されています。しかし、MS-DOSを使うのには、 このROMは必要ありません。このように不必要なROMの場所にRAMを割り当てて、普通のメモリーの ように使おうというものです。

  ここでは、MS-DOS Ver.5.0以降のMS-DOSを前提としており、デバイスドライバーを組み込んで、 UMBが使える状態にあることを前提としています。

  UMBは場所が640KBytes以上のところにあること以外は、普通のメモリーとなんら変わりません。 したがって基本的には今まで紹介してきたシステムコールで割り当てたり、解放したり できます。ただし、ちょっと手続きが必要になります。

  MS-DOSはメモリーの確保を行う際に、どのようにメモリーを確保するか決めます。 決めますと言うよりは、プログラマーが指定できます。つまり、1)メモリーアドレスの下位から 割り当てる、2)無駄のないように必要最小のブロックから割り当てる、3)一番上位から 割り当てる、の3種類があります。デフォルトは1)です。これを指定するには、 AH=58hのシステムコールを使います。


アロケーションストラテジの取得

	AX = 5800h
	INT 21h

	戻り値:AX = アロケーションストラテジ

AXの意味
0000h : 最下位から割り当てる
0001h : 必要最小ブロックから割り当てる
0002h : 上位から割り当てる
0040h : UMBの最下位から割り当てる
0041h : UMBの必要最小ブロックから割り当てる
0042h : UMBの上位から割り当てる
0080h : 最下位から割り当てる(UMB優先)
0081h : 必要最小ブロックから割り当てる(UMB優先)
0082h : の上位から割り当てる(UMB優先)

000?hはUMBがあってもUMBは無いものとして処理します。
004?hはUMBがあればそこから割り当てます。UMBがなければエラーになります
      (MS-DOS Ver.5.0以降で利用可能)
008?hはUMBを優先して割り当てます
      (MS-DOS Ver.5.0以降で利用可能)

アロケーションストラテジの変更

	AX = 5801h
	BX = アロケーションストラテジ
	INT 21h

	戻り値:CF = 0 の時 → 正常に実行
	    CF = 1 の時 → AX = 1 : BXの値が無効

BXの意味
0000h : 最下位から割り当てる(デフォルト)
0001h : 必要最小ブロックから割り当てる
0002h : 上位から割り当てる
0040h : UMBの最下位から割り当てる
0041h : UMBの必要最小ブロックから割り当てる
0042h : UMBの上位から割り当てる
0080h : 最下位から割り当てる(UMB優先)
0081h : 必要最小ブロックから割り当てる(UMB優先)
0082h : の上位から割り当てる(UMB優先)
  自分でアロケーションストラテジを変更する場合は、やはり自分の責任で元に戻さなくては いけません。これはプログラムが終了してもMS-DOSは戻してくれません。この値がおかしいと、 動作がおかしくなるプログラムもこの世の中にはたくさん存在するようです。


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