汇编程序读入一个文本文件并以DEBUG中的D命令格式显示_第1页
汇编程序读入一个文本文件并以DEBUG中的D命令格式显示_第2页
汇编程序读入一个文本文件并以DEBUG中的D命令格式显示_第3页
汇编程序读入一个文本文件并以DEBUG中的D命令格式显示_第4页
汇编程序读入一个文本文件并以DEBUG中的D命令格式显示_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录1. 题目12. 程序总体设计方案、思路13. 程序设计框图34. 源程序清单115. 程序调试结果及分析186. 设计总结216.1问题216.2心得21湖南工程学院课程设计报告1. 题目读入一个文本文件并以DEBUG中的D命令格式显示2. 程序总体设计方案、思路本程序是读入一个文本文件并以DEBUG中的D命令格式显示。 操作环境是32位的windows XP系统,使用CmasmW软件(本人使用Masm软件,操作环境是64位WINDOWS 7)进行汇编。本程序要求以DEBUG中的D命令格式显示一个文本文件,文件名从键盘键入,大体思路为打开相应文件,读文件至程序缓冲区,并按照要求显示,以

2、下是我本次课程设计的详细方案、思路:本程序要求用D命令格式显示内容,使用DEBUG中的D命令格式显示一个文本文件时,显示寄存器中的内容大致为:段地址、偏移地址、ASCII码部分(每个字节的值都用ASCII码表示)和字符显示部分(将ASCII码转化为字符显示),每个非打印字符(无效的字符)在显示时用“.”表示,每行显示16个字节的内容,第8个字节和第9个字节之间有一个连接字符“-”。每个显示行从16字节的边界上开始。程序主要由两大块组成,第一块是文件的获取,包括键入、打开、读取和关闭,其中主要涉及基本DOS系统功能调用指令的使用。第二块是文件的显示,包括段地址、偏移地址、以及读取的文件内容(AS

3、CII码及对应的符号),其中就涉及到多次转移和循环,需要多个子程序的支持才能实现(注意子程序要进行存储保护和恢复)。程序开始之前,首先在DATA SEGMENT数据段中定义BUF1用来存储读取的文件,用BUF来存储文件名的最大字符缓冲以及实际输入的字符个数,通过相连的FILE来保存实际输入的文件名,HANDLE的作用是在成功打开文件后保存文件代号,ERROR_MESSAGE和MESSAGE分别是提示语句,用来提示错误和键入值。第一大块(文件的获取)的内容主要依靠基本的键盘键入以及文件存储实现:1. 首先要键盘输入需要显示内容的文件名,通过0A号功能键入一个文件名到缓冲区,用BUF来存放缓冲区最

4、大字符数和实际输入的文件名的长度,其中并不存放文件名,真正的文件名用FILE来存放,输入完以后在FILE末给“0”(MOV指令)以结束并确认输入,文件名键入完成;2. 键入完成后,打开文件,通过3D号功能打开文件,需要先将AL置0以选择读功能(AL=1为写,2为读/写),将FILE文件名首地址给DX以读取文件名,如果打开失败则显示错误,AX=错误码,如果成功则AX=文件代号,文件代号需要通过第三方保存,因为在后续操作需要使用,进入下一步;3. 通过3F号功能读取文件,调用参数BX=文件代号,CX=读取字节数,用BUF1读取文件的内容,如果读取文件失败,则显示错误,AX=错误码,如果成功读取文件

5、,则文件保存在BUF1中,AX=实际读入的字节数;4. 将HANDLE中所存的文件代号给BX,通过3E号功能完成文件关闭功能,如果程序到此都没有发生错误,则运行成功,进入下一个阶段,如失败,则提示错误,AX=错误码。第二大块功能主要是通过循环、转移、比较等来实现最终显示:1. 由于D命令格式显示有其特殊的要求(上文已经提及),所以在设计时也应该考虑在内,本程序设置256个字符,每行显示16个字节,共16行,这里可以用到loop循环16次,每一次显示一行内容;2. 显示段地址,调用子程序显示段地址,将DATA段的地址给BX,通过4次循环(一次左移4位)依次读出4个4位二进制数,用4位16进制表示

