8086汇编语言程序设计 第2版 教学ppt课件第9章 磁盘文件存取方法.ppt
《8086汇编语言程序设计 第2版 教学ppt课件第9章 磁盘文件存取方法.ppt》由会员分享,可在线阅读,更多相关《8086汇编语言程序设计 第2版 教学ppt课件第9章 磁盘文件存取方法.ppt(26页珍藏版)》请在三一办公上搜索。
1、在线教务辅导网:http:/,教材其余课件及动画素材请查阅在线教务辅导网,QQ:349134187 或者直接输入下面地址:,http:/,第9章 磁盘文件存取方法,9.1 以文件句柄方式存取文件 9.2 文件操作举例,9.1 以文件句柄方式存取文件,9.1.1 DOS文件功能调用 9.1.2 路径和ASCIIZ串9.1.3 文件句柄、错误代码和文件属性9.1.4 文件的打开方式9.1.5 读写指针的移动,9.1.1 DOS文件功能调用,DOS的INT 21H为文件操作提供了相应的功能支持,基于文件句柄的DOS功能调用如下:AH=3CH:创建一个新文件 输入参数:DS:DX=ASCIIZ串的首地
2、址 CX=文件属性 返回结果:CF=0,创建成功,AX=文件句柄 CF=1,创建失败,AX=错误代码AH=3DH:打开一个已有文件 输入参数:DS:DX=ASCIIZ串的首地址 AL=访问方式(0读打开,1写打开,2读写打开)返回结果:CF=0,打开成功,AX=文件句柄 CF=1,打开失败,AX=错误代码,AH=3EH:关闭文件 输入参数:BX=文件句柄 返回结果:CF=0,操作成功 CF=1,操作失败,AX=错误代码 AH=3FH:读文件 输入参数:DS:DX=读缓冲区的首地址 BX=文件句柄 CX=希望读入的字节数 返回结果:CF=0,操作成功,AX=实际读入的字节数 CF=1,操作失败,
3、AX=错误代码AH=40H:写文件 输入参数:DS:DX=写缓冲区的首地址 BX=文件句柄 CX=要写入的字节数 返回结果:CF=0,操作成功,AX=实际写入的字节数 CF=1,操作失败,AX=错误代码,AH=41H:删除文件 输入参数:DS:DX=ASCIIZ串的首地址 返回结果:CF=0,操作成功 CF=1,操作失败,AX=错误代码 AH=42H:移动文件读写指针 输入参数:BX=文件句柄 AL=移动方式代码 CX=移动字节数的高位字 DX=移动字节数的低位字 返回结果:CF=0,操作成功,DX:AX=新指针位置 CF=1,操作失败,AX=错误代码AH=43H:检验(读取)或改变文件属性
4、输入参数:DS:DX=ASCIIZ串的首地址 AL=0,为读取文件属性 AL=1,为设置文件属性,CX=新文件属性 返回结果:CF=0,操作成功,输入AL=0则CX=属性 输入AL=1则CX=新属性 CF=1,操作失败,AX=错误代码,9.1.2 路径和ASCIIZ串,当用DOS功能调用创建或打开文件时,首先必须在程序的数据段中定义一个反映文件名信息的ASCIIZ串,ASCIIZ串由文件路径名的ASCII码和一个全0字节组成,文件路径名说明文件的位置,包括磁盘驱动器、目录路径和文件名。例如:FILENAME DB C:MYMASMHB.DAT,00H 其中:FILENAME为ASCIIZ串的首
5、地址,C:MYMASMHB.DAT 是创建或打开文件的路径和文件名,最后的00H用来标识该字符串为ASCIIZ串。,9.1.3 文件句柄、错误代码和文件属性,1.文件句柄 用DOS功能调用创建或打开文件时,如果CF=0,说明操作成功,通过AX返回一个文件句柄,这时文件和句柄就建立了对应关系,以后对文件的读写等操作,只要给出文件句柄即可,而不必再给出其ASCIIZ串,因而一定要注意保存这个文件句柄。返回的文件句柄一般从05开始顺序排列,因为前5个句柄已被标准设备占用。2.错误代码 文件句柄存取方式对各种错误采取了统一的处理方法。在文件操作时,无论调用哪一功能调用,如返回CF=1,表示操作失败或出
6、错,则AX中返回的是错误代码,这些错误代码都来自一个统一的错误代码表。,3.文件属性 文件属性字节用来说明DOS文件属性,其各位含义如图9-1所示。7 6 5 4 3 2 1 0 只读文件 隐藏文件 系统文件 卷标 子目录 归档位图9-1 文件属性字节 主要属性字节代码如下:00H普通文件 01H只读文件 02H隐藏文件 04H系统文件 08H磁盘的卷标号 10H子目录 20H未归档的文件,9.1.4 文件的打开方式,用INT 21H的3DH功能打开一个文件时,打开文件的方式有三种,由AL中的打开方式代码确定:AL=0,以只读方式打开,文件只能读,不能写。AL=1,以只写方式打开,文件只能写,
7、不能读。AL=2,以读写方式打开,文件可读可写。,DOS系统为每个打开的文件管理一个读写指针。对文件的读写操作,实际上是从当前指针指向的位置开始的,可以把读写指针移动到文件的任意位置,从而能够实现对文件的随机存取。建立一个新文件或打开一个已有文件后,读写指针的值被初始化为0,也就是指向文件的起始位置。随着读写操作的进行,系统会根据读写的字节数,不断修改读写指针的值,使读写指针总是指向下一次要存取的字节。用INT 21H的42H功能可以把读写指针移到文件的任意位置。该功能要求在BX中设置文件句柄,在CX:DX中设置要移动的字节数(偏移量),在AL中设置移动方式代码。,9.1.5 读写指针的移动,
8、AL中设置的移动方式代码指定了3种移动指针的方式:(1)AL=00H,从文件开始处计算偏移量(移动的字节数)。例如,对文件进行过读写操作后,读写指针不再指向文件开始处,下面指令序列可以把读写指针重新移动到文件开始处:MOV AH,42H;INT 21H的42H功能 MOV AL,00H;从文件开始处计算偏移量 MOV BX,HANDLE;文件句柄(存储在HANDLE单元中)送BX MOV CX,0;移动字节数的高位数 MOV DX,0;移动字节数的低位数 INT 21H;DOS的21H号功能 又例如,从文件开始把指针移动100个字节的指令如下:MOV AH,42H MOV AL,00 MOV
9、BX,HANDLE MOV CX,0 MOV DX,100;移动字节数的低位数 INT 21H,(2)AL=01,从文件的当前位置计算偏移量。此时,偏移值可正可负,若为正,则正向移动指针;若为负,则反向移动。例如,从当前读写指针位置正向移动100个字节的指令序列如下:MOV AH,42H MOV AL,01;从当前读写指针位置计算偏移量 MOV BX,HANDLE MOV CX,0 MOV DX,100;移动字节数的低位数 INT 21H(3)AL=02,从文件尾计算偏移量 例如,要在文件尾添加记录,可先用下列指令把读写指针移到文件尾:MOV AH,42H MOV AL,02;从文件尾计算偏移
10、量 MOV BX,HANDLE MOV CX,0 MOV DX,0 INT 21H 如果指针移动成功,在DX:AX中返回新指针的位置。,9.2 文件操作举例,【例9-1】:创建一个文本文件MYFILE1.TXT,将从键盘输入的内容写入此文件中,输入过程以回车结束。(1)分析:1)在数据段中定义一个文件名的ASCIIZ串、一个字节的写缓冲区。2)利用INT 21H的3CH功能创建文件,若创建不成功则显示错误信息 并退出。3)在循环体中,利用INT 21H的1号功能从键盘接收字符,然后利用 INT 21H的40H功能把这一个字符写到文件中。每接收一个字符,判断是否为回车,若为回车则退出,否则循环。
11、4)写文件后,必须先关闭文件,然后才能退出。,(2)程序流程图如下,DATA SEGMENTFILENAME1 DB MYFILE1.TXT,0;ASCIIZ串FILENAME2 DB MYFILE2.TXT,0HANDLE1 DW?;保存文件句柄单元HANDLE2 DW?BUFFER DB 1024 DUP(?);读写缓冲区 LEN DW?;保存实际读入长度单元ERROR1 DB Can Not Open File!,0DH,0AH,$ERROR2 DB Can Not Creat File!,0DH,0AH,$ERROR3 DB Reading File Wrong!,0DH,0AH,$E
12、RROR4 DB Writing File Wrong!,0DH,0AH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FARSTART:MOV AX,DATA MOV DS,AX;打开文件MYFILE1 MOV AH,3DH;INT 21H的3DH功能 LEA DX,FILENAME1;DX=ASCIIZ串的首地址 MOV AL,0;AL=0,读打开 INT 21H;打开文件 JC ERR1;打开不成功,转ERR1 MOV HANDLE1,AX;成功,保存文件句柄,;创建新文件MYFILE2 MOV AH,3CH;INT 21H
13、的3CH功能 LEA DX,FILENAME2;DX=ASCIIZ串的首地址 MOV CX,0;CX=0,普通文件 INT 21H;创建文件 JC ERR2;创建不成功,转ERR2 MOV HANDLE2,AX;保存文件句柄;读MYFILE1内容到缓冲区 MOV AH,3FH;INT 21H的3FH功能 LEA DX,BUFFER;DX=读缓冲区的首地址 MOV BX,HANDLE1;BX=文件句柄 MOV CX,1024;CX=希望读入的字节数 INT 21H;读文件 JC ERR3;不成功,转ERR3 MOV LEN,AX;成功,保存字节数;把缓冲区中的小写字母变为大写字母 LEA SI,
14、BUFFER;设置SI、DI为地址指针 MOV DI,SI MOV CX,LEN;CX=待处理的字符数 LP1:MOV AL,SI;从缓冲区中取一个字节,(3)根据流程图编写汇编程序:,CMP AL,a;与小写字母a比较 JB CON1;若比a小,则不转换 CMP AL,z;与小写字母z比较 JA CON1;若比z大,则不转换 SUB AL,20H;否则转换成大写字母 MOV DI,AL;送回缓冲区 CON1:INC SI;修改地址指针 INC DI LOOP LP1;循环;将缓冲区中内容写到文件MYFILE2中 MOV AH,40H;INT 21H的40H功能 LEA DX,BUFFER;D
15、X=写缓冲区首地址 MOV BX,HANDLE2;BX=文件句柄 MOV CX,LEN;CX=要写入的字节数 INT 21H;写文件 JC ERR4;不成功,转ERR4;关闭文件MYFILE2 L0:MOV AH,3EH;INT 21H的功能3EH MOV BX,HANDLE2;BX文件句柄 INT 21H;关闭文件 L1:MOV AH,3EH;关闭文件MYFILE1 MOV BX,HANDLE1 INT 21H,EXIT:MOV AX,4C00H;返回DOS INT 21H ERR1:MOV AH,9;显示打开文件出错信息 LEA DX,ERROR1 INT 21H JMP EXIT;返回D
16、OS ERR2:MOV AH,9;显示创建文件出错信息 LEA DX,ERROR2 INT 21H JMP L1 ERR3:MOV AH,9;显示读文件出错信息 LEA DX,ERROR3 INT 21H JMP L0 ERR4:MOV AH,9;显示写文件出错信息 LEA DX,ERROR4 INT 21H JMP L0 MAIN ENDP CODE ENDS END START,【例9-2】:将例9-1中形成的文件MYFILE1.TXT中的小写字母变成大写字母,并复制到另一文件MYFILE2.TXT中。(1)分析:对文件内容进行加工,必须在内存的读写缓存区中进行,所以,首先要打开文件,把文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086汇编语言程序设计 第2版 教学ppt课件 第9章 磁盘文件存取方法 8086 汇编语言 程序设计 教学 ppt 课件 磁盘 文件 存取 方法

链接地址:https://www.31ppt.com/p-3909422.html