您的当前位置:首页正文

武汉理工大学微机原理课程设计

2023-07-23 来源:好走旅游网


学 号: **************

微机原理及接口技术

上机实习

题 目 学 院 专 业 班 级 姓 名 指导教师

数制转换课程设计

自动化学院 电气工程及其自动化

电气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十六进制数转换成二进制数模块………………………………4 3. 程序详细设计………………………………………………………………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

如果用户输入1,即进入实现二进制向十六进制转换的子功能模块,二进制到十六进制只需将每四位二进制数转换成对应的十六进制即可。如果输入的不是四位二进制数,应要提示输入错误,请重新输入,直到输入正确为止。显示转换后的字十六进制数后,跳转到主菜单,重新选择子功能。

如果用户输入2,即进入实现十六进制向二进制转换的子功能模块,其原理与二进制向十六进制相反。

如果用户输入Z,即进入实现十六进制向十进制转换的子功能模块,十六进制转换为十进制数的主要思想是按权值展开再相加,转换输出后,跳转到主菜单。

2.功能模块分析

本程序主要由四个模块构成。首先是主界面,将显示本程序拥有的所有的子功能。然后是三个子功能。分别拥有将二进制转换为十六进制,将十六进制数转换成二进制数,将十六进制数转换成十进制数的功能。 主菜单:显示各字母编号所对应的子功能。

二进制转换为十六进制:当用户输入1编号时,便进入此子功能。提示输入一个十六位二进制数,如果输入的不是十六位二进制数则提示输入错误,请重新输入。显示转换后的字母,然后跳转到主菜单。

十六进制数转换成二进制数:当用户输入2编号时,便进入此子功能。提示输入一个十六进制数,输出之后跳转到主菜单。

十六进制数转换成十进制数:当用户输入3编号时,便进入此子功能。提示输入一个十六进制数,十六进制数转换成十进制的主要思想是,按权值展开再相加。首先是将输入的字符转换成相应的数字,通过设置相应的变量,依次进行累乘,直到十六进制数位数全部循环完毕,将每一位所得的数保存在寄存器中,每进行一次就实现一次求和运算。最后将转换成的十进制数输出,跳转到主菜单。

2

三、设计方案

1.系统流程图

开始显示Menu从键盘输入数字字母No是否为1、2、3或QERRORYes是否为QNoYes退出是否为1YesNo是否为2YesNo是否为3Yes输入2进制数2进制转16进制输入16进制数16进制转2进制输入16进制数16进制转10进制屏幕输出结果 图1 程序流程图

3

2.子程序模块设计

(1)二进制转换成十六进制模块

当用户选择编号1,便选中了这一个子功能。通过判断标识符,程序跳转到标识符所在的位置。根据提示输入一个四位二进制数,会有一个判断输入是否合法的过程,若输入的是非二进制,则会提示输入错误,请重新输入,直到输入正确为止。显示转换后的字母,然后跳转到主菜单。

(2)十六进制数转换成二进制数模块

当用户选择编号2,便选中了这一个子功能。通过判断标识符,程序跳转到标识符所在的位置。根据提示输入一个十六进制数。具体过程与二进制到十六进制相反。然后跳转到主菜单。

(3)十六进制数转换成十进制数模块

当用户选择编号Z,便选择了这一个子功能。通过判断标识符,程序跳转到标识符所在的位置。根据提示输入一个十六进制数,此时会进行判断,若是输入字符串不符合十六进制数的要求,则提示输入错误,重新输入,直到输入正确为止。十六进制数转换成十进制的主要思想是,按权值展开再相加。首先是将输入的字符转换成相应的数字,通过设置相应的变量,在最低位上的权值是1,然后依次是16,256……依次进行累乘,直到十六进制数位数全部循环完毕,将每一位所得的数保存在寄存器中,每进行一次就实现一次求和运算。最后将转换成的十进制数输出,跳转到主菜单。

3.程序详细设计

(1) 数据段程序设计

定义数据段的程序,程序设计如下所示: DATA SEGMENT

SCREEN1 DB '1. B(2) TO H(16)',0AH,0DH SCREEN2 DB '2. H(16) TO B(2)',0AH,0DH SCREEN3 DB '3. H(16) TO D(10)','$'

BTOHH DB 'INPUT A NUMBER OF BINARY(0000--1111):$' HTOBH DB 'INPUT A NUMBER OF HEX(0-F):$' HTODH DB 'INPUT A NUMBER OF HEX(0--F):$' BUF0 DB 17 BUF1 DB 0

