トップ->アセンブラ 第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-6. メモリー管理

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



  前ページで説明したMCBの追うプログラムを示します。 MCBのセグメントアドレスと所有者、大きさ、名前を表示します。UMBは表示しません。
CODE	SEGMENT
	ASSUME	DS:CODE,CS:CODE,ES:CODE,SS:CODE
	ORG	100h

START:
	mov	ah,9
	mov	dx,offset MSG01
	int	21h             	;枠表示

	mov	ax,352Eh
	int	21h             	;割り込みベクター取得
	mov	ax,es
	dec	ax
	mov	es,ax

NEXT_MCB:
	call	DISP_MCB_INFO   	;MCB情報表示
	cmp	[es:0],byte ptr 'Z'	;識別子を見てチェックする

	jz	EXIT
	mov	ax,es
	add	ax,[es:3]
	inc	ax              	;次のMCBを計算
	mov	es,ax
	jmp	short NEXT_MCB
EXIT:
	mov	ax,4c00h
	int	21h


;----------------------------------------
DISP_MCB_INFO:
	mov	ax,es
	call	DISP_HEX        	;MCB表示
	mov	ah,2
	mov	dl,' '
	int	21h

	mov	ax,[es:1]
	call	DISP_HEX        	;PSP表示
	mov	ah,2
	mov	dl,' '
	int	21h

	mov	si,8
	mov	ah,2
DISP_NAME:                      	;名前表示
	mov	dl,[es:si]
	cmp	dl,20h
	jb	DISP_NAME_END
	int	21h
	inc	si
	cmp	si,10h
	jnz	DISP_NAME
DISP_NAME_END:
	mov	dl,' '
	int	21h
	inc	si
	cmp	si,11h
	jnz	DISP_NAME_END

	mov	ax,[es:3]
	call	DISP_DEC         	;サイズ表示

	mov	ah,2
	mov	dl,0Dh
	int	21h
	mov	dl,0Ah
	int	21h
	ret
;----------------------------------------
DISP_HEX:                           	;セグメント表示
	mov	cx,10h
	xor	dx,dx
	div	cx
	push	dx
	or	ax,ax
	jz	DISP_HEX_E
	call	DISP_HEX
DISP_HEX_E:
	pop	dx
	add	dl,'0'
	cmp	dl,'9'
	jbe	DISP_HEX_10
	add	dl,7
DISP_HEX_10:
	mov	ah,2
	int	21h
	ret
;---------------------------------------------
DISP_DEC:                           	;セグメント表示
	mov	cx,10
	xor	dx,dx
	div	cx
	push	dx
	or	ax,ax
	jz	DISP_DEC_E
	call	DISP_DEC
DISP_DEC_E:
	pop	dx
	add	dl,'0'
	mov	ah,2
	int	21h
	ret


MSG01    	db	' MCB  PSP  Name     Size',0Dh,0Ah
         	db	'---- ---- -------- --------',0Dh,0Ah,24h
_STACK  	dw	30 dup(?)	;スタック領域
_END:

	ENDS
	END	START
; 一部のコンパイラでは、
;CODE	ENDS
;	END	START
;と記述しなければいけないようです

 C:\>test
  MCB  PSP  Name     Size
 ---- ---- -------- --------
 F0F F10 COMMAND  557
 113D F10 !・u     89
 1197 11AB >ツ8・    18
 11AA 11AB COMMAND  361
 1314 11AB          89
 136E 11AB          7
 1376 1519 .        15
 1386 1387 DOSKEY   401
 1518 1519 COMMAND  361
 1682 1519          89
 16DC 16ED          15
 16EC 16ED TEST     35090

 C:\>
お詫び:セグメントが3桁になった場合など、表示が少しへんですが、面倒なのでそのままです
このプログラムは後でも使うので、とっておいてください。


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