トップ->アセンブラ 第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-1. 環境変数

←前ページへ :  トップへ :  練習問題へ→



メモリー管理



2-1.環境変数

  MS-DOSのコマンドプロンプトから「SET」と入力すると、下記のような文字が表示される。

 A:\WINDOWS>set
 PROMPT=$p$g
 winbootdir=C:\WINDOWS
 COMSPEC=C:\WINDOWS\COMMAND.COM
 TMP=D:\TEMP\
 TEMP=D:\TEMP\
 PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\JDK1.2\BIN     
 windir=C:\WINDOWS
 CMDLINE=javac Test.java

 A:\WINDOWS>
  これを環境変数といい、プログラムやOSがこの領域を参照して使用する。 使い方によって、自分の使いやすい環境を整えることができる。環境変数自体の 説明は省略するので、MS-DOSのマニュアルなどを参照してほしい。

  上でも書いたように、この環境変数領域はプログラムが参照できる。 その参照の方法を説明する。

  まずプログラムが実行されると、PSPと呼ばれる100hバイトの領域がとられる。 COMファイルではCS(=DS=ES=SS)セグメントの0000h番地から始まる。EXEファイルは ESセグメントの0000h番地から始まる。また、システムコールのAH=62hを用いて PSPのセグメントを調べることもできる。


PSPアドレスの取得

	AH = 62h
	INT 21h

	戻り値: BX : 現在実行しているプログラムのPSPのセグメントアドレス

例)
mov ah,62 int 21h mov es,bx ; <= ES:0000 : PSP領域

  このPSPの002Ch番地には環境変数領域のセグメントが格納されている。したがって、 ESにPSPのセグメントが格納されている場合に、環境変数領域のセグメントをDSに設定 するには下記のようにする。

例)
	mov	ds,[es:2ch]	; <= DS:0000 : 環境変数領域

  この環境領域には、上の例を見ると下記のように、1行が00hで区切られている 文字列となっている。このように00h(NULL)で区切られているような文字列をASCIIZと 呼ぶ。
例)
       | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |
-------+-------------------------------------------------+-----+----+----+--
000000 | 50 52 4F 4D 50 54 3D 24-70 24 67 00 77 69 6E 62 |  PROMPT=$p$g winb
000010 | 6F 6F 74 64 69 72 3D 43-3A 5C 57 49 4E 44 4F 57 |  ootdir=C:\WINDOW
000020 | 53 00 43 4F 4D 53 50 45-43 3D 43 3A 5C 57 49 4E |  S COMSPEC=C:\WIN
000030 | 44 4F 57 53 5C 43 4F 4D-4D 41 4E 44 2E 43 4F 4D |  DOWS\COMMAND.COM
000040 | 00 54 4D 50 3D 44 3A 5C-54 45 4D 50 5C 00 54 45 |   TMP=D:\TEMP\ TE
000050 | 4D 50 3D 44 3A 5C 54 45-4D 50 5C 00 50 41 54 48 |  =C:\WINDOWS;C:\W
000070 | 49 4E 44 4F 57 53 5C 43-4F 4D 4D 41 4E 44 3B 43 |  INDOWS\COMMAND;C
000080 | 3A 5C 4A 44 4B 31 2E 32-5C 42 49 4E 00 77 69 6E |  :\JDK1.2\BIN win
000090 | 64 69 72 3D 43 3A 5C 57-49 4E 44 4F 57 53 00 43 |  dir=C:\WINDOWS C
0000A0 | 4D 44 4C 49 4E 45 3D 6A-61 76 61 63 20 54 65 73 |  MDLINE=javac Tes
0000B0 | 74 2E 6A 61 76 61 00 00-01 00 41 3A 5C 54 45 53 |  t.java  . A:\TES
0000C0 | 54 2E 43 4F 4D 00                               |  T.COM.

  そして、下線の「00 00 01 00」を区切りとして、それ以前が環境変数が格納され、 それ以降の1行に現在実行されているプログラム名がASCIIZで格納されている。


←前ページへ :  トップへ :  練習問題へ→