4

BUF DB 17 DUP('$') NUM DB 0 DATA ENDS DATA SEGMENT

(2)宏定义体

输入宏定义体 INPUT MACRO MOV AH,1 INT 21H ENDM 控制宏定义体

CR CR MACRO PUSH AX PUSH DX MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H POP DX POP AX ENDM 2、输出宏定义体 WRITES MACRO A LEA DX,A MOV AH,9 INT 21H

5

ENDM WRITE MACRO C MOV DL,C MOV AH,2 INT 21H ENDM

(3)代码段程序设计 CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX GO: WRITES SCREEN1 CR MOV AH,1 INT 21H

CMP AL,'Q' JZ DONE

CMP AL,'1' JZ R1

CMP AL,'2' JZ R2

CMP AL,'3' JZ R3 JMP DONE R1: CALL BTOH JMP GO R2: CALL HTOB CR

;检查到输入了'Q'程序退出 ;检查到输入'1'转如BTOH子程序;检查到输入'2'转如HTOB子程序;检查到输入'3'转如HTOD子程序6

JMP GO R3: CALL HTOD JMP GO DONE: MOV AH,4CH INT 21H

(4)二进制转换成十六进制子程序

BTOH PROC WRITES BTOHH CR MOV BL,0

LOOPA: MOV AH,1 INT 21H CMP AL,13 JZ N

CMP AL,30H JB LOOPA CMP AL,31H JA LOOPA AND AL,0FH ADD BL,AL SHL BL,1 JMP LOOPA N: CR SHR BL,1 CMP BL,9 JB NN ADD BL,7

7

NN: ADD BL,30H WRITE BL CR RET BTOH ENDP

(5)十六进制数转换成二进制数子程序

HTOB PROC WRITES HTOBH CR INPUT CR

SUB AL,30H CMP AL,9 JNA LOOP1 SUB AL,7 LOOP1: MOV CL,4 SHL AL,CL MOV CL,4 MOV BL,AL GG: SHL BL,1 JC LOP MOV DL,'0' JMP LOP1 LOP: MOV DL,'1' LOP1: MOV AH,2 INT 21H LOOP GG

8

RET HTOB ENDP

(6)十六进制数转换成十进制数子程序

HTOD PROC WRITES HTODH CR MOV BX,0 TT: INPUT CMP AL,13 JZ Y1 CMP AL,'9' JNA Y2 SUB AL,7 Y2: SUB AL,30H MOV CL,4 MOV AH,0 ADD BX,AX SHL BX,CL JMP TT Y1: CR SHR BX,CL MOV AX,BX AAA

ADD AX ,3030H MOV BX,AX WRITE BH WRITE BL

9

CR RET HTOD ENDP CODE ENDS END START

4.结果调试及分析

1、初始界面

2、输入1提示输入二进制数

3、输入二进制输出十六进制

10

4、提示输入十六进制

5、输入十六进制输出二进制

6、提示输入十六进制

11

7、输入十六进制输出十进制

8、输入q按任意键结束

12

结束语

通过本次课程设计,我对汇编语言有了进一步的了解,对于编写汇编语言

程序的能力有了很大的提高,对数制转换的原理有了叫较为清楚的理解,可以解释原来不懂的程序,对应各种寄存器的跳转有了一定的了解,同时认识到由于寄存器的数量有限,我们有时侯不得不进行出栈和入栈了,这样可以解决有时候寄存器不够的情况,对应进一步学习汇编有了一定的推动作用,汇编基础有了一定的提高,这个课程设计让我对汇编重新复习一遍。在此次课程设计中,我更深层次的了解到了汇编的大部分基本的指令。经过几个星期的奋战,对代码进行了无数次的改进,在这个过程中,我的分析问题和解决问题的能力有了很大的提高。在对程序的不断调试中,不断的发现问题,并通过到网上以及图书馆查找相关的资料予以解决,有很大的成就感,提高了自己的自信心。

这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识远远不够,只有把所学的理论知识与实践相结合,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考能力。

经过这次课程设计,我收获颇多,不仅仅是分析问题以及解决问题的能力有了很大的提高,更养成了良好的编程习惯。这对以后的工作是非常有益的。 在编写代码时,由于代码很多,一个小小的问题都将带来很大的麻烦,所以在编写代码时必须非常认真,这也是一种能力的提高。

