ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:141.22KB ,
资源ID:3977322      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3977322.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验七文件的读写.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验七文件的读写.docx

1、实验七 文件的读写汇编语言实验报告(七)班 级:01540802班姓 名: 南 征学 号: 20080705信息与电子学院实验七 文件的读写一、 实验目的理解文件标记的概念,掌握利用文件标记读写文件的方法,学习使用文件指针读取文件。二、 实验要点磁盘文件的读写有两种方法,一种称为文件控制块;另一种方法称为文件标记,前者在读写文件时首先要设定文件控制块,知名文件所在的当前磁盘的驱动器、文件名,同时还要制定所读写的文件所处的当前块号、当前记录号、记录长度等参量,此外还需要设置磁盘传输区。在读磁盘数据文件时,应先将磁盘上有关数据读入磁盘传输区,然后再传送至目的的内存区。在写磁盘数据文件时,要写入磁盘

2、文件的数据也必须先送入磁盘传输区,然后再执行写操作。此种方法的缺点是不支持树形目录结构。目前常用的方法是利用文件标记读写文件,无论用什么方法读写文件,都要解决以下几个问题:A) 用户程序要告诉操作系统将要存取那个文件。B) 无论是从磁盘独处的数据,还是要写入磁盘的数据都必须存放在一个制定的内存缓冲区中,这个内存缓冲区叫数据传输区(DTA)。C) 在读一个磁盘文件之前,要先打开文件,然后才能将文件内容读入内存。而在读写一个文件之前,要先建立一个新文件名,再将内存中的内容写入磁盘。D) 在存取文件之后,特别是在写入文件之后,务必将此文件关闭。利用文件标记读写文件的主要特点是:通过建立文件、打开文件

3、,将磁盘路径名、文件名转换为文件标记或件号,在以后读写文件的操作中均要与文件标记打交道。在一个系统中,可同时打开多个文件,并配置相应的文件标记。在利用文件标记读写磁盘文件是要掌握以下几个要点:1) 使用建立文件、打开文件系统功能之前,都必须将DS:DX指向驱动器名、路径名、文件名和以数值零为结尾的ASCIIZ字符串的首地址。2) 对于一个新文件要用3CH系统功能调用,建立文件。(如果不是新文件,此步骤可略)3) 已存在的文件则利用3DH系统功能调用,打开此文件。4) 如果文件建立、打开成功,则CF=0,并且在AX寄存器中返回文件标记。5) 在建立、打开文件成功之后,即可对文件进行读、写操作。如

4、果要对文件进行读操作,则在打开文件之后,用3FH系统功能调用将文件读入数据缓冲区,调用前的入口参数是:文件标记存入BX,读入文件的字节数放入CX,数据缓冲区的起始地址存入DS:DX。调用完毕,AX返回实际读入的字节数。6) 读入数据缓冲区的文件,可利用40H系统功能调用将文件写入指定的磁盘。调用入口参数是:文件标记存入BX,要写入的字节数放入CX,DS:DX指向要写入数据缓冲区的首地址。调用结束后AX返回实际写入的字节数。如果AXCX,则表示磁盘空间已满,但系统不提示错误信息。7) 在读、写文件完成后,要用3EH系统功能调用关闭,释放原占有的文件号,并将缓冲区的数据最终写入磁盘。特别是对于写磁

5、盘文件操作,在写入之后,必须要关闭文件,否则该数据文件将会丢失。此外,特别要注意的是,在一个系统中不能同时建立两个以上的新文件。8) 在文件建立或打开后,文件指针的初始位置是指向文件首偏移为0处,如果不想从文件首开始读、写文件,则可用系统功能调用42H移动文件指针的方法实现。调用前,将文件标记存入BX,所需移动偏移量的字节数(CX为高位部分)存放于CX:DX;调用后在DX:AX中返回读写指针移动后的位置。移动的方式有三种:AL=0 指针从文件头移动到由CX:DX所指定的偏移量处;AL=1 指针从当前位置移动到由CX:DX所指定的偏移量处;AL=2 指针从文件尾移动到由CX:DX所指定的偏移量处

