汇编课程设计报告正文_第1页
汇编课程设计报告正文_第2页
汇编课程设计报告正文_第3页
汇编课程设计报告正文_第4页
汇编课程设计报告正文_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

计网1082 操时力 目录第1章 需求分析11.1 设计题目11.2 设计目的11.3 程序运行环境及开发工具11.3.1 运行环境11.3.2 开发工具11.4 课程设计任务及要求11.4.1 设计任务11.4.2 设计要求1第2章 概要设计22.1 设计思想和原理22.1.1 设计思想22.1.2 设计原理22.2 系统流程图2第3章 详细设计53.1 数据段的设计53.1.1 数据段定义(DATA SEGMENT)53.2 主程序的设计与实现53.3 子程序的设计与实现53.3.1 键盘输入成绩模块53.3.2 冒泡排序模块53.3.3,数据输出模块6第4章 系统调试与操作说明7第5章 设计中存在的问题及解决方法9第6章 总结与体会10参考文献:10附录:源程序12第1章 需求分析1.1 设计题目 成绩分段统计(2)1.2 设计目的在此课程设计中,通过对成绩统计分段程序的设计,来实现键盘输入,排序,输出功能,熟悉常用系统功能调用和常用算法的实现。如01H功能调用,02H功能调用以及BIOS功能调用的09H调用;掌握常用排序算法的汇编实现,如本设计中的冒泡排序算法实现降序排列。汇编语言程序设计课程设计是计算机教学实践基础上的一次重要的大型实验,也是对汇编语言程序设计课程所学理论知识的深化和提高。因此,要求学生能综合应用所学知识,设计与调试出具有实际功能的应用程序,并且在实验的基本技能方面上进行一次全面的训练。培养学生综合运用所学知识独立完成汇编程序课题的能力,使学生能够比较全面巩固和应用课堂中所学的基本理论和程序设计方法,能够比较熟练完成汇编程序的设计和调试。提高学生对工作认真负责,一丝不苟,和在遇到难题时的协同合作的素质,培养学生从资料文献,科学实验中获得知识的能力,初步培养工程意识和创新能力,培养学生勇于探索,严谨推理,实事求是的素质。1.3 程序运行环境及开发工具1.3.1 运行环境Windows xp 操作系统,MASM,Link汇编链接软件1.3.2 开发工具TD Debug,记事本1.4 课程设计任务及要求1.4.1 设计任务从键盘接受15个学生成绩,将15个学生成绩按降序排列,并分别求出最高,最低成绩。1.4.2 设计要求原始数据由键盘输入,存入从HBCJ开始的存储区域,排序后的成绩存入从HBPX开始的存储区域,且将不及格的成绩用红色标注。程序结构中至少包括数据段,代码段,有子程序应用,有系统功能调用。第2章 概要设计2.1 设计思想和原理 2.1.1 设计思想在程序运行时,先显示提示输入的信息,提示输入数据,输入数据后,按回车键,从键盘获取数据并存放在从HBCJ和HBPX开始的存储区域中,并在屏幕上显示出输入的原始数据。用冒泡排序实现HBPX存储区的数据的排序后,会有输出的提示信息,然后输出排完序后HBPX中的数据,在输出排完序的数字的时候,进行判断,并将不及格的分数用红色数字输出,最后显示HBPX存储区域中的最小和最大数并输出。在进行最大最小数判断时可以直接从有序数据存储区域HBPX中读取,首项即为最大数,末项即为最小数。 2.1.2 设计原理在从键盘获取数据时的功能可以通过调用02H的DOS系统功能调用来实现,AL=输入字符;在屏幕上显示提示信息的功能可以通过调用09H的DOS系统功能调用,DS:DX=字符串首址(字符串以”$”结束)。在获取数据并存放到HBPX的存储单元后,通过冒泡排序算法可以实现存储数据的降序排列实现。在实现红色数字输出的功能时可以通过调用09H的BIOS功能调用来实现,09H调用可以在光标处写字符,其中BH=显示页号,CX=字符计数,AL=欲写字符的代码,BL=欲写字符的属性或颜色,在每次进行输出前只需要设置属性寄存器的值就可以按照要求在光标处输出字符。 2.2 系统流程图获取键盘输入并保存数据对获取数据进行冒泡排序键盘输入是否结束?NY对排序结果进行输出结束键盘输入模块数据排序模块数据显示模块开始图2.1 程序模块流程图 SORTN-CX; (CX)-1-CX(CX)-DX; 0-BXHBPXBX-AXAX= HBPXBX+2交换AX,HBPXBX+2的值 AX-HBPXBXAX-HBPXBXBX+2-BXCX-1-CXCX=0?DX-CXCX-1-CXCX=0?返回NNN DOS系统调用获取键盘输入将键盘输入存储到HBCJ是否为空格?IN_PUT返回是否为回车?图 2.2 键盘输入模块 图 2.3 冒泡排序模块OUTPUT读取排序后数据是否到末尾?是否及格?正常输出到屏幕调用bios调用,红色输出NNN返回 图 2.4 字符输出模块第3章 详细设计3.1 数据段的设计 3.1.1 数据段定义(DATA SEGMENT) 中一共定义了8个常量:MESS1、MESS2、MESS3、MESS4里面存放着每个步骤提示信息字符串;HBCJ,HBPX两个存储区域中用于存放排序前和排序后的数据。MAX,MIN中分别用来存放排序后数据选取的最大数和最小数 堆栈段定义(STACK SEGMENT) 代码段定义(CODE SEGMENT)3.2 主程序的设计与实现 主程序main先通过DOS系统功能调用完成提示输入信息的输出,然后调用子程序INPUT来实现通过键盘输入所需数据,并保存在内存单元HBCJ和HBPX中,随后调用SORT 子程序实现对原始数据的降序排列,并把排序后的数据存放在HBPX数据区域中,最后,调用OUTPUT子程序输出排序后的数据,在输出数据的同时判断数据,如果不及格则实现红色数字输出,并从排序后的数据中取出最大数和最小数并在屏幕上输出。3.3 子程序的设计与实现 3.3.1 键盘输入成绩模块 键盘输入成绩由子程序INPUT实现,INPUT主要是用DOS系统功能调用来获取键盘输入的数据: MOV AH,01H ;01H功能调用获取键盘输入 INT 21H ;从键盘读入数据判断输入的数据,从而选择继续输入、保存或者退出输入 CMP AL,0DH ;判断是否为回车键 JZ ENDINPUT ;结束输入 CMP AL,20H ;判断是否为空格 JZ SAVE ;保存数据 SUB AL,30H ;变为10进制数 MOV CL,4 SHL BX,CL ;左移四位.变为BCD码 ADD BL,AL JMP INPUT 3.3.2 冒泡排序模块 对数据的降序排序用冒泡排序算法实现。先用SI存放数据区域HBPX的偏移地址,然后将SI指向的数据传送到AX中,然后将HBPX存储区域的偏移地址SI加2,指向HBPX中的第二个数数,然后从第二个数开始,依次和AX比较,如果大于AX则交换数据,如果小于AX则SI继续加2,在第一轮比较完成后,HBPX第一个数据区域中存放的就是最大的数据,然后第二轮从第二个数开始,先把第二个数放在AX里面,SI指向第三个数,并依次向后进行比较,每次比较大小,如果大就交换数据在进行14轮后,HBPX中存放的就是降序排列的数据。 3.3.3,数据输出模块 在实现红色字符输出时要用到BIOS功能调用,在进行输出前,每次从HBPX中取数,并对数据和60进行比较,如果小于60则跳转另外的分支,该分支调用BIOS的09H功能调用实现红色字符的输出,BIOS的09H功能调用中,BH=显示页号,CX=字符计数,AL=欲写字符的代码,BL=欲写字符的属性或颜色,每次进行输出前,将要输出数字的ASCII码放在AL中,并设置好前景色和背景色后调用09H,就可以将AL中的字符以你设定的颜色输出到屏幕上。 MOV AH,09H MOV AL,DL MOV BH,0 MOV BL,4 MOV CX,1 INT 10H MOV AH,3 INT 10H MOV AH,2 INC DL INT 10H 第4章 系统调试与操作说明在对程序进行编译,发现有错误和警告:1在第二行和第三行没有结束标号, 2.堆栈定义使用了保留字图 4.1 程序编译检查原程序后发现在定义提示信息字符串时忘记加结束符$,并且在定义堆栈段的时候用的系统保留字STACK 图 4.2 程序运行再输入15个需要处理的数据后按回车键: 图 4.3 程序运行结果可以看到输入的数据已经进行了排序,并输出到了屏幕上,排序后的数据中不及格的数据已经用红色标注,并且取出了数据总的最大和最小数也输出到了屏幕上。 第5章 设计中存在的问题及解决方法 在实现完数据键盘输入和排序以后,设计红色字符输出模块的时候,输出的就不是原始数据,不及格的数据显示红色但出现数据显示错误错误。 在仔细分析了键盘输入模块和数据排序模块的代码后,没有发现问题,就把问题初步确定在数据显示模块。于是对模块的出口地址,入口地址,交换数据的寄存器,标志位等进行了仔细的分析:图 5.1 程序调试最后发现在开始数据输出模块的时候,对于模块中用到的寄存器并没有入栈保护,而每次输出后,寄存器中的数据没有还原导致在进行转换输出的时候出现错误。图 5.2 程序运行第6章 总结与体会 刚开始拿到课题感觉很简单,但是实际下笔写的时候,遇到的最大的困难是如何进行键盘输入和保存和排序结果的输出问题,对系统功能调用和BIOS功能调用的使用方法生疏,使得程序设计一度陷入停滞状态,不知如何下手。然后我又重新翻阅了我们的课本,详细学习了常用的系统功能调用和用法,通过对相关内容的学习,我终于对系统功能调用有了详细的认识,在设计程序时也容易了很多。通过这次课程设计,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。 这不是第一次用汇编语言来设计一个小程序,平时做了很多实验,写了很多小程序。但这次是一个综合的程序,平时的很多程序都用到了。历时一周终于完成,其间有不少感触。不少子程序,比如键盘输入程序和排序程序,就是我们平时实验时经常用到的程序,稍加改正,就可以用了,平时的实验也为这次课程设计提供了基础。 在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。不可否认,本程序存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!参考文献:1徐建民,王东,邵艳华 汇编语言程序设计. 第2版. 北京:电子工业出版社2钱晓捷,汇编语言程序设计.第2版. 北京:清华大学出版社 3 杨季文 汇编语言程序设计教程.清华大学出版社 设计者: 操时力 日 期: 2010 年 12 月 31日设计过程中质疑(或答辩)记载:1. 在键盘输入模块中,程序是如何实现将键盘输入转换并保存到BX中?答:在将键盘输入数据保存到BX中的过程中是又两次按键输入组合保存到BX中形成的。例如输入15时,先按下1,程序会先接收1的ASCII码,然后减去0的ASCII码30H得到1的十进制数据,随后会循环左移四位,将1的BCD码表示为高位即为真是数据的十位,当第二次按下5时,程序会接收5的ASCII码,再减去0的ASCII码30H,得到5的十进制BCD,然后加上之前的移位后的1的BCD码,相加就会得到15的BCD码表示,并存放到BX中。2. 如果要在源程序中加上对原始未排序数据的输出,从而能与排序后数据形成对比,应该怎么对源程序进行修改?答:如果想要在屏幕上输出显示原始数据的输出,可以在输出排序后数据之前调用打印子程序对未排序数据进行输出,可以再加上一段程序来单独实现对未排序数据的输出: OUT: MOV BX,HBCJSI CALL PRINT ADD SI,2 DEC CX JNZ OUT JMP SORT 指导教师评语:评分:签名:年 月 日附录:源程序STACK SEGMENT STACK ;堆栈段定义STK DB 200 DUP(0) STACK ENDS DATA SEGMENT ;数据段定义MESS1 DB Please input 15 students score :$MESS2 DB The result of ranking is:$MESS3 DB 0DH,0AH,The MAX number is: ,$MESS4 DB 0DH,0AH,The MIN number is: ,$HBCJ DW 15 DUP(0) ;分配存放空间HBPX DW 15 DUP(0) ;分配存放空间MAX DW 0MIN DW 0DATA ENDS CODE SEGMENT ;代码段MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV DX,OFFSET MESS1 ;显示提示输入 MOV AH,09H INT 21H XOR BX,BX ;寄存器清零 XOR CX,CX XOR SI,SI XOR DI,DI INPUT: MOV AH,1 INT 21H ;从键盘读入数据 CMP AL,0DH ;是否为回车键 JZ ENDINPUT CMP AL,20H ;是否为空格 JZ SAVE SUB AL,30H ;变为真数 MOV CL,4 SHL BX,CL ;左移四位.变为BCD码 ADD BL,AL JMP INPUT SAVE: MOV HBPXSI,BX ;保存到HBCJ中 ADD SI,2 INC DI XOR BX,BX JMP INPUT ENDINPUT: MOV HBPXSI,BX ;保存最后一个数据 INC DI MOV DL,0AH MOV AH,02H INT 21H MOV DX,OFFSET MESS2 ;显示输出提示 MOV AH,09H INT 21H MOV CX,DI PUSH DI DEC CX XOR BX,BX SUB SI,SI ;SI清零 MOV DX,CX PUSH CX XOR DI,DI ;DI清零 COPY: MOV AX, HBPXSI MOV HBCJDI ,AX ADD SI,2 ADD DI,2 LOOP COPY SUB SI,SI ;SI清零 SUB DI,DI ;DI清零 POP CXSORT: MOV AX, HBPXSI ;起泡排序 CMP HBPXSI + 2, AX JNC TEMP ADD SI,2 DEC DX JNZ SORT JMP SSS TEMP: XCHG AX, HBPXSI + 2;交换位置 MOV HBPXSI,AX ADD SI,2 DEC DX JNZ SORT JMP SSS SSS: MOV DX,CX ;外循环 SUB SI,SI DEC CX JNZ SORT POP DI JMP OUT_PUT OUT_PUT: MOV BX, HBPXSI CALL PRINT ;打印输出 ADD SI,2 DEC DI JNZ OUT_PUT JMP OUT_RESULT OUT_RESULT: MOV DX,OFFSET MESS4 ;显示输出MIN MOV AH,09H INT 21H MOV BX, HBPXSI-2 CALL

温馨提示

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

评论

0/150

提交评论