汇编语言的文件读取

来源:互联网 发布:知乎 小说推荐 编辑:程序博客网 时间:2024/05/21 17:02
;****************************************************;程序功能:读取文本文件;          首先根据文件指针移动获取文件大小,;          动态申请内存,最后读取文件内容写入;          缓冲区;****************************************************;****************************************************;程序平台说明:.MODEL SMALL,STDCALLOPTION CASEMAP:NONE;****************************************************;****************************************************;数据段定义.DATAstrFileName byte "D:\2.txt",0strOpenFailed byte "the file open failed",0strOpenFailedSize word $-strOpenFailedFileHandle  word ?FileHi word ?FileLo word ?strBufferSize word ?strBuffer word ?;****************************************************;****************************************************;代码段定义.CODEmain 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 exitOpenFailed:  mov ah,40h  mov bx,1  mov dx,offset strOpenFailed  mov cx,strOpenFailedSize  int 21h  jmp exit;exit:  mov ah,4ch  int 21hmain endpend main;****************************************************

PS:

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

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

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

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

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

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


1 0
原创粉丝点击