说明
这是一个读写磁盘文件的例子,其中“infile”为读文件,“wfile”为写文件。
函数图:
infile(文件的读取)
;数据段
data segment
file db 'c:\1.txt' , 0 ;文件名,dosbox 设置的c盘下的路径
buf db 256 dup(0) ;文件内容暂存区
error_message db 0ah , 'error !' , '$' ;出错时的提示
handle dw ? ;保存文件号
data ends
;代码段
code segment
assume cs:code , ds:data
start:
mov ax , data
mov ds , ax ;获取段地址
mov dx , offset file ;dx获取file的偏移地址
mov al , 0
mov ah , 3dh
int 21h ;打开文件,只读
jc error ;若打开出错,转error
mov handle , ax ;保存文件句柄
mov bx , ax ;文件句柄
mov cx , 255 ;读取255字节
mov dx , offset buf ;获取buf的偏移地址
mov ah , 3fh
int 21h ;从文件中读255字节→buf
jc error ;若读出错,转error
mov bx , ax ;实际读到的字符数送入bx
mov buf[bx] , '$' ;在文件结束处放置一“$”符
mov dx , offset buf
mov ah , 9
int 21h ;显示文件内容
mov bx , handle ;文件句柄
mov ah , 3eh
int 21h ;关闭文件
jnc end1 ;若关闭过程无错,转到end1处返回dos
error:
mov dx , offset error_message ;获取error_message的偏移地址
mov ah , 9
int 21h ;显示error_message
end1:
mov ah , 4ch ;待返回码的结束
int 21h
code ends
end start
outfile(文件的写入)
;数据段
data segment
file db 'c:\1.txt' , 0 ;创建文件的文件名
buf db 'this is a test !' ;写到文件中去的内容
error_message db 0ah , 'error !' , '$' ;出错时的提示
message db 0ah , 'ok !$' ;操作成功后的提示
handle dw ? ;保存文件号
data ends
;代码段
code segment
assume cs:code , ds:data
start:
mov ax , data
mov ds , ax
mov dx , offset file
mov cx , 0
mov ah , 3ch
int 21h ;创建文件,若磁盘上原有此文件,则覆盖
jc error ;创建出错,转error处
mov handle , ax ;保存文件号
mov bx , ax
mov cx , 16
mov dx , offset buf
mov ah , 40h
int 21h ;向文件中写入16个字节内容
jc error ;写出错,转error处
mov bx , handle
mov ah , 3eh
int 21h ;关闭文件
jc error ;关闭文件出错,转error处
mov dx , offset message
mov ah , 9
int 21h ;操作成功后显示提示
jmp end1
error:
mov dx , offset error_message
mov ah , 9
int 21h ;显示错误提示`
end1:
mov ah , 4ch
int 21h
code ends
end start
参数传递
无需参数传递
改写为函数库
无子函数
中断向量计算
本题用到了21H函数库的函数调用。
21H号函数库:CS=421h+2h=86h , IP=421h=84h 。中断向量为0:84h。