磁盘文件读写程序设计..pdf

上传人:tbuqq 文档编号:4945132 上传时间:2020-01-16 格式:PDF 页数:22 大小:310.95KB
返回 下载 相关 举报
磁盘文件读写程序设计..pdf_第1页
第1页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《磁盘文件读写程序设计..pdf》由会员分享,可在线阅读,更多相关《磁盘文件读写程序设计..pdf(22页珍藏版)》请在三一文库上搜索。

1、学号 课程设计 2014 年1 月14 日 题目磁盘文件读写程序设计 学院自动化 专业自动化 班级1102 姓名 指导教师张丹红 课程设计任务书 学生姓名:专业班级:自动化 1102 指导教师:张 丹 红工作单位:自动化学院 题目:磁盘文件读写程序设计 初始条件:带有编辑器、汇编程序、连接程序和调试程序的电脑一台。 要求完成的主要任务 : (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 采用汇编语言设计一个读写磁盘文件的程序。建立一个文件,向文件中写入32 个 字节内容并读出,操作成功后显示提示OK,按 Q 退出程序。 (1) 设计任务及要求分析 (2) 方案比较及认证说明 (3

2、) 系统原理阐述 (4) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释 (5) 调试记录及结果分析 (6) 总结 (7) 参考资料 (8)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图 时间安排: 1 月 6 日 1月 8 日:收集资料,方案选择 1 月 9 日 1月 12 日:整体设计,程序编写 1 月 13 日1 月 16 日:调试程序,报告撰写 1 月 17 日:交设计报告,程序演示,答辩 指导教师签名:年月日 系主任(或责任教师)签名:年月日 摘要 汇编语言是面向机器的程序设计语言。在汇编语言中,用助记符代替机器指令的操 作码,用地址符号或标号代替指令或操作数的地

3、址,如此就增强了程序的可读性并且降 低了编写难度,象这样符号化的程序设计语言就是汇编语言,因此亦称为符号语言。使 用汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转 换成机器指令。汇编程序将符号化的操作代码组装成处理器可以识别的机器指令,这个 组装的过程称为组合或者汇编。因此,有时候人们也把汇编语言称为组合语言。 汇编语言是一种功能性很强的程序设计语言,也是利用计算机所有硬件特性并能直 接控制硬件的语言。 汇编语言,作为一门语言, 应对与高级语言的编译器, 需要一个“汇 编器”来把汇编语言原文件汇编成机器可执行的代码。高级汇编器如MASM 就为我们 写程序提供了很多类

4、似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写 的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编 环境已经如此高级,即使全部用汇编语言来编写windows 的应用程序也是可行的,但 这不是汇编语言的长处。 汇编语言的长处在于编写高效而且需要对机器语言精确控制的 程序。此次课设将使用汇编语言和MASM 软件设计一个对磁盘文件进行读写的程序。 关键词:汇编MASM 磁盘读写编译 程序设计 目录 1 设计任务及要求分析 1.1 设计任务及要求 1.2 设计任务分析 2 方案比较及认证说明 2.1 写文件 2.2 读文件 2.3 方案比较 3 系统实现原理说明

5、3.1 程序设计思想 3.2 程序中用到的 DOS 功能调用 4 程序流程图 4.1 写文件程序流程图 4.2 读文件程序流程图 5 程序设计结果显示 5.1 写文件程序运行结果 5.2 读文件程序运行结果 6 调试记录与分析 心得体会 参考文献 附录一:写文件源程序 附录二:读文件源程序 磁盘文件读写程序设计 1 设计任务及要求分析 1.1 设计任务及要求 设计要求:采用汇编语言设计一个读写磁盘文件的程序。建立一个文件,向文件中 写入 32 个字节内容并读出,操作成功后显示提示OK,按 Q 退出程序。 设计任务: (1)设计任务及要求分析 (2)方案比较及认证说明 (3)系统原理阐述 (4)

6、软件设计课题需要说明:软件思想、流程图、源程序及程序注释 (5)调试记录及结果分析 (6)总结 (7)参考资料 (8)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图 1.2 设计任务分析 由要求可知,本题目是一道文件读取的题目,程序主要是分两步走: (1)写文件:建立一个文本文件,写入内容,若操作成功则显示“ OK” ,若失败则 显示“BAD ” ,按“Q ” 可退出程序。 (2) 读文件:从建立的文件中读取32 个字节并显示内容, 若操作成功则显示 “ OK” , 若失败则显示 “BAD ” ,按“Q ”可退出程序。 2 方案论证及说明 2.1 写文件 按要求需要建立一个文件,向文

7、件中写入内容,程序如下: mov ax , data mov ds , ax ;目录路径名的 ASCII 字符串的段地址 mov dx , offset file ;目录路径名的 ASCII字符串的偏移地址 mov cx , 0 mov ah , 3ch ;调用功能 3CH创建新的文件 int 21h jc error ;创建出错,转 error处 mov handle , ax ;保存文件号 mov bx , ax ;bx文件控制字 mov cx , 255 ;cx要写的字节数 mov dx , offset buf ;dx内存缓冲区的偏移地址 mov ah , 40h ;调用功能 40H实

8、现内存缓冲区中的数据写入到磁盘文件或 设备 int 21h ;向文件中写入 32 个字节内容 2.2 读文件 打开创建的文件并读取文件中的前32 个字符的内容,程序如下: mov ax , data mov ds , ax ;目录路径名的 ASCII 字符串的段地址 mov dx , offset file ;目录路径名的 ASCII字符串的偏移地址 mov al , 0 mov ah , 3dh ;调用功能 3DH打开指定文件 int 21h jc error ;若打开出错,转 error mov handle , ax ;保存文件号 mov bx , ax mov cx , 32 ;要读取

9、的字节数 mov dx , offset buf ;内存缓冲区的偏移地址 mov ah , 3fh ;调用功能 3FH从文件中读 32字节buf int 21h jc error ;若读出错,转 error mov bx , ax ;实际读到的字符数送入 bx mov bufbx , $ ;在文件结束处放置一 “$”符 mov dx , offset buf mov ah , 9h ;DOS功能调用输出一串字符 int 21h ;显示文件内容 mov bx , handle mov ah , 3eh ;调用功能 3EH关闭文件 int 21h 2.3 方案比较 文件读取有 4 种方式:顺序存取

10、方式、随机存取方式、随即分块存取方式以及文件 代号式磁盘存取方式。 相比于其它三种方式,文件代号式磁盘存取方式中有关文件的各种信息都包括在 DOS 中,对用户时透明的,在处理指定文件时,必须使用一个完整的路径名。对各种错 误采取了更统一的处理方法,操作过程中,AX 中回送错误代码,这些错误代码对所有 的代号式存取功能都是相同的,为用户进行分析提供了方便。 3 系统实现原理说明 3.1 程序设计思想 由设计题目 “ 建立一个文件,从文件中读32 字节,显示文件内容,操作成功后显示 提示 OK,操作失败后显示提示BAD,按 Q 退出程序。 ” 可知大致可分两步走,建立文 件,读取并显示文件内容。

11、通过查阅资料了解到文件代号式存取方式的方法,通过 DOS 中断调用 21H 完成。 建立磁盘文件:写一个新文件或重写一个旧文件,首先要建立文件并赋给它一个属 性。如果 DOS 发现要建立的文件已经存在,那么原来的文件就被破坏。建立文件的功 能调用是 3CH。写磁盘文件是利用功能调用40H,要写入的字数放在CX 中,输入缓冲 区的地址放在 DX 中。 读取磁盘文件:读文件或设备的功能调用是3FH, 要求先把文件打开取得文件代号, 然后按照制定的字节数从磁盘把文件读出,读入内存中预先定义好的数据缓冲区。如果 读入的字节数大于缓冲区空间, 那么这些多余的数据将送到程序所占空间之上的存储器 中。打开文

12、件操作的功能调用是3DH,需要检查文件名是否合法,文件是否有效。 3.2 程序中用到的DOS 功能调用 (1) 9H:在标准输出设备输出一串字符。 调用:AH=0AH DS=输入缓冲区的段地址 DX=输入缓冲区的偏移地址 (2) 3CH:创建新的文件或将磁盘上已存在的文件的长度变成0。 调用: AH=3CH DS=驱动器和目录路径名的ASCII 字符串的段地址 DX=驱动器和目录路径名的ASCII 字符串的偏移地址 (3) 3DH:打开指定的文件。 调用: AH=3DH DS=驱动器和目录路径名的ASCII 字符串的段地址 DX=驱动器和目录路径名的ASCII 字符串的偏移地址 (4) 3EH

13、:关闭指定的文件。 调用: AH=3EH BX=打开或创建时返回的文件控制字 (5) 3FH:将指定的文件或设备的数据读入内存缓冲区中。 调用: AH=3FH BX=文件控制字 DS=内存缓冲区的段地址 DX=内存缓冲区的偏移地址 CX=要读取的字节数 (6) 21H:将当前块和当前记录所表示的记录读入磁盘传送地址。 调用: AH=21H (7) 40H:将内存的缓冲区中的数据写入到磁盘文件或设备。 调用: AH=40H BX=文件控制字 DS=内存缓冲区的段地址 DX=内存缓冲区的偏移地址 CX=要写的字节数 (8) 4CH:结束当前的进程,控制返回给调用该进程的程序。 调用: AH=4CH

14、 AL= 返回值 图 4-1 写文件程序流程图 4 程序流程图 4.1 写文件程序流程图 建立文件思路为: 输入文件名 创建文件 判断文件是否存在 写入文件内容 关闭文 件 开始 创建文件 判 断 文 件 是 否 存在 覆 盖 原 文 件 关闭文件 判 断 操 作存在 成 功 显 示 OK 失 败 显 示 BAD 结束 写 入 文 件 内容 Y N N Y 4.2 读文件程序流程图 读取文件思路为:找到并打开指定位置文件读取文件 显示文件前 32 个字符 关闭 文件 开始 打 开 文 件 读 取 文 件 显 示 文 件 关 闭 文 件 判断操 作是否 成功 失 败 显 示 BAD 成 功 显

15、示 OK 结束 N Y 图 4-2读文件程序流程图 5 程序设计结果显示 5.1 写文件程序运行结果 程序运行成功显示 “ OK” ,按“Q ”或“q”退出 图 5-1 写文件程序运行结果 5.2 读文件程序运行结果 程序运行成功显示文件前32 个字符并显示 “ OK” ,按“Q ”或“q”退出 图 5-2 读文件程序运行结果 6 调试记录与分析 本程序应用的主要是DOS 中断调用 21H 里面的功能,如 9H、3CH、3DH 等。由于 以前接触较少的原因,使用不熟练,出现了一些问题。经过详细的对课本和图书馆借来 的资料的了解,以及同学的帮助最终顺利的完成了程序。 通过图书馆以及上网查阅的一些

16、资料大致了解了磁盘文件读写的框架程序的编写。 完成写文件程序的主要部分,运行的时候出现问题。运行完成程序自动退出,未能按要 求实现 “ 按Q 或q退出” 。查阅相关资料以后知道可以在程序开始定义“exit_message ”, 最后加上 1H 功能调用可以实现。 完成读文件程序的内容后运行程序,运行出错显示了“BAD” ,查找原因。后来发 现是写入内容不足32 个字符,无法读出,故出错。后来在写文件程序里改了写入内容 够了 32 个字符以后运行成功。 通过不断的调试、运行,我认识到编程序是需要耐心与细心才能完成的事情,磨练 了我们的毅力。 心得体会 课程设计的过程是综合运用所学知识的过程。要求

17、将课本中分布独立学习的知识, 在设计中综合加以应用,从而对所学知识有更进一步的理解、巩固、和发展,并掌握在 理论学习时忽略的细节和要点。通过课程设计,提高学生综合运用所学知识分析问题、 解决问题的能力,同时,通过查找、运用设计资料,完成工程设计所必备的基本训练。 本次的课程设计的题目是 “ 磁盘文件读取 ” ,通过老师给的资料去图书馆查阅书籍, 找到了完成该题目的框架程序,就是利用DOS 功能调用 21H 里面的几种功能实现。同 时,通过查阅资料还了解了一些其他的汇编相关的知识,强化了自己的理论知识。 整个课程设计过程应该说还是比较顺利的,框架程序确定后,回来在电脑上一步步 运行,调试,知道达

18、到要求,可以实现预订的效果。过程中,遇到一些困难,都是通过 查阅资料或请教同学解决的,无形中加深了同学之间的感情,也提升了自己的能力。 完成了课程设计,不仅仅有一种完成作业的快感,更是为自己学习的东西可以在实 践中应用感到兴奋。一次次的课程设计,不进强化了我们的理论知识,加强了我们的动 手能力,让我们更深入的了解理论结合实践的重要性,不能只局限于纸上写写画画,这 对我们以后的学习、工作都有好处。 总之,课程设计是我们的一门必修课,通过了它,我们以后的路才会更顺畅。 参考文献 1 沈美明、温冬婵 .IBM PC汇编语言程序设计 (第二版).北京:清华大学出版社 .2005 2 索梅、郑甫京、张鹿

19、 .80386/80286汇编语言程序设计 .北京:清华大学出版社 .1994 3 周佩玲、彭虎、傅忠谦 .微机原理与接口技术 .北京:电子工业出版社 .2005 4 齐志儒、高福祥 .汇编语言程序设计 .沈阳:东北大学出版社 .2001 5 冯萍、史新福 .汇编语言与接口技术 .北京:机械工业出版社 .2002 附录一:写文件源程序 data segment ;数据段开始 file db e:R_Hand.txt , 0 ;创建文件的文件名 buf db Traveling to another country is good ; 写到文件中去的内容 error_message db 0ah

20、 , BAD ! , $ ;出错时的提示 exit_message db 0dh,0ah,Press Q or q to exit,or others to continue!,0dh,0ah,$ ;按 “Q”或“ q”退出 message db 0ah , OK !$ ;操作成功后的提示 handle dw ? ;保存文件号 data ends ;数据段结束 code segment ;代码段开始 assume cs:code , ds:data start: mov ax , data mov ds , ax mov dx , offset file ;目录路径名的字符串偏移地址 mov

21、cx , 0 ;文件属性 mov ah , 3ch ;调用功能3CH 建立新的文件 int 21h jc error ;创建出错,转 error 处 mov handle , ax ;保存文件号 mov bx , ax ;bx 文件控制字 mov cx , 32 ;cx 要写的字节数 mov dx , offset buf ;dx 内存缓冲区的偏移地址 mov ah , 40h ;调用功能 40H 实现内存缓冲区中的数据写入到磁盘文件或设备 int 21h ;向文件中写入 32 个字节内容 jc error ;写出错,转 error 处 mov bx , handle mov ah , 3eh

22、 ;调用功能 3EH 关闭文件 int 21h jc error ;关闭文件出错,转 error 处 mov dx , offset message mov ah , 9h ;调用功能 9H 显示输出字符 int 21h ;操作成功后显示提示 jmp end1 error: mov dx , offset error_message mov ah , 9h ;调用功能 9H 显示输出字符 int 21h ;显示错误提示 end1: mov dx,offset exit_message mov ah,9h ;调用功能 9H 显示输出字符 int 21h mov ah,1h ;输出显示 al 的内

23、容 int 21h cmp al,Q jz over cmp al,q jz over jmp start ;退出显示 over: mov ah , 4ch ;调用功能 4CH 结束当前的进程, 返回主程序 int 21h code ends ;代码段结束 end start 附录二:读文件的源程序 data segment ;数据段开始 file db e:R_Hand.txt , 0 ;文件名 buf db 33 dup(0) ;文件内容暂存区 error_message db 0ah , BAD! , $ ;出错时的提示 message db 0ah , OK!,$ ;操作成功后的提示

24、exit_message db 0dh,0ah,Press Q or q to exit,or others to continue!,0dh,0ah,$ ;按“Q”或“ q”退出 handle dw ? ;保存文件号 data ends ;数据段结束 code segment ;代码段开始 assume cs:code , ds:data start: mov ax , data mov ds , ax ;目录名段地址 mov dx , offset file ;目录名偏移地址 mov al , 0 ;表示为读取而打开文件 mov ah , 3dh ;调用功能 3DH 打开文件 int 21

25、h jc error ;若打开出错,转 error mov handle , ax ;保存文件号 mov bx , ax mov cx , 32 ;要读取的字节数 mov dx , offset buf ;内存缓冲区的偏移地址 mov ah , 3fh ;调用功能 3FH 从文件中读 32 字节 int 21h jc error ;若读出错,转 error mov bx , ax ;实际读到的字符数送入bx mov bufbx , $ ;在文件结束处放置一“ $”符 mov dx , offset buf mov ah , 9h int 21h ;显示文件内容 mov bx , handle

26、mov ah , 3eh int 21h ;关闭文件 mov dx , offset message mov ah , 9h int 21h ;操作成功后显示提示 jnc end1 ;若关闭过程无错,转到end1处返回 dos error: mov dx , offset error_message mov ah , 9h int 21h ;显示错误提示 end1: mov dx,offset exit_message mov ah,9h int 21h mov ah,1h ;输出显示 al 的内容 int 21h cmp al,Q jz over cmp al,q ;退出显示 jz over

27、 jmp start over: mov ah , 4ch ;结束当前的进程,返回主程序 int 21h code ends ;代码段结束 end start 本科生课程设计成绩评定表 姓名性别男 专业、班级自动化 1102 课程设计题目:磁盘文件读写程序设计 课程设计答辩或质疑记录: 成绩评定依据: 评定项目评分成绩 1)态度认真、学习刻苦、遵守纪律(10 分) 2)查阅资料能力、参考文献充分(10 分) 3)系统设计(包括:实现原理、方案说明、框图流程)(20分) 4)硬件、软件调试结果( 25分) 5)设计说明书规范,层次分明,逻辑清晰(10 分) 6)答辩( 25分) 总分: 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字: 年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1