📄 file2.asm
字号:
;DOS功能调用INT 21H:文件创建(3CH),打开(3DH),
;读(3FH)/写(40H),关闭(3EH),移动文件指针(4H)
;程序要求:打开一个数据文件TEST2.DAT,若不存在,创建文件,写入字串"This is a data file"
;关闭该文件,然后打开,从第5个字节开始,读出文件内容并显示
DATA SEGMENT
FNAME DB 'TEST2.DAT',0
HANDLE DW ? ;文件代号
BUF DB 'This is a data file',0dh,0ah
LEN EQU $-BUF ;BUF的长度
dat db 100h DUP(?) ;读文件内容的缓冲区
STACK SEGMENT STACK
DW 64 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA
MAIN PROC FAR
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
;....打开文件....
MOV DX,OFFSET FNAME ;DS:DX内容:文件名.扩展名
MOV AL,0 ;打开文件允许读
MOV AH,3DH
INT 21H
JC L1
MOV HANDLE,AX ;文件号在AX中
JMP L2
;.....创建文件.....
L1: MOV DX, OFFSET FNAME
MOV CX, 0 ;R/W attribut
mov ah,3ch
INT 21H
MOV HANDLE,AX
;......写入数据
MOV DX,OFFSET BUF
MOV CX,LEN
MOV BX,HANDLE
MOV AH,40H
INT 21H
;...关闭文件....
MOV BX,HANDLE
MOV AH,3EH
INT 21H
;....打开文件....
MOV DX,OFFSET FNAME
MOV AL,0 ;读
MOV AH,3DH
INT 21H
MOV HANDLE,AX
;移动文件指针
L2: MOV BX,AX
MOV AL,0 ;从文件开始移
MOV DX,5 ;位移量为4
MOV CX,0
MOV AH,42H
INT 21H
;.....从文件指针当前位置读
MOV BX,HANDLE ;BX=文件号,CX=字节数
MOV CX,100H
MOV DX,OFFSET DAT ;DX=缓冲区首地址
MOV AH,3FH
INT 21H
MOV CX,AX ;AX=实际读取字节数
;显示读取内容
MOV BX,0
NEXT : MOV DL,DAT[BX]
MOV AH,02H
INT 21H
INC BX
LOOP NEXT
;...关闭文件...
MOV BX,HANDLE ;BX=文件号
MOV AH,3EH
INT 21H
;....返回DOS
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -