武汉理工大学《微机原理与接口技术》课程设计说明书课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:计算程序初始条件:按下列要求编程:(1)从键盘输入两个四位十六进制数。(2)将这两个数以二进制形式输出,要求输出的0和1颜色交替变化。(3)找出这两个数中的偶数,若有则以十进制输出,若无,输出“NO”。(4)计算这两个数的平方和。(5)数据的输入和结果的输出都要有必要的提示,且提示独占一行。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:1月2日~1月3日:收集资料,方案选择1月4日~1月7日:整体流程,程序细节1月8日~1月10日:调试程序,报告撰写1月10:交设计报告,程序演示,答辩指导教师签名:年月日系主任(或责任教师)签名:年月日微机原理与接口技术课程设计说明书目录摘要..........................................................11任务要求分析................................................22方案比较及认证说明..........................................33系统原理....................................................43.1整体设计原理.....................................................43.2DOS和BIOS部分功能调用说明......................................44硬件及程序设计..............................................64.1硬件说明.........................................................64.2主程序设计.......................................................64.3功能一子程序设计.................................................94.4功能二子程序设计................................................124.5功能三子程序设计................................................144.6功能四子程序设计................................................184.7完成退出程序....................................................205结果分析...................................................216程序调试过程中遇到的问题...................................21心得体会.....................................................22参考文献.....................................................23微机原理与接口技术课程设计说明书1摘要本设计通过调用DOS0AH功能调用实现从键盘上输入两个四位的16进制数,然后通过逻辑移位指令实现16进制数转换成二进制数,再调用BIOS9号功能调用,设置颜色在当前光标位置显示字符,为了判断输入16进制数的奇偶性,主要通过对数值某位操作,实现对数值奇偶性的判断。转换成10进制数则通过算术运算指令DIV实现,输出则通过DOS单字符输出2号功能调用和多字符输出9号功能调用实现。求平方和,通过使用算术运算指令MUL实现求平方,通过算术运算指令ADD实现求和运算,输出也是通过DOS功能调用实现。关键字算术运算指令,逻辑运算指令,字符字符串输出显示,BIOS和DOS功能调用。微机原理与接口技术课程设计说明书2计算程序1任务要求分析本设计要求完成的功能由五部分组成。第一要求从键盘输入两个4位的十六进制数,并在屏幕上显示出来。因此需要思考如何实现十六进制数的输入和输出显示,要理解十六进制数数字和字母再输入和输出上的区别,与十进制数和二进制数输出的区别。第二要求将输入的两个十六进制数转换成二进制数,在屏幕上显示输出,而且输出的二进制数在颜色上交替变化。因此要分析如何实现将十六进制转换成二进制,有哪些方法,选取最佳方法,是直接转换还是间接转换。另外显示字符有颜色上的要求,如何实现。颜色的变化是交替变换的,要了解怎样实现交替变化,也有多种方法实现,应选择最佳方法。第三要求判断这两个已输入的十六进制数的奇偶性,将偶数输出,当没有偶数时要输出提示字符。判断某个数的奇偶性,有多种方法,要选取直接,操作步棸尽量少的方法。输出是有选择性的输出,及条件输出。同样涉及字符和字符串的输出。第四要求计算已输入的两个十六进制数的平方和,并输出显示。首先要实现平方运算,再实现求和运算,平方运算即乘积运算,参与运算的数的位数不同,运算过程也不同。由于显示结果的形式没有要求,所以可以选择十六进制形式输出,这样操作过程简单一些。这里同样涉及字符或字符串的输出。第五要求数据的输入和输出都有必要的提示语句,且独占一行。这里主要要实现在每个功能实现之前显示这些提示语句,是以字符形式输出,还是以字符串形式输出,则要根据提示语句的长度来选择,最后还要设置功能完成后的退出标志。功能要求结构图如图1所示。图1功能要求结构图从键盘输入两个4位十六进制数判断这两个数的奇偶性将偶数输出,没有偶数则输出提示字符将这两个十六进制数转换成二进制数输出,夜色交替变化求这两个数的平方和并输出结果微机原理与接口技术课程设计说明书32方案比较及认证说明1)本设计过程中完成从键盘输入两个十六进制数功能有两种方案可以实现。方案一:调用DOS-21号中断1号和2号功能调用,单字符输入和单字符输出,逐个字符输入输出。方案二:调用DOS-21号中断0AH号功能调用,多字符输入输出。由于要从键盘输入两个四位的十六进制数,为了简化步骤,应选择方案二来实现。2)本设计过程中完成将十六进制数转换成二进制数功能有两种方案可以实现。方案一:取一个十六进制数,先转换成十进制数,再通过除法指令,不断除以2,求余数。方案二:运用逻辑左移或右移位指令,将十六进制数逐位移出,即可转换成二进制数。由实际经验可知,若采用方案一则操作步骤较繁琐,而且算术运算相比较于逻辑移位运算较复杂。而且逻辑移位操作结果更简单,更方便输出处理,因此应选择方案二。为了简化程序,提高程序运行效率,在实际编程过程中应选择最佳方案。微机原理与接口技术课程设计说明书43系统原理3.1整体设计原理由功能流程图可知,功能是顺序实现的。所以整个功能实现可以通过一个主程序调用多个子程序实现。首先通过DOS功能调用显示提示语句,然后调用从键盘输入两个十六进制数的子程序,子程序主要通过DOS单字符输入1号功能调用,单字符输出2号功能调用,多字符输出9号功能调用和过程中4CH号功能调用实现。完成第一个功能后,第二个功能也是通过调用子程序实现,子程序主要是建立在逻辑移位运算符,DOS单字符输入1号功能调用,单字符输出2号功能调用,多字符输出9号功能调用,中4CH号功能调用和BIOS功能调用上实现。第三项功能也是通过调用子程序实现,子程序主要通过对数值某位操作,实现对数值奇偶性的判断,输出则通过DOS单字符输出2号功能调用和多字符输出9号功能调用实现。第四项功能也是调用子程序实现,子程序则是建立在算术运算指令上,实现平方,求和运算,结果通过调用DOS单字符输出2号功能调用实现。整个程序结构,是一个顺序结构。大部分功能实现过程都要引用DOS和BIOS功能调用。3.2DOS和BIOS部分功能调用说明1)DOS功能调用(1)键盘输入一个字符并回显(1号功能)输入参数无,返回结果AL=字符。(2)显示一个字符,光标跟随字符移动(2号功能)DL=待显字符的ASCII码,无返回结果。(3)多个字符输出到屏幕显示(9号功能调用)入口参数:DS:DX=输出字符缓冲区首地址。出口参数:无。该功能对输出字符的个数没有要求,但输出字符串亚奥$结束。微机原理与接口技术课程设计说明书51)BIOS功能调用(1)设置光标位置(2号功能)入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。出口参数:无。根据DX确定了光标位置。(2)在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符数。出口参数:无。(3)读当前光标位置(3号功能)入口参数;AH=3(功能号),BH=页号。出口参数:DH=行号,DL=列号,CX=光标大小。(4)在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符数。出口参数:无。表1彩色文本方式显示属性字节位号76543210属性字节BLRGBIRGB闪烁选择背景颜色前景颜色微机原理与接口技术课程设计说明书64硬件及程序设计4.1硬件说明本设计要求在MF2KP微机原理集成开发环境中调试运行,无其他硬件要求。4.2主程序设计主程序编程思路如下:定义数据段,提示字符或字符串都定义在数据段,在数据段内预留存储空间以备子程序调用过程中占用定义堆栈段,尽量把堆栈预留空间设置大一点,因为子程序调用过程中,要进行大量的反复保存各寄存器内的内容。然后定义代码段,给各个段寄存器分配段。给每个段寄存器指定段地址。然后调用各子程序实现各项功能,在子程调用前设置好相关参数。最后设置一个程序执行完后的退出人际交互命令。主程序流程图如图2所示。图2主程序流程图开始定义数据段堆栈段代码段指定数据段堆栈段代码段段地址调用从键盘输入程序调用将16进制转换成二进制并显示子程序调用判断输入数奇偶性,并显示偶数程序调用求平方和函数结束微机原理与接口技术课程设计说明书7部分主程序如下(完整程序参见附录二):datasegmentXDW?YDW?ZDW?SDW?DISNODB0AH,0DH,'NO$'BUFF3DB0AH,0DH,'SHUCHUERJINZHISHU$'BUFF4DB0AH,0DH,'OUSHUSHIJINZHISHUCHU$'BUFF5DB0AH,0DH,'SHUCHUCHUPINGFANGHE$'BUFF2DB0AH,0DH,'IFYOUWANTTOQUIT,PLEASEPRESSQ/q$'stridb'inputanumber:',0ah,0dh,'$';显示提示文字maxdb5actlendb?stringdb5dup(?)numdw2dup(?);保留输入数值的存储空间dataendsstack1segmentdw256hdup(0);保留堆栈空间stack1endscodesegmentassumeds:data,ss:stack1,cs:codestart:movax,datamovds,axcallinputmovax,nummovnum+2,ax微机原理与接口技术课程设计说明书8movdl,0ah;换行movah,2;单字符输出调用int21hcallinput;调用子程序input;-------------------------------------------十六进制转换成二进制LE