6、;本实验通过第1题,使同学掌握利用文件标记的方法,读写一个文件;第2题在掌握文件标记的使用之后,理解利用文件标记及文件指针将两个文件合并成一个文件的过程及技术要领。第3题进一步理解文件指针的三种移动方式的使用方法。三、 实验任务及步骤1 用文件标记读写文件编程实现,首先从键盘输入包括驱动器名、路径名、文件名及0的ASCIIZ字符串(即为指定路径下的一个文件),然后把这个文件打开并读入到内存数据缓冲区50000H(对应的逻辑地址为5000:0000)处,再换个文件名重新写入磁盘。代码如下:DATA SEGMENT FILE1 DB 40 DB ? DB 40 DUP(0) FILE2 DB 40

7、 DB ? DB 40 DUP(0) MSG1 DB INPUT SOURCE FILE:$ MSG2 DB INPUT NEW NAME:$ ENTER DB 0DH,0AH,$ BUF DB 100 DUP(0)STACK SEGMENT DB 100 DUP(?)STACK ENDSDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA DX,MSG1 MOV AH,09H INT 21H LEA DX,FILE1 MOV

8、AH,0AH INT 21H LEA SI,FILE1 MOV AL,SI+1 CBW INC SI INC SI ADD SI,AX MOV BYTE PTRSI,0 LEA DX,ENTER MOV AH,9 INT 21H LEA DX,FILE1+2 MOV AH,3DH MOV AL,0 INT 21H MOV BX,AX MOV AH,3FH PUSH DS PUSH ES MOV CX,5000H MOV DS,CX MOV DX,0000H MOV CX,50 INT 21H POP DS POP ES MOV AH,3EH INT 21H LEA DX,MSG2 MOV AH

9、,09H INT 21H LEA DX,FILE2 MOV AH,0AH INT 21H LEA SI,FILE2 MOV AL,SI+1 CBW INC SI INC SI ADD SI,AX MOV BYTE PTRSI,0 MOV AH,3CH MOV CX,00H LEA DX,FILE2+2 INT 21H MOV BX,AX MOV AH,40H PUSH DS PUSH ES MOV CX,5000H MOV DS,CX MOV DX,0000H MOV CX,14 INT 21H POP DS POP ES MOV AH,3EH INT 21H MOV AH,4CH INT 2

10、1HMAIN ENDPCODE ENDS END MAIN运行结果如下:2 利用文件标记,从磁盘内读入两个文件到内存缓冲区,然后把这两个文件合并为一个文件存入磁盘。试编写源程序。代码如下:DATA SEGMENTFILE1 DB C:72A.TXT,00HFILE2 DB C: 72B.TXT,00HFILE3 DB C:72C.TXT,00HSAVE DW 0NUM DW 0SAVENEW DW 0BUF DB 100 DUP(0)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATAMAIN PROC FAR MOV AX,DATA MOV

11、 DS,AX MOV ES,AX MOV AH,3DH MOV AL,0 LEA DX,FILE1 INT 21H MOV SAVE,AX MOV AH,3FH MOV BX,SAVE LEA DX,BUF MOV CX,255 INT 21H MOV NUM,AX MOV AH,3EH MOV BX,SAVE INT 21H MOV AH,3CH MOV CX,00H LEA DX,FILE3 INT 21H MOV SAVENEW,AX MOV AH,40H MOV BX,SAVENEW MOV CX,NUM LEA DX,BUF INT 21H MOV AH,3DH MOV AL,0 L

12、EA DX,FILE2 INT 21H MOV SAVE,AX MOV AH,3FH MOV BX,SAVE LEA DX,BUF MOV CX,255 INT 21H MOV NUM,AX MOV AH,3EH MOV BX,SAVE INT 21H MOV AH,40H MOV BX,SAVENEW MOV CX,NUM LEA DX,BUF INT 21H MOV AH,3EH MOV BX,SAVENEW INT 21H MOV AH,4CH INT 21HMAIN ENDPCODE ENDS END MAIN运行结果如下:(运行前)(运行后)3 利用文件指针读取一个源文件,要求从文件

13、尾处开始读取100H个字节到缓冲区,然后换个文件名存入磁盘。试编写源程序。代码如下:DATA SEGMENTFILE1 DB C:73.TXT,00HFILE2 DB 50 DB ? DB 50 DUP(0) SAVE DW 0BUF DB 256 DUP(0)STR DB INPUT NEW NAME:$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATAMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA DX,STR MOV AH,09H INT 21H MOV AH,3DH MOV AL,