当程序调试成功,那一份喜悦是无法用语言来描述的。不仅从中体会到了编程的乐趣,提高自己的自信心,更增强了自己对于计算机的兴趣,这是非常重要的。

13

参考文献

【1】《微机原理与接口技术》(第2版),汪吉鹏 主编,高等教育出版社 【2】《微机原理与接口技术》(第2版),周明德 主编,蒋本珊 人民邮电出版社 【3】《微机原理与接口技术》(第3版),彭虎 周佩玲 傅忠谦 ,电子工业出版 【4】《微机原理与接口技术》(第2版),杨立 主编,天津大学出版社 【5】《计算机组成原理与汇编语言程序设计》俸远祯,王正智,徐洁等.北京:电子工业出版社,1999.

【6】《汇编语言程序设计教程洪志全 》罗省贤..北京:电子工业出版社,2004

14

附录

程序

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX GO: WRITES SCREEN1 CR MOV AH,1 INT 21H

CMP AL,'Q' JZ DONE

CMP AL,'1' JZ R1

CMP AL,'2' JZ R2

CMP AL,'3' JZ R3 JMP DONE R1: CALL BTOH JMP GO R2: CALL HTOB CR JMP GO

;检查到输入了'Q'程序退出 ;检查到输入'1'转如BTOH子程序;检查到输入'2'转如HTOB子程序;检查到输入'3'转如HTOD子程序15

R3: CALL HTOD JMP GO DONE: MOV AH,4CH INT 21H

BTOH PROC ;二进制转十六进制子程序 WRITES BTOHH CR MOV BL,0

LOOPA: MOV AH,1 INT 21H CMP AL,13 JZ N

CMP AL,30H JB LOOPA CMP AL,31H JA LOOPA AND AL,0FH ADD BL,AL SHL BL,1 JMP LOOPA N: CR SHR BL,1 CMP BL,9 JB NN ADD BL,7 NN: ADD BL,30H WRITE BL CR

16

RET BTOH ENDP

HTOB PROC ;十六进制转二进制子程序 WRITES HTOBH CR INPUT CR

SUB AL,30H CMP AL,9 JNA LOOP1 SUB AL,7 LOOP1: MOV CL,4 SHL AL,CL MOV CL,4 MOV BL,AL GG: SHL BL,1 JC LOP MOV DL,'0' JMP LOP1 LOP: MOV DL,'1' LOP1: MOV AH,2 INT 21H LOOP GG RET HTOB ENDP

HTOD PROC WRITES HTODH

;十六进制转十进制子程序 17

CR MOV BX,0 TT: INPUT CMP AL,13 JZ Y1 CMP AL,'9' JNA Y2 SUB AL,7 Y2: SUB AL,30H MOV CL,4 MOV AH,0 ADD BX,AX SHL BX,CL JMP TT Y1: CR SHR BX,CL MOV AX,BX AAA

ADD AX ,3030H MOV BX,AX WRITE BH WRITE BL CR RET HTOD ENDP CODE ENDS END START

18

本科生课程设计成绩评定表

姓 名 专业、班级 课程设计题目:《数制转换程序设计》 课程设计答辩或质疑记录: 周杰 性 别 电气 1206 班 男 问:使用宏指令有什么优缺点? 答:宏指令的使用简化了源程序,但并不节省目标程序所占用的内存单元。每调用一次就把宏指令体展开一次,所以它占用的存储空间与调用次数有关,调用次数越多,占用的存储空间也越大。 问:子程序在执行时要注意什么? 答:子程序每调用一次都要先保护断电,通常在程序中还要保护现场;返回时先要恢复现场,然后恢复断点,再返回。 问:子程序调用与宏指令调用有什么区别? 答:子程序在执行时,保护断点和现场等操作都增加了额外操作时间,因此执行时间长,速度相对慢,用宏定义和宏调用可以免去执行时间上的这些额外开销,执行时间短,速度相对较快。 成绩评定依据: 序 号 1 2 3 4 5 6 选题合理,目的明确(10分) 设计方案正确,具有可行性、创新性(20分) 设计结果(例如:硬件成果、软件程序)(25分) 态度认真、学习刻苦、遵守纪律(15分) 设计报告的规范化、参考文献充分(不少于5篇)(10分) 答辩(20分) 总 分 最终评定成绩(以优、良、中、及格、不及格评定)

指导教师签字:

年 月 日

19

因篇幅问题不能全部显示,请点此查看更多更全内容