汇编程序设计:磁盘文件的读写

说明
这是一个读写磁盘文件的例子,其中“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。

猜你喜欢

转载自blog.csdn.net/hairi1234/article/details/85336939