6、,具体规则是,将每次循环到低位的数和0FH相与,只留下最低4位,让其与30H相加,如果小于3AH,说明是0-9之间的数,由16进制的规则可知他们都可以直接显示,如果大于等于3A,则要将其加7(如A 对应10,加30H后为3A,加7后为41H,为A对应的ASCII码),经过循环后,可以将段地址显示,段地址和偏移地址间要加“:”号;3. 显示偏移地址,用DI作为偏移量,初始化为0,将BUFDI的地址给BX,以显示段地址的方式将偏移地址显示出,然后显示一个空格;4. 前8个对应字符ASCII码的显示,因为D命令格式要求8个字符中间要加一个“-”号,所以在程序编写时要分两次进行,中间加上“-”号。通过

7、8次循环来依次显示前8个字节,通过BUF1DI依次读取BUF1中的内容,DI初始为0;5. 后8个对应字符ASCII码的显示原理与第4步相同,在此不进行过多阐述;6. 显示ASCII码对应的字符,由于之前DI已经增到16,但我们需要重新开始读取BUF1,以此来显示改行最开始的字符,所以要先将DI减16,回到每一行的最初位置,再通过16次循环将每行16个字节显示出来,这里要注意D命令格式的要求,每个非打印字符在显示的ASCII部分由“.”表示;7. 每一行显示完毕以后,由于会执行POP DI的操作,所以DI=16的值会被清楚,在进行显示下一行时,先要人为将DI加16,使当前地址指向BUF1的第1

8、6个位置,而不是重新开始,经过16次循环后,256个字节将全部显示出来。3. 程序设计框图(1) 第一块设计框图:关于文件获取,包括键入、打开、读取以及关闭。开始0A号功能键入文件名3D号功能打开文件打开成功?(CF=0?)发生错误 N YHANDLE=文件代号BX=文件代号CX=字节数3F号功能读取文件读取成功?(CF=0?) N发生错误 YBX=文件代号3E号功能关闭文件结束图3.1 文件获取表3-1文件获取中使用的DOS系统功能调用表功能调用参数返回参数0A 键盘输入到缓冲区DS:DX=缓冲区首址(DS:DX)=缓冲区最大字符数(DS:DX+1)=实际输入的字符数3D打开文件DS:DX=

9、ASCIZ串地址AL=访问和文件共享方式0=读 1=写 2=读/写成功:AX=文件代号失败:AX=错误码3E 关闭文件BX=文件代号失败:AX=错误码3F 读文件或设备DS:DX=数据缓冲区地址BX=文件代号CX=读取的字节数成功:AX=实际写入的字节数 AX=0已到文件失败:AX=错误码该表中详细列举了文件获取中需要使用的一些DOS系统调用功能,调用参数可以看作功能使用所需要的前提条件,返回参数是运行后的一个返回值,在程序设计中要注意每一个功能使用之前必须将调用参数配置好,否则会出现错误。表3-2文件获取中的主要子函数及功能表子函数功能IN_FINAME用于文件名的键入OPENF用于文件内容

10、的获取文件名的键入要注意哪个寄存器存字符数,哪个寄存器存储真正的文件名,以及键入完成后需要进行的操作,文件的获取要注意表3-1中的条件。(2) 第二块设计框图:关于段地址、偏移地址、16个ASCII码、16个字节的显示()总体设计:开始设置循环次数(行数)CX=16设置(地址移动)DI=0PUSH DI依次显示该行的段地址、偏移地址、16个ASCII码以及16个字节显示换行 POP DI将DI加16接上一行读取 NCX=0? Y结束图3.2 总体设计()段地址显示:开始MOV BX,DATA(段地址)CH=4 循环次数CL=4 位移位数将BX高四位移至低四位并取出加30H判断是十六进制数字还是

11、字母,是数字? N加7 Y显示CH=CH-1 CH0? Y N结束图3.3 段地址显示()偏移地址显示:开始LEA BX,BUF1DI(偏移地址)CH=4 循环次数CL=4 位移位数将BX高四位移至低四位并取出加30H判断是十六进制数字还是字母,是数字? N加7 Y显示CH=CH-1 CH0? Y N结束图3.4 偏移地址显示()ASCII码显示(一次显示八个字节,调用两次):开始SI=0MOV BL,BUF1DICH=2 循环次数CL=4 位移位数将BL高四位移至低四位并取出加30H判断是十六进制数字还是字母,是数字? N加7 Y显示CH=CH-1 CH0? Y NINC DI INC SI

