70 lines
1.4 KiB
NASM
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 |