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
;と記述しなければいけないようです
|