CODE SEGMENT
ASSUME DS:CODE,CS:CODE,ES:CODE,SS:CODE
.386
ORG 100h
START:
mov bx,80h ;↓ファイル名をASCIIZにする
add bl,[bx]
inc bx
mov [bx],byte ptr 0 ;↑ここまで
mov cx,80h ;↓ファイル名の先頭を求める
mov di,81h
mov al,' '
repz scasb
dec di
mov dx,di ;↑ここまで
mov ax,3D00h
int 21h ;リードモードでファイルオープン
mov bx,ax
jnc FILE_SIZE ;エラーでなければジャンプ
mov ah,9 ;↓エラールーチン
mov dx,offset ERRMSG01
int 21h
mov ax,4c01h
int 21h ;↑ここまで
FILE_SIZE:
mov ax,4202h
xor cx,cx
xor dx,dx ;ファイルポインタを
int 21h ;ファイルの最後部に移動する
push ax
push dx
mov ah,3Eh
int 21h ;ファイルクローズ
mov ah,9
mov dx,offset MSG01
int 21h
pop dx
pop ax
xchg ax,dx ;↓DX:AXをEAXに変換する
shl eax,16
mov ax,dx ;↑ここまで
call DISP ;表示(EAXを10進数で表示するサブルーチン)
mov ah,9
mov dx,offset MSG02
int 21h
mov ax,4c00h
int 21h ;終了
DISP:
mov ecx,10
xor edx,edx
div ecx
push edx
or eax,eax
jz DISPE
call DISP
DISPE:
pop edx
add dl,'0'
mov ah,2
int 21h
ret
DATA db ?
ERRMSG01 db '指定されたファイルをオープンできません',0Dh,0Ah,24h
MSG01 db '指定されたファイルは',24h
MSG02 db 'バイトです',0Dh,0Ah,24h
ENDS
END START
; 一部のコンパイラでは、
;CODE ENDS
; END START
;と記述しなければいけないようです
|