14、0 LEA DX,FILE1 INT 21H MOV SAVE,AX MOV BX,SAVE MOV AH,42H MOV CX,0 MOV DX,0 MOV AL,02 INT 21H SUB AX,100H MOV DX,AX MOV AH,42H MOV CX,0 MOV AL,0 INT 21H MOV AH,3FH MOV BX,SAVE LEA DX,BUF MOV CX,256 INT 21H MOV AH,3EH MOV BX,SAVE INT 21H LEA SI,BUF ADD SI,255 MOV DI,SI LEA SI,BUF MOV CX,128AGAIN:MOV

15、BL,SI XCHG BL,DI MOV SI,BL INC SI DEC DI LOOP AGAIN LEA DX,FILE2 MOV AH,0AH INT 21H LEA SI,FILE2 MOV AL,SI+1 CBW INC SI INC SI ADD SI,AX MOV BYTE PTRSI,0 MOV AH,3CH MOV CX,00H LEA DX,FILE2+2 INT 21H MOV BX,SAVE MOV BX,SAVE MOV AH,40H MOV CX,256 LEA DX,BUF INT 21H MOV AH,3EH MOV BX,SAVE INT 21H MOV A

16、H,4CH INT 21HMAIN ENDPCODE ENDS END MAIN运行结果如下:4 编程实现,一边从键盘上接收字符,一边将其写入指定的文件,限定字符个数为50个。代码如下:DATA SEGMENTFILENAME DB C: 74.TXT,0 BUF DB ? HANDLE DW ? ERROR1 DB CREATING FILE ERROR!,0DH,0AH,$ ERROR2 DB WRITING FILE ERROR!,0DH,0AH,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX

17、MOV AH,3CHMOV CX,0LEA DX,FILENAMEINT 21H JC ERR1 MOV HANDLE,AXAGAIN:MOV AH,1INT 21HCMP AL,0DHJZ EXIT2MOV BUF,ALMOV AH,40HMOV BX,HANDLEMOV CX,1 LEA DX,BUF INT 21H JC ERR2 JMP AGAINEXIT2:MOV AH,3EHMOV BX,HANDLE INT 21H EXIT1:MOV AX,4C00H INT 21HERR1:MOV AH,9 LEA DX,ERROR1INT 21HJMP EXIT1 ERR2:MOV AH,9

18、 LEA DX,ERROR2INT 21HJMP EXIT2CODE ENDSEND START运行结果如下:5 编程实现,顺序读出上题中产生的文件内容,并将其显示在屏幕上。代码如下:DATA SEGMENTFNAME DB 40,41 DUP(?)FCONTENTS DB 256 DUP($)ASK1 DB INPUT FILE NAME:$ERR DB 0AH,0DH,ERROR$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FAR MOV AX,DATA; MOV DS,AX LEA DX,ASK1 MOV AH,9 INT

19、21H LEA DX,FNAME MOV AH,0AH INT 21H MOV CL,FNAME+1 MOV CH,0 MOV SI,CX MOV FNAMESI+2,0 LEA DX,FNAME+2 MOV AH,3DH MOV AL,0 INT 21H JNC RFILEERRMSG: LEA DX,ERR MOV AH,9 INT 21H MOV AH,4CH; INT 21HRFILE: MOV BX,AX LEA DX,FCONTENTS MOV CX,256 MOV AH,3FH INT 21H JC ERRMSG CALL CRLF LEA DX,FCONTENTS MOV AH

20、,9 INT 21H MOV AH,1 INT 21H MOV AH,4CH INT 21HMAIN ENDPCRLF PROC NEAR MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H RETCRLF ENDPCODE ENDS END MAIN运行结果如下:四、 实验心得通过本次实验掌握了文件读写的相关操作。实验中运用DOS系统功能调用实现了文件建立、文件打开、文件读写、文件关闭等基本操作。运用文件标记和文件指针还可实现文件合并等更为复杂的功能。在今后学习和使用汇编语言的过程中,对文件的相关操作是必不可少的,结合本次上机实验,更加深刻地理解了课本中关于文件读写的相关内容,可谓理论结合实际。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1