;****************************************************
;程序功能:读取文本文件
; 首先根据文件指针移动获取文件大小,
; 动态申请内存,最后读取文件内容写入
; 缓冲区
;****************************************************
;****************************************************
;程序平台说明:
.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的控制台上
版权声明:本文为dasgk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。