




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学微机原理与接口技术课程设计说明书学 号: 0121210340612 微机原理及接口技术课程设计题 目计算小程序学 院自动化学院专 业电气工程及其自动化班 级电气1201姓 名朱谦指导教师石云2015年1月9日武汉理工大学微机原理与接口技术课程设计说明书课程设计任务书学生姓名:朱谦 专业班级:电气1201指导教师:石云 工作单位:自动化学院题 目: 计算程序 初始条件:按下列要求编程:(1)从键盘输入两个四位十六进制数。(2)将这两个数以二进制形式输出。(3)找出这两个数中的偶数,若有则以十进制输出,若无,输出“no”。(4)计算这两个数的平方和。(5)数据的输入和结果的输出都要有
2、必要的提示,且提示独占一行。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述(4) 硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6) 调试记录及结果分析(7) 总结(8) 参考资料(9) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图武汉理工大学微机原理与接口技术课程设计说明书 目录摘要11任务要求分析22方案比较及认证说明33系统原理43.1整体设计原理43.2 dos功能和bios功能调用说明4
3、4硬件及程序设计64.1硬件说明64.2主程序设计64.3功能一子程序设计94.4功能二子程序设计124.5功能三子程序设计144.6功能四子程序设计184.7完成退出程序205结果分析21 6程序调试过程中遇到的问题21心得体会22参考文献23附录(源程序)24课程设计成绩评定表38摘要 本设计通过调用dos0ah功能调用实现从键盘上输入两个四位的16进制数,然后通过逻辑移位指令实现16进制数转换成二进制数,为了判断输入16进制数的奇偶性,主要通过对数值某位操作,实现对数值奇偶性的判断。转换成10进制数则通过算术运算指令div实现,输出则通过dos单字符输出2号功能调用和多字符输出9号功能调
4、用实现。求平方和,通过使用算术运算指令mul实现求平方,通过算术运算指令add实现求和运算,输出也是通过dos功能和bios功能调用实现。关键字 算术运算指令,逻辑运算指令,字符字符串输出显示,dos功能调用。 1 计算程序1任务要求分析 本设计要求完成的功能由五部分组成。第一要求从键盘输入两个4位的十六进制数,并在屏幕上显示出来。因此需要思考如何实现十六进制数的输入和输出显示,要理解十六进制数数字和字母再输入和输出上的区别,与十进制数和二进制数输出的区别。 第二要求将输入的两个十六进制数转换成二进制数,在屏幕上显示输出。因此要分析如何实现将十六进制转换成二进制,有哪些方法,选取最佳方法,是直
5、接转换还是间接转换。 第三要求判断这两个已输入的十六进制数的奇偶性,将偶数输出,当没有偶数时要输出提示字符。判断某个数的奇偶性,有多种方法,要选取直接,操作步棸尽量少的方法。输出是有选择性的输出,及条件输出。同样涉及字符和字符串的输出。 第四要求计算已输入的两个十六进制数的平方和,并输出显示。首先要实现平方运算,再实现求和运算,平方运算即乘积运算,参与运算的数的位数不同,运算过程也不同。由于显示结果的形式没有要求,所以可以选择十六进制形式输出,这样操作过程简单一些。这里同样涉及字符或字符串的输出。 第五要求数据的输入和输出都有必要的提示语句,且独占一行。这里主要要实现在每个功能实现之前显示这些
6、提示语句,是以字符形式输出,还是以字符串形式输出,则要根据提示语句的长度来选择,最后还要设置功能完成后的退出标志。 功能要求结构图如图1所示。从键盘输入两个4位十六进制数判断这两个数的奇偶性将偶数输出,没有偶数则输出提示字符将这两个十六进制数转换成二进制数输出求这两个数的平方和并输出结果 图1 功能要求结构图2方案比较及认证说明 1)本设计过程中完成从键盘输入两个十六进制数功能有两种方案可以实现。方案一:调用dos-21号中断1号和2号功能调用,单字符输入和单字符输出,逐个字符输入输出。方案二:调用dos-21号中断0ah号功能调用,多字符输入输出。由于要从键盘输入两个四位的十六进制数,为了简
7、化步骤,应选择方案二来实现。 2)本设计过程中完成将十六进制数转换成二进制数功能有两种方案可以实现。方案一:取一个十六进制数,先转换成十进制数,再通过除法指令,不断除以2,求余数。方案二:运用逻辑左移或右移位指令,将十六进制数逐位移出,即可转换成二进制数。由实际经验可知,若采用方案一则操作步骤较繁琐,而且算术运算相比较于逻辑移位运算较复杂。而且逻辑移位操作结果更简单,更方便输出处理,因此应选择方案二。为了简化程序,提高程序运行效率,在实际编程过程中应选择最佳方案。3系统原理 3.1整体设计原理 由功能流程图可知,功能是顺序实现的。所以整个功能实现可以通过一个主程序调用多个子程序实现。首先通过d
8、os功能调用显示提示语句,然后调用从键盘输入两个十六进制数的子程序,子程序主要通过dos 单字符输入1号功能调用,单字符输出2号功能调用,多字符输出9号功能调用和过程中4ch号功能调用实现。完成第一个功能后,第二个功能也是通过调用子程序实现,子程序主要是建立在逻辑移位运算符,dos 单字符输入1号功能调用,单字符输出2号功能调用,多字符输出9号功能调用,中4ch号功能调用和bios功能调用上实现。第三项功能也是通过调用子程序实现,子程序主要通过对数值某位操作,实现对数值奇偶性的判断,输出则通过dos单字符输出2号功能调用和多字符输出9号功能调用实现。第四项功能也是调用子程序实现,子程序则是建立
9、在算术运算指令上,实现平方,求和运算,结果通过调用dos单字符输出2号功能调用实现。整个程序结构,是一个顺序结构。大部分功能实现过程都要引用dos和bios功能调用。3.2 dos和bios部分功能调用说明 1)dos功能调用 (1)键盘输入一个字符并回显(1号功能) 输入参数无,返回结果al字符。 (2)显示一个字符,光标跟随字符移动(2号功能) dl=待显字符的ascii码,无返回结果。 (3)多个字符输出到屏幕显示(9号功能调用) 入口参数:ds:dx=输出字符缓冲区首地址。 出口参数:无。 该功能对输出字符的个数没有要求,但输出字符串$结束。 2)bios功能调用 (1) 设置光标位置
10、(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=写入字符数。出口参数:无。 4硬件及程序设计4.1硬件说明 本设计要求在
11、mf2kp微机原理集成开发环境中调试运行,无其他硬件要求。4.2主程序设计主程序编程思路如下:定义数据段,提示字符或字符串都定义在数据段,在数据段内预留存储空间以备子程序调用过程中占用定义堆栈段,尽量把堆栈预留空间设置大一点,因为子程序调用过程中,要进行大量的反复保存各寄存器内的内容。然后定义代码段,给各个段寄存器分配段。给每个段寄存器指定段地址。然后调用各子程序实现各项功能,在子程调用前设置好相关参数。最后设置一个程序执行完后的退出人际交互命令。主程序流程图如图2所示。 图2 主程序流程图 部分主程序如下(完整程序参见附录二): data segment x dw ? y dw ? z dw
12、 ? s dw ? disno db 0ah,0dh,'no$' buff3 db 0ah,0dh,'shuchu er jin zhi shu$' buff4 db 0ah,0dh,'ou shu shi jin zhi shu chu$' buff5 db 0ah,0dh,'shuchu chu ping fang he$' buff2 db 0ah,0dh,'if you want to quit,please press q/q$' stri db 'input a number :',0a
13、h,0dh,'$' ;显示提示文字 max db 5 actlen db ? string db 5 dup(?) num dw 2 dup(?) ;保留输入数值的存储空间 data ends stack1 segment dw 256h dup(0) ;保留堆栈空间 stack1 ends code segment assume ds:data,ss:stack1,cs:code start: mov ax,data mov ds,ax call input mov ax,num mov num+2,ax mov dl,0ah ;换行 mov ah,2 ;单字符输出调用 in
14、t 21h call input ;调用子程序input ;-十六进制转换成二进制 lea dx,buff3 ;显示提示语句 mov ah,9 int 21h mov dl,0ah ;换行 mov ah,2 ;单字符输出调用 int 21h mov dl,0dh ;换行 mov ah,2 ;单字符输出调用 int 21h mov bx ,num ;转换显示第一个数 mov cx,8 xor dx,dx mov dh,5 call hee12r mov bx ,num+2 ;转换显示第二个数 mov cx,8 xor dx,dx mov dh,6 call hee12r . . code end
15、s end start 4.3功能一子程序设计输入两个十六进制数编程思路:通过dos 09h号功能调用显示提示语句字符串input-input a nummber。当从屏幕手动输入一个字符时,程序要首先要确定输入的数字是否合法,即输入的数字是否在09,af和af之间。输入的数字合法时则保留在显示在屏幕上,若不合法则提示从新输入一个数值,直到正确输入为止。由于要输入两个数,所以需要调用两次input子程序。对于合法字符,若是在09之间,则将其加30h,转换成对应的ascii码值,调用dos单个字符输出显示2号功能调用,显示该数值。当输入数值在af则将其加37h转换成对应的ascii码值,当输入数
16、值在af则将其加37h转换成对应的ascii码值,然后调用dos单个字符输出显示2号功能调用,显示该数值。输入一个数后,回车换行,重复上述过程,执行完后返回主程序。 该子程序程序流程图如图3所示: 图3 输入十六进制数子程序流程图 输入十六进制数子程序部分程序如下: . . mov dx,offset stri ;显示字符串 mov ah,9h ;多字符显示输出调用 int 21h lea dx,max mov ah,0ah int 21h ;调用dos中断输入一个四位十六进制 lea si,string ;取字符串首址 mov cx,4 xor dx,dx ;将dx清零 get: push
17、cx mov al,si ;取一个字符 cmp al,'0' jb return cmp al,'f' ;检查输入的字符是否在0f之间 ja xiaoxie ;否,返回 xiaoxie: cmp al,'f' ja return cmp al,'9' ;转换为对应的数字 jbe deci cmp al,'a' jb daxie ;值为a-f先减7,再减30 sub al ,20h ;值为a-f先减20,再减37 daxie: sub al,07h deci: sub al,30h cbw or dx,ax mov
18、bx,dx and bx,0f000h jnz nos mov cl,4 shl dx,cl nos: inc si pop cx loop get . . 输入十六进制数子程序运行结果如图4所示。 图4 输入十六进制数子程序运行结果4.4功能二子程序设计 对于十六进制数转换成二进制数,可以选择运用位操作指令。每个四位十六进制数对1应16位二进制数。由于要显示的二进制数与十六进制数高低位相对应,所以采用逻辑左移移位指令shl,移出的位进入符号标志位cf,然后将,利用带进位加法将cf中的值移入到ah。要显示两个十六进制数,则需要调用两次该子程序。程序流程图如图5所示。 图5 十六进制转换成二进制
19、数程序流程图 子程序部分程序如下: hee12r proc ;-16进制转化成二进制子程序开始 push ax push bx push cx push dx pushf loop1: xor ax,ax shl bx,1 adc ah,0 push bx push cx mov cx,1 ;显示一个字符 mov ah,9 int 10h pop cx mov ah,2 ;设置光标移动 mov bh,0 inc dl int 10h pop bx xor ax,ax shl bx,1 adc ah,0 push bx push cx . . 子程序程序运行结果如图6(输入100eh,204bh
20、)所示。 图6 子程序程序运行结果如4.5功能三子程序设计判断输入两个数的奇偶性,以十进制输出偶数,没有偶数则输出字符no编程思路:从存储空间num中取出这两个数,暂存到寄存器ax,运用test测试指令ax中数值最后一位是0还是1,影响标志位。若cf=0,则该数为偶数,需要输出显示。4位十六进制数最大无符号数为65535,所以通过除法求出输出十进制数的万位,千位,百位,十位和个位,然后将每一位加上30h转换成对应的ascii码,再调用dos单字符输出2号功能调用显示该数值。若cf=1,则说明该数为奇数,bx加1,跳转到取第二个数,进行相同操作。若第二个数也为奇数,则bx再加1。最后判断bx是否
21、等于2,跳转到显示提示字符no,然后返回子程序调用处;若不为2,则返回子程序调用处。子程序流程图如图7所示。 图7 判断奇偶十进制输出偶数子程序流程图 子程序部分程序如下: ;-显示第一个数 . . mov ax,num ;显示10进制数万位 test ax,0001h jnz jishu1 mov dx,0 ;扩展成32位 mov cx ,10000d ;32位除以16位 div cx push dx ;商放在ax,余数放在dx,余数要用先保存起来 mov dx,ax ;除数转移到dx,ascll码要放在dl中 add dl,30h mov ah,2 int 21h pop dx ;弹出余数
22、进行下一步 mov ax,dx ;显示10进制数万位 mov dx,0 ;扩展成32位 mov cx ,1000d ;32位除以16位 div cx push dx ;商放在ax,余数放在dx,余数要用先保存起来 mov dx,ax ;除数转移到dx,ascll码要放在dl中 add dl,30h mov ah,2 int 21h pop dx ;弹出余数进行下一步 mov ax,dx ;显示10进制数千位 mov cl ,100d ;16位除以8位 div cl push ax ;商放在al,余数放在ah,余数要用以16位(栈)先保存起来 mov dl,al ;ascll码要放在dl中 ad
23、d dl,30h ;单字符输出 mov ah,2 int 21h pop ax ;弹出余数进行下一步 当输入两个一个偶数一个奇数时子程序运行结果如图8所示。 如图8 当输入两个一个偶数一个奇数时子程序运行结果 当输入两个奇数(105fh,202h1)时子程序运行结果如图9所示。 图9 当输入两个奇数时子程序运行结果4.6功能四子程序设计求平方和先求每个数的平方,再求和。求平方即求两个相同的十六进制数的乘积。16乘以16位数,结果为32位,mul无符号数相乘目的操作数隐含,把乘数放到ax中与隐含操作数ax相乘。32位的结果默认分开存储,高16默认放在dx中,低6位默认放在ax中。然后再求和。每次
24、显示一位4进制数,需要显示八次 。读取每位十六进制数,与9和f比较,若数值小于9,则将其加30h,若其在a到f之间则将其加37h,转换成相应字符的ascii码值。然后调用dos单字符输出2号功能调用显示该数值。取某位十六进制数时,可以采用逻辑移位的方式,移位次数为四。子程序流程图如图10所示。 图10 求平方和子程序流程图 子程序部分程序如下: . mov ax,num ;第一个数平方 mul num mov x,ax mov y,dd mov ax,num+2 ;第二个数平方 mul num+2 add ax,x ;方便后面ax,dx分开操作 adc dx,y ;平方和 mov s,ax ;
25、复制ax,dx mov z,dx ;结果为zs mov ax,dx ;先显示dx内容 mov bl,ah ;复制ah,放到bl中 mov dl,ah ;显示部分,取结果高八位 mov cl,4 shr dl,cl ;右移4位 cmp dl,9 jbe nextd7 add dl,7h nextd7: add dl,30h mov ah,2 int 21h mov dl,bl and dl,0fh cmp dl,9 ;转成ascll码 jbe nextd8 add dl,7h nextd8: add dl,30h mov ah,2 int 21h . . 当输入100eh,204bh时子程序运行
26、结果如图11所示。 图11 求平方和子程序运行结果4.7完成退出程序 设置按q或q键退出,主要运用比较指令,跳转指令实现,程序如下: lea dx,buff2 ;显示提示语句 mov ah,9 int 21h mov ah,08h int 21h cmp al,'q' je exit cmp al,'q' je exit exit: mov ax,4c00h int 21h 5结果分析 完整程序结果如图12所示。 图12 运行结果 由图12可知程序运行结果满足设计要求。6程序调试过程中遇到的问题 (1)调试过程中出现如下错误: 经分析是由于在使用跳转指令时,使用
27、的时段内直接转移,但跳转的距离超过了该 跳转指令所允许的范围。只要把标号的位置放在,跳转允许范围内即可。 (2)在调试十六进制转换成二进制数时出现如图13所示不正确结果: 图13 十六进制转换成二进制数不正确结果 经过分析发现是由于调用bios9号功能调用时没有设置也是bh的参数,在没有设 置的情况bh的值不确定,所以不能正确显示结果。设置固定参数bh=0即可。 (3)在程序调试过程中,有时候程序执行时过快,没有观察到结果。 经分析发现是由于子程序被放在了主程序代码段中间,只要将子程序全部放在代码 段的最后即可。心得体会 微机原理课程设计是对汇编程序语言的综合运用,既用到了课堂知识又拓展了课外
28、知识。同时课程设计又有一定兴趣,使我们在微机原理课程设计产生了很大的热情,很好地完成了设计任务。 本次设计主要涉及算术运算,逻辑运算,字符操作,dos和bios功能调用。通过对子程序的的设计,进一步熟练掌握了汇编语言程序中的基本指令。每个子程序功能的完成需要多方面功能指令的组合,完成每项功能有多种方法,因此我都要思考如何运用最简单的方法,最短的程序指令来完成任务,让程序更简单易懂,执行起来更有效率。本次设计过程中,整个程序是由多个子程序组成的,而且子程序中涉及很多跳转指令和循环指令。这让我再一次熟练掌握了汇编程序的几种基本组织结构。同时在编程过程中,大量使用了dos和bios功能调用,它们是实
29、现各种程序功能必不可少的一部分,因此我认为有必要掌握好dos和bios的各种功能调用,为自己进一步学习编程打下坚实的基础。 通过实际编程发现,在编写程序时,先画好程序流程图将会使编程思路更清晰,提高编程的效率。在编写程序文本时,在每一行附上必要的注释,尤其是在编写大程序时,将有助于自己进步回查,分析结构功能组合,检查错误,并修改,同时也方便他人阅读。这些过程都有助于我们良好的变成习惯,提高我们的专业能力。 每一次课程设计报告书的撰写就是又一次提高个人专业素养的过程。总之本次课程设计巩固了理论知识,拓展了课外知识和提高个人专业素养。参考文献1 沈美明、温冬婵编著.ibmpc汇编语言程序设计(第二
30、版).北京:清华大学出版 社.20052 索梅、郑甫京、张鹿编著.80386/80286汇编语言程序设计.北京:清华大学出版 社.19943 周佩玲、彭虎、傅忠谦编著.微机原理与接口技术.北京:电子工业出版社.20054 齐志儒、高福祥编著.汇编语言程序设计.沈阳:东北大学出版社.20015 冯萍、史新福编著.汇编语言与接口技术.北京:机械工业出版社.2002 附录一:程序源代码data segment x dw ? y dw ? z dw ? s dw ? disno db 0ah,0dh,'no$' buff3 db 0ah,0dh,'shuchu er jin z
31、hi shu$' buff4 db 0ah,0dh,'ou shu shi jin zhi shu chu$' buff5 db 0ah,0dh,'shuchu chu ping fang he$' buff2 db 0ah,0dh,'if you want to quit,please press q/q$' stri db 'input a number :',0ah,0dh,'$' ;提示文字 max db 5 actlen db ? string db 5 dup(?) num dw 2 dup(?
32、) ;保留输入数值的存储空间data ends stack1 segment dw 256h dup(0) ;保留堆栈空间stack1 ends code segment assume ds:data,ss:stack1,cs:code start: mov ax,data mov ds,ax call input mov ax,num mov num+2,ax mov dl,0ah ;换行 mov ah,2 ;单字符输出调用 int 21h call input ;调用子程序input ;-十六进制转换成二进制 lea dx,buff3 ;显示提示语句 mov ah,9 int 21h mo
33、v dl,0ah ;换行 mov ah,2 ;单字符输出调用 int 21h mov dl,0dh ;换行 mov ah,2 ;单字符输出调用 int 21h mov bx ,num ;转换显示第一个数 mov cx,8 xor dx,dx mov dh,5 call hee12r mov bx ,num+2 ;转换显示第二个数 mov cx,8 xor dx,dx mov dh,6 call hee12r ;-十六进制数中偶数输出 lea dx,buff4 ;显示提示语句 mov ah,9 int 21h mov dl,0ah ;换行 mov ah,2 ;单字符输出调用 int 21h mo
34、v dl,0dh ;换行 mov ah,2 ;单字符输出调用 int 21h mov ax,num ;显示10进制数万位 test ax,0001h jnz jishu1 mov dx,0 ;扩展成32位 mov cx ,10000d ;32位除以16位 div cx push dx ;商放在ax,余数放在dx,余数要用先保存起来 mov dx,ax ;除数转移到dx,ascll码要放在dl中 add dl,30h mov ah,2 int 21h pop dx ;弹出余数进行下一步 mov ax,dx ;显示10进制数万位 mov dx,0 ;扩展成32位 mov cx ,1000d ;32位除以16位 div cx push dx ;商放在ax,余数放在dx,余数要用先保存起来 mov dx,ax ;除数转移到dx,ascll码要放在dl中 add dl,30h mov ah,2 int 21h pop dx ;弹出余数进行下一步
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度技术升级借款合同模板
- 2025如何制定租赁合同范文
- 2025咸宁市园林绿化施工承包合同
- 2025员工与公司协商终止的合同协议
- 2025【村路面硬化工程施工合同】村基础设施提升项目施工合同
- 2025【合同转让协议书】普通商品转让合同范本
- 2025企业技术研发人员劳动合同
- 2025企业间借款的合同协议书
- 2025买卖合同争议解决方法
- 2025版权授权合同协议书范本
- 啤酒采购合同协议书模板
- 中医把脉入门培训课件
- 高血糖症的急救与护理
- 成人失禁性皮炎的预防与护理
- 技术信息收集与分析方法考核试卷
- 义务教育数学课程标准(2024年版)
- 三年级下册面积单位换算练习100道及答案
- DBJ41-T 137-2014 防渗墙质量无损检测技术规程-(高清版)
- 2017版通信工程概预算定额库
- 工程安全质量问题罚款通知单
- 幼儿园其他形式的教育活动课件
评论
0/150
提交评论