武汉理工大学微机原理课程设计.docx
《武汉理工大学微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《武汉理工大学微机原理课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
武汉理工大学微机原理课程设计
学号:
**************
微机原理及接口技术
上机实习
题目
数制转换课程设计
学院
自动化学院
专业
电气工程及其自动化
班级
电气1206
姓名
周杰
指导教师
李道远
2014
年
12
月
28
日
上机实习任务书
学生姓名:
周杰专业班级:
电气1206班
指导教师:
李道远工作单位:
自动化学院
题目:
代码转换程序设计
初始条件:
完成一个字母或数制之间的转化程序,主程序分别具有3种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“Q”键退出。
1)实现二进制数向十六进制数的转换
2)实现十六进制数向二进制数的转换
3)实现十六进制数向十进制数的转换
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)设计任务及要求分析
(2)方案比较及认证说明
(3)系统原理阐述
(4)硬件设计课题需要说明:
硬件原理,电路图,采用器件的功能说明
(5)软件设计课题需要说明:
软件思想,流程图,源程序及程序注释
(6)调试记录及结果分析
(7)总结
(8)参考资料
(9)附录:
芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图
一、课题需求分析……………………………………………………………………1
二、课程设计分析……………………………………………………………1
1.功能描述……………………………………………………………………1
2.功能模块分析………………………………………………………………2
三、设计方案………………………………………………………3
1.系统流程图……………………………………………………………3
2.子程序模块设计……………………………………………………………4
2.1二进制转换成十六进制模块……………………………………4
2.2十六进制数转换成二进制数模块……………………………4
2.3十六进制数转换成二进制数模块………………………………43.程序详细设计………………………………………………………………4
3.1数据段程序设计………………………………………………4
3.2宏定义体………………………………………………5
3.3代码段程序设计………………………………………………6
3.4二进制转换成十六进制子程序……………………………………7
3.5十六进制数转换成二进制数子程序…………………………………8
3.6十六进制数转换成十进制数子程序…………………………9
4.程序调试结果及分析………………………………………………………10
结束语………………………………………………………………………13
参考文献……………………………………………………………………14
附录……………………………………………………………………15
一、课题需求分析
汇编语言是计算机能够提供给用户使用的最快且最有效的语言,也是能够充分利用计算机所有硬件资源并能直接控制硬件的唯一语言。
用汇编语言编制的程序同机器语言程序一一对应,它的目标代码短,运行速度快,在对程序的时间和空间要求很高的场合,往往需要采用汇编语言。
本程序是用汇编语言编写的字母与进制转换系统,拥有三个子功能。
分别为将二进制转换为十六进制,将十六进制数转换为二进制数和将十六进制数转换为十进制数。
这个课程设计的要求和就是通过一个较大型实用程序的设计与实现,综合运用所学知识,加深理解和掌握。
同时培养学生分析问题和解决问题的能力,以及自学能力。
根据要求我们做的是完成一个字母或数制之间的转化程序,主程序分别具有3种可选择的子功能,按相应的字母(1=>功能1;2=>功能2;3=>功能3;)可分别进入相应的子功能并在屏幕上显示结果。
3种可选择的子功能分别为:
1)实现二进制向十六进制的转换2)实现十六进制数向二进制数的转换3)实现十六进制数向十进制数的转换。
当运行程序后,应该要出现一个主菜单界面,主界面应该要能进入三个子功能界面,即输入1,进入实现二进制向十六进制的转换的子功能界面;输入2,进入十六进制数向二进制数转换的子功能界面;输入3,进入十六进制数向十进制数的转换。
如:
当选中了十六进制向二进制转换的功能后,如果输入的不是十六进制,应要提示输入错误,请重新输入,直到输入正确为止。
显示转换后的二进制后,跳转到主菜单,重新选择子功能。
二、课程设计分析
确定程序功能和功能结构,数据结构,以及用户界面;对各功能模块进行准确的定义,对全局数据变量进行说明和定义;确定各功能模块的原理及算法并画出相应的数据和程序流图。
1.功能描述
本程序共有三个功能,3种可选择的子功能分别为:
1)实现二进制向十六进制的转换2)实现十六进制数向二进制数的转换3)实现十六进制数向十进制数的转换。
输入相应的字符即可分别进入相应的子功能并在屏幕上显示结果。
输入1:
进入实现二进制向十六进制的转换子功能模块。
输入2:
进入实现十六进制数向二进制数转换的子功能模块。
输入3:
进入实现十六进制数向十进制数转换的子功能模块。
如果用户输入1,即进入实现二进制向十六进制转换的子功能模块,二进制到十六进制只需将每四位二进制数转换成对应的十六进制即可。
如果输入的不是四位二进制数,应要提示输入错误,请重新输入,直到输入正确为止。
显示转换后的字十六进制数后,跳转到主菜单,重新选择子功能。
如果用户输入2,即进入实现十六进制向二进制转换的子功能模块,其原理与二进制向十六进制相反。
如果用户输入Z,即进入实现十六进制向十进制转换的子功能模块,十六进制转换为十进制数的主要思想是按权值展开再相加,转换输出后,跳转到主菜单。
2.功能模块分析
本程序主要由四个模块构成。
首先是主界面,将显示本程序拥有的所有的子功能。
然后是三个子功能。
分别拥有将二进制转换为十六进制,将十六进制数转换成二进制数,将十六进制数转换成十进制数的功能。
主菜单:
显示各字母编号所对应的子功能。
二进制转换为十六进制:
当用户输入1编号时,便进入此子功能。
提示输入一个十六位二进制数,如果输入的不是十六位二进制数则提示输入错误,请重新输入。
显示转换后的字母,然后跳转到主菜单。
十六进制数转换成二进制数:
当用户输入2编号时,便进入此子功能。
提示输入一个十六进制数,输出之后跳转到主菜单。
十六进制数转换成十进制数:
当用户输入3编号时,便进入此子功能。
提示输入一个十六进制数,十六进制数转换成十进制的主要思想是,按权值展开再相加。
首先是将输入的字符转换成相应的数字,通过设置相应的变量,依次进行累乘,直到十六进制数位数全部循环完毕,将每一位所得的数保存在寄存器中,每进行一次就实现一次求和运算。
最后将转换成的十进制数输出,跳转到主菜单。
三、设计方案
1.系统流程图
图1程序流程图
2.子程序模块设计
(1)二进制转换成十六进制模块
当用户选择编号1,便选中了这一个子功能。
通过判断标识符,程序跳转到标识符所在的位置。
根据提示输入一个四位二进制数,会有一个判断输入是否合法的过程,若输入的是非二进制,则会提示输入错误,请重新输入,直到输入正确为止。
显示转换后的字母,然后跳转到主菜单。
(2)十六进制数转换成二进制数模块
当用户选择编号2,便选中了这一个子功能。
通过判断标识符,程序跳转到标识符所在的位置。
根据提示输入一个十六进制数。
具体过程与二进制到十六进制相反。
然后跳转到主菜单。
(3)十六进制数转换成十进制数模块
当用户选择编号Z,便选择了这一个子功能。
通过判断标识符,程序跳转到标识符所在的位置。
根据提示输入一个十六进制数,此时会进行判断,若是输入字符串不符合十六进制数的要求,则提示输入错误,重新输入,直到输入正确为止。
十六进制数转换成十进制的主要思想是,按权值展开再相加。
首先是将输入的字符转换成相应的数字,通过设置相应的变量,在最低位上的权值是1,然后依次是16,256……依次进行累乘,直到十六进制数位数全部循环完毕,将每一位所得的数保存在寄存器中,每进行一次就实现一次求和运算。
最后将转换成的十进制数输出,跳转到主菜单。
3.程序详细设计
(1) 数据段程序设计
定义数据段的程序,程序设计如下所示:
DATASEGMENT
SCREEN1DB'1.B
(2)TOH(16)',0AH,0DH
SCREEN2DB'2.H(16)TOB
(2)',0AH,0DH
SCREEN3DB'3.H(16)TOD(10)','$'
BTOHHDB'INPUTANUMBEROFBINARY(0000--1111):
$'
HTOBHDB'INPUTANUMBEROFHEX(0-F):
$'
HTODHDB'INPUTANUMBEROFHEX(0--F):
$'
BUF0DB17
BUF1DB0
BUFDB17DUP('$')
NUMDB0
DATAENDS
DATA SEGMENT
(2)宏定义体
输入宏定义体
INPUTMACRO
MOVAH,1
INT21H
ENDM
控制宏定义体
CRCRMACRO
PUSHAX
PUSHDX
MOVDL,0AH
MOVAH,2
INT21H
MOVDL,0DH
MOVAH,2
INT21H
POPDX
POPAX
ENDM
2、输出宏定义体
WRITESMACROA
LEADX,A
MOVAH,9
INT21H
ENDM
WRITEMACROC
MOVDL,C
MOVAH,2
INT21H
ENDM
(3)代码段程序设计
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
GO:
WRITESSCREEN1
CR
MOVAH,1
INT21H
CMPAL,'Q';检查到输入了'Q'程序退出
JZDONE
CMPAL,'1';检查到输入'1'转如BTOH子程序
JZR1
CMPAL,'2';检查到输入'2'转如HTOB子程序
JZR2
CMPAL,'3';检查到输入'3'转如HTOD子程序
JZR3
JMPDONE
R1:
CALLBTOH
JMPGO
R2:
CALLHTOB
CR
JMPGO
R3:
CALLHTOD
JMPGO
DONE:
MOVAH,4CH
INT21H
(4)二进制转换成十六进制子程序
BTOHPROC
WRITESBTOHH
CR
MOVBL,0
LOOPA:
MOVAH,1
INT21H
CMPAL,13
JZN
CMPAL,30H
JBLOOPA
CMPAL,31H
JALOOPA
ANDAL,0FH
ADDBL,AL
SHLBL,1
JMPLOOPA
N:
CR
SHRBL,1
CMPBL,9
JBNN
ADDBL,7
NN:
ADDBL,30H
WRITEBL
CR
RET
BTOHENDP
(5)十六进制数转换成二进制数子程序
HTOBPROC
WRITESHTOBH
CR
INPUT
CR
SUBAL,30H
CMPAL,9
JNALOOP1
SUBAL,7
LOOP1:
MOVCL,4
SHLAL,CL
MOVCL,4
MOVBL,AL
GG:
SHLBL,1
JCLOP
MOVDL,'0'
JMPLOP1
LOP:
MOVDL,'1'
LOP1:
MOVAH,2
INT21H
LOOPGG
RET
HTOBENDP
(6)十六进制数转换成十进制数子程序
HTODPROC
WRITESHTODH
CR
MOVBX,0
TT:
INPUT
CMPAL,13
JZY1
CMPAL,'9'
JNAY2
SUBAL,7
Y2:
SUBAL,30H
MOVCL,4
MOVAH,0
ADDBX,AX
SHLBX,CL
JMPTT
Y1:
CR
SHRBX,CL
MOVAX,BX
AAA
ADDAX,3030H
MOVBX,AX
WRITEBH
WRITEBL
CR
RET
HTODENDP
CODEENDS
ENDSTART
4.结果调试及分析
1、初始界面
2、输入1提示输入二进制数
3、输入二进制输出十六进制
4、提示输入十六进制
5、输入十六进制输出二进制
6、提示输入十六进制
7、输入十六进制输出十进制
8、输入q按任意键结束
结束语
通过本次课程设计,我对汇编语言有了进一步的了解,对于编写汇编语言程序的能力有了很大的提高,对数制转换的原理有了叫较为清楚的理解,可以解释原来不懂的程序,对应各种寄存器的跳转有了一定的了解,同时认识到由于寄存器的数量有限,我们有时侯不得不进行出栈和入栈了,这样可以解决有时候寄存器不够的情况,对应进一步学习汇编有了一定的推动作用,汇编基础有了一定的提高,这个课程设计让我对汇编重新复习一遍。
在此次课程设计中,我更深层次的了解到了汇编的大部分基本的指令。
经过几个星期的奋战,对代码进行了无数次的改进,在这个过程中,我的分析问题和解决问题的能力有了很大的提高。
在对程序的不断调试中,不断的发现问题,并通过到网上以及图书馆查找相关的资料予以解决,有很大的成就感,提高了自己的自信心。
这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识远远不够,只有把所学的理论知识与实践相结合,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考能力。
经过这次课程设计,我收获颇多,不仅仅是分析问题以及解决问题的能力有了很大的提高,更养成了良好的编程习惯。
这对以后的工作是非常有益的。
在编写代码时,由于代码很多,一个小小的问题都将带来很大的麻烦,所以在编写代码时必须非常认真,这也是一种能力的提高。
当程序调试成功,那一份喜悦是无法用语言来描述的。
不仅从中体会到了编程的乐趣,提高自己的自信心,更增强了自己对于计算机的兴趣,这是非常重要的。
参考文献
【1】《微机原理与接口技术》(第2版),汪吉鹏 主编,高等教育出版社
【2】《微机原理与接口技术》(第2版),周明德主编,蒋本珊人民邮电出版社
【3】《微机原理与接口技术》(第3版),彭虎周佩玲傅忠谦,电子工业出版
【4】《微机原理与接口技术》(第2版),杨立主编,天津大学出版社
【5】《计算机组成原理与汇编语言程序设计》俸远祯,王正智,徐洁等.北京:
电子工业出版社,1999.
【6】《汇编语言程序设计教程洪志全 》罗省贤..北京:
电子工业出版社,2004
附录
程序
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
GO:
WRITESSCREEN1
CR
MOVAH,1
INT21H
CMPAL,'Q';检查到输入了'Q'程序退出
JZDONE
CMPAL,'1';检查到输入'1'转如BTOH子程序
JZR1
CMPAL,'2';检查到输入'2'转如HTOB子程序
JZR2
CMPAL,'3';检查到输入'3'转如HTOD子程序
JZR3
JMPDONE
R1:
CALLBTOH
JMPGO
R2:
CALLHTOB
CR
JMPGO
R3:
CALLHTOD
JMPGO
DONE:
MOVAH,4CH
INT21H
BTOHPROC;二进制转十六进制子程序
WRITESBTOHH
CR
MOVBL,0
LOOPA:
MOVAH,1
INT21H
CMPAL,13
JZN
CMPAL,30H
JBLOOPA
CMPAL,31H
JALOOPA
ANDAL,0FH
ADDBL,AL
SHLBL,1
JMPLOOPA
N:
CR
SHRBL,1
CMPBL,9
JBNN
ADDBL,7
NN:
ADDBL,30H
WRITEBL
CR
RET
BTOHENDP
HTOBPROC;十六进制转二进制子程序
WRITESHTOBH
CR
INPUT
CR
SUBAL,30H
CMPAL,9
JNALOOP1
SUBAL,7
LOOP1:
MOVCL,4
SHLAL,CL
MOVCL,4
MOVBL,AL
GG:
SHLBL,1
JCLOP
MOVDL,'0'
JMPLOP1
LOP:
MOVDL,'1'
LOP1:
MOVAH,2
INT21H
LOOPGG
RET
HTOBENDP
HTODPROC;十六进制转十进制子程序
WRITESHTODH
CR
MOVBX,0
TT:
INPUT
CMPAL,13
JZY1
CMPAL,'9'
JNAY2
SUBAL,7
Y2:
SUBAL,30H
MOVCL,4
MOVAH,0
ADDBX,AX
SHLBX,CL
JMPTT
Y1:
CR
SHRBX,CL
MOVAX,BX
AAA
ADDAX,3030H
MOVBX,AX
WRITEBH
WRITEBL
CR
RET
HTODENDP
CODEENDS
ENDSTART
本科生课程设计成绩评定表
姓名
周杰
性别
男
专业、班级
电气1206班
课程设计题目:
《数制转换程序设计》
课程设计答辩或质疑记录:
问:
使用宏指令有什么优缺点?
答:
宏指令的使用简化了源程序,但并不节省目标程序所占用的内存单元。
每调用一次就把宏指令体展开一次,所以它占用的存储空间与调用次数有关,调用次数越多,占用的存储空间也越大。
问:
子程序在执行时要注意什么?
答:
子程序每调用一次都要先保护断电,通常在程序中还要保护现场;返回时先要恢复现场,然后恢复断点,再返回。
问:
子程序调用与宏指令调用有什么区别?
答:
子程序在执行时,保护断点和现场等操作都增加了额外操作时间,因此执行时间长,速度相对慢,用宏定义和宏调用可以免去执行时间上的这些额外开销,执行时间短,速度相对较快。
成绩评定依据:
序号
1
选题合理,目的明确(10分)
2
设计方案正确,具有可行性、创新性(20分)
3
设计结果(例如:
硬件成果、软件程序)(25分)
4
态度认真、学习刻苦、遵守纪律(15分)
5
设计报告的规范化、参考文献充分(不少于5篇)(10分)
6
答辩(20分)
总分
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日