Files
Operating-System/Experiment/asm-exp/实验八/实验八-2_文件写入.asm
2026-06-25 00:09:09 +08:00

70 lines
1.4 KiB
NASM

; 实验八-2: 文件写入程序
; 功能: 使用DOS功能号40H向文件写入数据
; 说明: 需要先打开或创建文件,获取句柄后写入
DATAS SEGMENT
FILENAME DB 'testfile.txt', 0 ; 文件名
HANDLE DW ? ; 文件句柄
DATA_TO_WRITE DB 'Hello, Assembly!', 0DH, 0AH, '$'
DATA_LEN EQU $-DATA_TO_WRITE
ERR_MSG DB 'File write error!', 0DH, 0AH, '$'
OK_MSG DB 'Data written successfully!', 0DH, 0AH, '$'
DATAS ENDS
STACKS SEGMENT
DB 64 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS, SS:STACKS
START:
MOV AX, DATAS
MOV DS, AX
; 首先创建文件 (功能号3CH)
LEA DX, FILENAME
MOV AH, 3CH
MOV AL, 00H
INT 21H
; 检查创建是否成功
JC WRITE_ERROR
MOV HANDLE, AX
; 写入文件内容 (功能号40H)
; AH = 40H (写入文件功能号)
; BX = 文件句柄
; CX = 写入字节数
; DS:DX = 数据缓冲区地址
MOV BX, HANDLE
LEA DX, DATA_TO_WRITE
MOV CX, DATA_LEN
MOV AH, 40H
INT 21H
; 检查写入是否成功
JNC WRITE_SUCCESS
WRITE_ERROR:
LEA DX, ERR_MSG
MOV AH, 09H
INT 21H
JMP CLOSE_FILE
WRITE_SUCCESS:
LEA DX, OK_MSG
MOV AH, 09H
INT 21H
CLOSE_FILE:
; 关闭文件 (功能号3EH)
MOV BX, HANDLE
MOV AH, 3EH
INT 21H
MOV AH, 4CH
INT 21H
CODES ENDS
END START