12、 SI=8?空格 N Y结束图3.5 ASCII码显示()字符显示:开始SI=0 DI=DI-16MOV DL,BUF1DIDL20H? Y N显示字符显示“.”INC DI INC SISI=16? N Y结束图3.6 字符显示表3-3文件显示中的主要子函数及功能表子函数功能DISPLAYD命令显示子程序,是对显示的各部分的总体控制,其内部分为段地址显示、偏移地址显示、ASCII码显示、字符显示DISP2显示段地址和偏移地址,0-9以30H-39H显示,如果是A-Z,则将其内容加7,以41H-5AH显示ASCII显示每一行16个字节的ASCII码ELEMENT显示每一行ASCII码对应的实际

13、字符,有效字符按照对应ASCII码显示,无效字符用“.”表示显示文件内容时要注意D命令格式的排版,必须要按照严格的要求和顺序进行,同时对相应地址内容的读取也要做到心中有数,否则很容易造成地址不清楚而导致读取内容错误。4. 源程序清单DATA SEGMENT BUF1 DB 256 DUP( ? ) ;存放文件内容 BUF DB 10,? ;第一个为缓冲区最大字符数 第二个为实际输入的字符数 FILE DB 10 DUP( ? ) ;FILE来存储实际的内容 HANDLE DW ? ERROR_MESSAGE DB 0AH,ERROR!,$ MESSAGE DB Please input the

14、 filename:,0DH,0AH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA DX,MESSAGE MOV AH,9 INT 21H CALL IN_FINAME CALL OPENF MOV CX,16 MOV DI,0 FLAG: CALL DISPLAY ADD DI,16 loop FLAG MOV AH,1 INT 21H MOV AX,4C00H INT 21HIN_FINAME PROC NEAR ;键盘输入子程序设计 LEA DX, BUF MOV AH,0AH

15、INT 21H MOV BL, BUF+1 MOV BH, 0 MOV FILEBX, 0 RETIN_FINAME ENDPOPENF PROC NEAR ;打开文件子程序设计 PUSH AX PUSH BX push CX MOV DX, OFFSET FILE ;将文件名首地址给DX MOV AL,0 ;AL置0 读模式 MOV AH,3DH ;打开文件 INT 21H JC ERROR ;CF=1失败 MOV HANDLE, AX ;成功则文件代号 MOV BX,AX ;读文件的文件代号 MOV CX,256 ;读取字节数 MOV DX,OFFSET BUF1 ;BUF1首地址给DX,

16、文件内容 MOV AH, 3FH ;读文件 INT 21H JC ERROR ;CF=1失败 MOV BX,AX MOV BUF1BX,0 ;成功则送结尾标志 MOV BX, HANDLE ;将文件代号给BX MOV AH, 3EH ;关闭文件 INT 21H JNC END1 ;CF=0ERROR:MOV DX,OFFSET ERROR_MESSAGE MOV AH,9 INT 21HEND1: POP CX POP BX POP AX RETOPENF ENDP DISPLAY PROC NEAR ;D命令显示子程序设计 PUSH DI MOV BX,DATA CALL DISP2 ;显示

17、段地址 MOV AH,2 MOV DL,: INT 21H LEA BX,BUF1DI ;显示偏移地址 call DISP2 MOV AH,2 MOV DL,20H INT 21H CALL ASCII ;前面8个H MOV DL,- MOV AH,2 INT 21H CALL ASCII ;后面8个H MOV AH,2 MOV DL,20H INT 21H SUB DI,16 CALL ELEMENT MOV AH,2 MOV DL,0AH INT 21H POP DI RETDISPLAY ENDPDISP2 PROC NEAR PUSH AX PUSH CX PUSH DX MOV CH

18、,4 ;循环次数REP2: MOV CL,4 ;位移位数 ROL BX,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,3AH JL PRIN2 ADD DL,7PRIN2: MOV AH,2 INT 21H DEC CH JNZ REP2 POP DX POP CX POP AX RET ;循环四次,把BX中的内容从高位到低位显示DISP2 ENDP ASCII PROC NEAR PUSH AX PUSH CX PUSH DX MOV SI,0 ASCII1: MOV BL,BUF1DI ;把目前所指存入BL CALL DISP1 INC DI INC

19、SI CMP SI,8 JE EXIT1 MOV AH,2 MOV DL,20H INT 21H JMP ASCII1EXIT1: POP DX POP CX POP AX RET ASCII ENDPDISP1 PROC NEAR PUSH AX PUSH CX PUSH DX MOV CH,2REP1: MOV CL,4 ROL BL,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,3AH JL PRIN1 ADD DL,7PRIN1: MOV AH,2 INT 21H DEC CH JNZ REP1 POP DX POP CX pop AX RETDISP1 ENDP ELEMENT PROC NEAR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论