实验六 磁盘文件存取实验设计性实验.docx
- 文档编号:25732541
- 上传时间:2023-06-12
- 格式:DOCX
- 页数:17
- 大小:292.53KB
实验六 磁盘文件存取实验设计性实验.docx
《实验六 磁盘文件存取实验设计性实验.docx》由会员分享,可在线阅读,更多相关《实验六 磁盘文件存取实验设计性实验.docx(17页珍藏版)》请在冰豆网上搜索。
实验六磁盘文件存取实验设计性实验
实验六磁盘文件存取实验(设计性实验)
一、实验要求和目的
1.理解文件、目录的概念;
2.了解FCB(文件控制块)方式文件管理方法;
3.掌握文件代号式文件存取方式;
4.学习使用文件指针读取文件
二、软硬件环境
1、硬件环境:
计算机系统windows;
2、软件环境:
装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识
DOS功能调用中断(INT21H)提供了两类磁盘文件管理功能,一类是FCB(文件控制块)方式,另一类是文件代号式存取方式。
对于文件的管理,实际上是对文件的读写管理,DOS设计了四种存取文件方式:
顺序存取方式、随机存取方式、随机分块存取方式和代号法存取方式。
文件的处理步骤
A)写之前必须先建立文件、读之前必须先打开文件。
B)写文件之后一定要关闭文件。
通过关闭文件,使操作系统确认此
文件放在磁盘哪一部分,写后不关闭会导致写入文件不完整。
1、文件代号式存取方式:
当用户需要打开或建立一个文件时,必须提供文件标识符。
文件标识符用ASCIIZ字符串表示。
ASCIIZ字符串是指文件标识符的ASCII字符串后面再加1个“0”字符。
文件标识符的字符串包括驱动器名、路径名和文件名。
其格式为
[d:
][path]filename[.exe]
其中d为驱动器名,path为路径名,.exe为文件名后缀。
中断21H提供了许多有关目录和文件操作的功能,其中文件代号式存取方式常用的功能如下:
2、操作目录的常用功能
39H——创建目录3BH——设置当前目录
3AH——删除目录47H——读取当前目录
有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅相关资料之目录控制功能。
3、用文件句柄操作文件的常用功能
3CH——创建文件4EH——查找到第一个文件
3DH——打开文件4FH——查找下一个文件
3EH——关闭文件56H——文件换名
3FH——读文件或设备57H——读取/设置文件的日期和时间
40H——写文件或设备5AH——创建临时文件
41H——删除文件5BH——创建新文件
42H——设置文件指针67H——设置文件句柄数(最多文件数)
43H——读取/设置文件属性6CH——扩展的打开文件功能
四、实验内容与步骤
1、编写一个创建子目录的程序,具体要求如下:
1)用键盘输入一个目录路径名,若输入的字符串为空,则程序运行结束;
2)若目录创建成功,显示成功信息,否则,显示创建失败信息。
程序框图:
源程序:
DATASSEGMENT
STRING1DB'Inputanewpath:
',0dh,0ah,'$'
STRING2DB'Createsuccessfully.',0dh,0ah,'$'
STRING3DB'Failed.',0dh,0ah,'$'
BUFDB20,?
20DUP(?
);路径存储缓冲区
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
LEADX,STRING1
MOVAH,9
INT21H
LEADX,BUF;输入路径
MOVAH,10
INT21H
CMPBUF[1],BYTEPTR0;判断路径是否为空
JZFINISH
MOVCL,BUF[1]
LEASI,BUF+2
ADDSI,CX
MOVBYTEPTR[SI],0;将路径转为ASCIIZ字符串
CLC
MOVAH,39H;创建目录
LEADX,BUF+2
MOVCX,0
INT21H
JCL2;判断是否成功
LEADX,STRING2
MOVAH,9
INT21H
JMPFINISH
L2:
LEADX,STRING3
MOVAH,9
INT21H
FINISH:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
程序结果:
2、编写一个创建文件的程序,其要求如下:
1)用键盘输入文件名(可包含路径),若输入的字符串为空,则程序运行结束;
2)若目录创建成功,显示成功信息,否则,显示创建失败信息;
3)从键盘输入20个字符存放到新建立的文件中。
程序框图:
源程序:
DATASSEGMENT
STRING1DB'Inputanewpath:
',0dh,0ah,'$'
STRING2DB'Createsuccessfully.',0dh,0ah,'$'
STRING3DB'Failed.',0dh,0ah,'$'
STRING4DB'Writesuccessfully.',0dh,0ah,'$'
STRING5DB'Writenewwords:
',0dh,0ah,'$'
STRING6DB0dh,0ah,'$'
BUFDB20,?
20DUP(?
);路径存储缓冲区
WRITEDB40,?
40DUP(?
);写入内容存储缓冲区
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
LEADX,STRING1
MOVAH,9
INT21H
LEADX,BUF;输入新文件路径
MOVAH,10
INT21H
LEADX,STRING6
MOVAH,9
INT21H
CMPBUF[1],BYTEPTR0;判断是否为空
JZFINISH
MOVCL,BUF[1]
LEASI,BUF+2
ADDSI,CX
MOVBYTEPTR[SI],0;路径改为ASCIIZ字符串
CLC
MOVAH,3CH;创建新文件
LEADX,BUF+2
MOVCX,0
INT21H
JCL2;判断是否成功
CALLSUC
JMPFINISH
L2:
LEADX,STRING3
MOVAH,9
INT21H
FINISH:
MOVAH,4CH
INT21H
;子函数:
正确建立输入内容
SUCPROC
LEADX,STRING2
MOVAH,9
INT21H
LEADX,STRING5
MOVAH,9
INT21H
LEADX,WRITE
MOVAH,10
INT21H
LEADX,STRING6
MOVAH,9
INT21H
MOVAH,3DH
LEADX,BUF+2
MOVAL,1
INT21H
MOVCX,AX
MOVAH,40H
LEASI,WRITE+2
MOVBL,[WRITE+1]
MOVBH,0
MOV[SI+BX],BYTEPTR'$'
LEADX,WRITE+2
MOVBX,CX
MOVCL,[WRITE+1]
INT21H
JCS1
LEADX,STRING4
MOVAH,9
INT21H
JMPS2
S1:
LEADX,STRING3
MOVAH,9
INT21H
S2:
RET
SUCENDP
CODESENDS
ENDSTART
运行结果:
3、利用文件句柄将两个文件合并成一个文件。
要求:
1)在第一个文件末尾处换行回车,插入“Thesecondfileasfollow:
”;2)换行回车,把第二个文件内容存放在后面。
程序框图:
源程序:
DATASSEGMENT
STRING1DB'Inputpath1:
',0dh,0ah,'$'
STRING2DB'Inputpath2:
',0dh,0ah,'$'
STRING3DB0dh,0ah,'Thesecondfileasfollow:
',0dh,0ah
STRING0DB0dh,0ah,'$'
STRING4DB'Successfully.',0dh,0ah,'$'
PATHNAME1DB20,?
20DUP(?
)
PATHNAME2DB20,?
20DUP(?
)
FILE1DW?
FILE2DW?
BUFDB30DUP('')
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
;打开文件1
LEADX,STRING1
MOVAH,9
INT21H
LEADX,PATHNAME1
MOVAH,10
INT21H
LEADX,STRING0
MOVAH,9
INT21H
MOVCL,PATHNAME1[1]
LEASI,PATHNAME1+2
ADDSI,CX
MOVBYTEPTR[SI],0
MOVAH,3DH
LEADX,PATHNAME1+2
MOVAL,2
INT21H
MOVFILE1,AX
;打开文件2
LEADX,STRING2
MOVAH,9
INT21H
LEADX,PATHNAME2
MOVAH,10
INT21H
LEADX,STRING0
MOVAH,9
INT21H
MOVCL,PATHNAME2[1]
LEASI,PATHNAME2+2
ADDSI,CX
MOVBYTEPTR[SI],0
MOVAH,3DH
LEADX,PATHNAME2+2
MOVAL,0
INT21H
MOVFILE2,AX
;移动指针
MOVAH,42H
MOVCX,0
MOVDX,0
MOVAL,0
MOVBX,FILE2
INT21H
;读文件
MOVAH,3FH
LEADX,BUF
MOVBX,FILE2
MOVCX,30
INT21H
;移动指针
MOVAH,42H
MOVCX,0
MOVDX,0
MOVAL,2
MOVBX,FILE1
INT21H
;写文件
MOVAH,40H
LEADX,STRING3
MOVBX,FILE1
MOVCX,30
INT21H
MOVAH,40H
LEADX,BUF
MOVBX,FILE1
MOVCX,30
INT21H
LEADX,STRING4
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
运行结果:
五、思考与练习以及测评标准
1.有兴趣的同学考虑用子程序方法实现上述实验内容;
2.文件在使用之前为何要打开?
使用后为何要关闭?
怎样计算文件的长度和移动文件的读写指针?
打开文件用以获得文件句柄,对该文件的其他文件操作均通过文件句柄实现。
关闭文件是为了释放该文件所占用的资源,如句柄、指针等。
自动文件读写指针可通过DOS功能调用42H实现。
计算文件长度可赋值CX,DX为0,AL为2,调用42H功能,使指针指向文件尾,以此事指针地址减去文件头地址即可算得文件长度。
六、心得体会
这次实验中练习了使用汇编语言对文件进行操作。
有着学习c语言中处理文件的基础,我知道对文件操作的基本种类,如创建、打开、读写、关闭等。
有了这些知识学习起汇编的文件处理就很容易上手。
对于这方面的知识,我认为唯一较难的就是各种文件处理指令的INT代码不容易记。
学会处理文件是编程的重要一个部分,掌握了这项技能就能够在今后的汇编编程中编写更为实用复杂的程序了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验六 磁盘文件存取实验设计性实验 实验 磁盘 文件 存取 实验设计