汇编语言课程设计带显示界面的加法器.pdf
华 北 科 技 学 院课程设计说明书课程名称:汇编语言班级:计算机 B08-1 姓名:_ 顾晓巍 _ _ 学号:_ 200807014106 _ 设计题目:带显示界面的加法器 _设计时间:2010-6-21 至 2010-7-2 指导教师:_ _ 李冬艳 _ 评语:_ _ _ _ _ 评阅成绩:评阅教师:-1-一、课程设计目的进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。二、课程设计要求 1 要求编写并调试通过一个小型软件,实现对软件或硬件的操作。2遵循模块化、结构化的程序设计方法。3.要求程序必须正确。4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。5.要求程序结构合理,语句使用得当。6.适当追求编程技巧和程序运行效率。三、课程设计题目:题目:带显示界面的加法器要求:用汇编语言设计一个加法器,实现加法求和运算。所有数据在菜单界面上输入,输入结果也在菜单上显示,按回车键则退出加法器菜单并返回DOS 系统,否则继续进行加法运算。四、课题分析这个题目是做一个带显示界面的加法器,它的主要难度是做一个显示界面,这就用到了 BIOS的 10 号类型的显示中断功能,主要用到了置光标,以及清屏功能。设计加法器的功能就要考虑到存储器清零和加数的位数问题,输入非数字数据的时候会显示出错并重新输入,这些与普通的设计加法一样,只不过要和置光标功能配合将光标置于合适位置。-2-五、流程图:1、求和的流程图:开始AX BEIJIASHU AX JIASHU+AX将 AX扩展为双字BX 10000 HE AX/BX的商AX AX/BX的余数BX 1000 HE+2AX/BX的商AX AX/BX的余数BX 100 HE+4AX/BX的商AX AX/BX的余数BX 10 HE+6AX/BX的商HE+8AX/BX的余数结束-3-2、输入数字的流程图:开始输入一个字符AL=0DH AL39H N BX 0 AXBX;BX AXAX*10 AXBX;BX AXBXAX+BX结束Y Y N 输 出 错误提示-4-3、存储单元清零的流程图:六、程序源代码:DATAS SEGMENT STR1 DB 0AH,0DH,*STR2 DB 0AH,0DH,*STR3 DB 0AH,0DH,*STR4 DB 0AH,0DH,*1:Enter JiaFaQi *STR5 DB 0AH,0DH,*STR6 DB 0AH,0DH,*other keys exit *STR7 DB 0AH,0DH,*STR8 DB 0AH,0DH,*STR9 DB 0AH,0DH,*STR10 DB 0AH,0DH,*LENGTH1 EQU$-STR1 ;至str1 的字节数STR11 DB Enter Exit,Other keys continue!$STR12 DB Please input again!$ERR DB Error!Please input again!$STR13 DB beijiashu:,$STR14 DB jia shu:,$开始SI-2;CX5 SI+2 HESI 0 CX=0 结束N Y-5-STR15 DB jie guo:,$JIASHU DW?BEIJIASHU DW?HE DW?SHOW MACRO M ;定义宏,显示字符串LEA DX,M MOV AH,9 INT 21H ENDM GUANGBIAO MACRO M1,M2 MOV DH,M1 ;行(Y坐标)MOV DL,M2 ;列(X坐标)MOV BH,0 ;显示页码MOV AH,02 INT 10H ;用文本坐标下,设置光标位置ENDM QINGPING MACRO M1,M2,M3,M4,M5 MOV AH,6 ;向上滚屏MOV AL,M1 ;滚动行数(0-清窗口)MOV BH,0DH ;空白区域的缺省属性MOV CH,M2 ;窗口的左上角位置,Y坐标MOV CL,M3 ;-,X坐标MOV DH,M4 ;窗口的右上角位置,Y坐标MOV DL,M5 ;-,X坐标INT 10H ENDM DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX MOV AL,3 ;80*25 16色文本MOV AH,0 ;设置显示模式为 80*25彩色文本模式INT 10H MOV BP,SEG STR1 ;取段地址MOV ES,BP MOV BP,OFFSET STR1 ;取偏移地址MOV CX,LENGTH1 MOV DX,0-6-MOV BL,09H ;属性(颜色)MOV AL,0 ;光标位置不变(1改变)属性存在 BL中,2和3的属性不在 BL中GUANGBIAO 4,15 MOV AH,13H ;在TELETYPE模式下显示字符串INT 10H MOV AH,1 ;键盘输入并回显INT 21H CMP AL,31H ;输入1进入加法器,输入2结束JNZ LOOP8 GUANGBIAO 8,20 ;确定光标位置(字符串起始位置)SHOW STR13 GUANGBIAO 9,20 SHOW STR14 GUANGBIAO 10,20 SHOW STR15 MOV SI,-2 MOV CX,5 LOOP1:;存储器清零 ADD SI,2 MOV HESI,0 LOOP LOOP1 MOV BX,0 LOOP2:;输入被加数 QINGPING 1,8,30,8,50 QINGPING 1,9,30,9,50 QINGPING 1,10,30,10,50 GUANGBIAO 8,30 CALL INPUT MOV BEIJIASHU,BX LOOP3:;输入加数 QINGPING 1,13,18,13,51 QINGPING 1,12,20,12,50 MOV BX,0 GUANGBIAO 9,30 MOV BX,0 CALL INPUT MOV JIASHU,BX LOOP4:GUANGBIAO 10,30 ;相加 MOV AX,BEIJIASHU ADD AX,JIASHU CWD MOV DX,0 ;扩展 并求结果各位数值 MOV BX,10000-7-DIV BX MOV HE,AX MOV AX,DX ;余数给 AX CWD MOV BX,1000 DIV BX MOV HE+2,AX MOV AX,DX CWD MOV BX,100 DIV BX MOV HE+4,AX MOV AX,DX CWD MOV BX,10 DIV BX MOV HE+6,AX MOV HE+8,DX MOV SI,-2 MOV CX,5 LOOP5:ADD SI,2 ;结果输出 MOV DX,HESI ADD DX,30H MOV AH,02 INT 21H LOOP LOOP5 ;每位循环输出LOOP6:GUANGBIAO 13,19 ;退出或继续 SHOW STR11 MOV AH,01 INT 21H CMP AL,0DH ;回车退出 JNE LOOP7 MOV AH,4CH INT 21H LOOP7:QINGPING 1,13,18,13,51 GUANGBIAO 12,21 SHOW STR12 JMP LOOP1 LOOP8:MOV AH,4CH INT 21H-8-ERROR:GUANGBIAO 12,21 SHOW ERR JMP LOOP1 INPUT PROC NEAR ;输入子程序LP1:MOV AH,01 INT 21H CMP AL,0dH ;输入回车输入结束 JE EXIT CMP AL,31H JB ERROR CMP AL,39H JA ERROR ;不是09之间则显示错误 SUB AL,30H CBW XCHG AX,BX MOV CX,10 MUL CX ADD BX,AX JMP LP1 ;跳转直到输入回车EXIT:RET INPUT ENDP CODES ENDS END START 七、结果显示1.开始菜单:-9-2.进入加法器并执行:八、感想、收获及体会这个题目要求是带有显示界面的加法器,刚拿到这个题目觉得就功能来看还算简单,只要实现两个数的加法,关键是界面的处理上有用到BIOS的 10 号类型的显示中断功能,由于在课上没有太多的涉及,让我一时理不清头绪,尤其是弄不懂如何在输入时处理光标的位置,为此我在学校图书馆查阅了相关书籍,也在网上找到了一些有用的资料,对10 号功能有了一定的了解,也知道了在整个程序中如何将这些功能与加法器的基本功能联系在一起。如此一来就对全部的程序有个大致的思路。其余比较关键的就是本程序的细节问题,比如在输入时如何防止程序出错,就是当输入非数字的数据时可以提示使用者出错并使其重新输入。与之相比,两个数的加法比较麻烦的就是数位问题,由于其位数上的限制,如果超出一定的数值就会使结果出现错误,所以我根据结果的位数在显示界面上提示输入 09999的数值,以确保其正确性。这些其实也可以在程序中有所体现,比如可以当结果溢出时可以提示出错,但介于个人能力和时间的问题,我只能做到在显示时给一定的提示,这也是我在这个程序里比较遗憾的部分。通过本次课程设计,我不仅仅对BIOS的 10 号类型的显示中断功能有了更深的了解,我深深体会到了汇编这门课程还有很多技巧等着我们去学习,自己在-10-课堂上所学的知识只是最基础的部分,如果想自己做出更好的程序就需要我们花更多的精力在上面,通过在网上找到的资料,我发现只要可以熟练的运用汇编,我们就可以做出各种有趣或实用的程序,我觉得如果可以运用汇编知识将自己所想的一些创意实现的话,那就是一件非常有意义的事情。可能这也就是我们学这门课程的最终所要达到的目的。