汇编语言的文件读取

;****************************************************
;程序功能:读取文本文件
;          首先根据文件指针移动获取文件大小,
;          动态申请内存,最后读取文件内容写入
;          缓冲区
;****************************************************

;****************************************************
;程序平台说明:
.MODEL SMALL,STDCALL
OPTION CASEMAP:NONE
;****************************************************


;****************************************************
;数据段定义
.DATA

strFileName byte "D:\2.txt",0
strOpenFailed byte "the file open failed",0
strOpenFailedSize word $-strOpenFailed
FileHandle  word ?
FileHi word ?
FileLo word ?
strBufferSize word ?
strBuffer word ?

;****************************************************

;****************************************************
;代码段定义
.CODE
main proc
  ;装载数据段地址
  mov ax,@data
  mov ds,ax
  ;打开文件
  mov ax,716ch
  mov bx,0;只读模式
  mov cx,0;普通属性
  mov dx,1;打开文件
  mov si,offset strFileName  
  int 21h
  jc OpenFailed;
  mov FileHandle,ax
  ;开始获取文件大小
  ;将文件指针移动到文件起始处
  mov ah,42h
  mov bx,FileHandle
  mov al,0;从文件起始处开始计算
  mov cx,0
  mov dx,0
  int 21h
  mov FileHi,dx
  mov FileLo,ax
  ;将文件指针移动到文件的末尾处,计算偏移量
  mov ah,42h
  mov bx,FileHandle
  mov al,2
  mov cx,0
  mov dx,0
  int 21h
  ;计算偏移量,获得文件大小
  sub dx,FileHi
  mov FileHi,dx
  sub ax,FileLo
  mov FileLo,ax
  mov strBufferSize,ax
  ;暂时抹去高位
  ;动态申请内存
  mov ah,48h
  mov bx,strBufferSize  
  int 21h
  mov strBuffer,ax  
  ;将文件指针移动到文件起始处,开始读取内容
  mov ah,42h
  mov bx,FileHandle
  mov cx,0
  mov dx,0
  mov al,0
  int 21h
  ;开始读取文件内容
  mov ah,3fh
  mov bx,FileHandle
  mov dx,offset strBuffer
  mov cx,strBufferSize
  int 21h
  ;显示内容有问题  
  mov ah,40h
  mov bx,1
  mov dx, offset strBuffer
  mov cx,strBufferSize
  
  int 21h
  
  ;关闭文件
  mov ah,3eh
  mov bx,FileHandle
  int 21h
  jmp exit
OpenFailed:
  mov ah,40h
  mov bx,1
  mov dx,offset strOpenFailed
  mov cx,strOpenFailedSize
  int 21h
  jmp exit;
exit:
  mov ah,4ch
  int 21h
main endp
end main
;****************************************************

PS:

在汇编语言当中需要注意的是,当在打开,读取文件等操作时,是否成功的标志是放在cf当中的,于是乎就有了,一系列的JC

另外,我需要注意的就是读取文件时,需要自行移动文件指针,不会像高级语言那样会自动帮你移动文件指针,还有一点就是当你在使用缓冲区的时候,需要注意的就是,当缓

冲区使用完毕之后注意,清空缓冲区,否则在使用的时候会产生影响。一般是在最后一个结果当中@!!

还有就是这里面需要注意的就是,申请的内存地址是放在strBuffer中的,但是在使用时,需要注意的是要

mov dx,offset strBuffer;将文件内容读取到strBuffer指向的内存

mov dx,offset strBuffer;将内容输出到bx=1的控制台上


  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值