当前位置:文档之家› 微机原理课设数制转换

微机原理课设数制转换

微机原理课设数制转换
微机原理课设数制转换

课程设计任务书

学生:专业班级:

指导教师:工作单位:理工大学

题目:数制转换3

任务容:

通过键盘输入一个8进制数,通过屏幕提示菜单选择转换成2进制,10进制或者16进制数并显示。

要求完成的主要任务:

设计方案的选择与确定:

根据题目要求,参考相关文献资料,选择合适的软硬件设计方案。

图纸绘制:

确定硬件方案,完成完整硬件系统连线图的绘制。

程序编制:

确定软件方案,绘制系统软件流程图,完成汇编程序的编制。

说明书撰写:

完成课程设计说明书的撰写,字数不少于3000字。

时间安排:

资料检索与收集2天

系统方案设计与确定1天

系统设计与程序编写3天

说明书撰写3天

答辩1天

指导教师签名:年月日

系主任(或责任教师)签名:年月日

目录

摘要 .................................................................................................. I

1 原理分析 (2)

2 分析任务及要求 (4)

2.1数制转换算法 (4)

2.1.1 八进制转换成二进制 (4)

2.1.2八进制转换成十进制 (4)

2.1.3八进制转换成十六进制 (4)

3 程序设计流程 (5)

3.1绘制程序流程图 (5)

3.2设计思路 (6)

4 汇编语言源程序设计 (7)

4.1堆栈段和数据段程序设计 (7)

4.2主程序设计 (7)

4.3输入八进制数程序 (9)

4.4输出二进制数程序 (9)

4.5输出十进制数程序 (10)

4.6输出十六进制数程序 (11)

4.7回车键确定程序 (12)

5 结果分析 (13)

6 小结与体会 (16)

参考文献 (17)

附录 (18)

摘要

本次程序设计主要是利用汇编语言中的DOS调用和各种进制间的转换来实现通过键盘输入一个8进制数,在屏幕上提示菜单选择转换成2进制,10进制或者16进制数并显示。

汇编语言是面向机器的程序设计语言。汇编语言比机器语言易于读写、调试和修改,同时也具有执行速度快,占用存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植,本次设计主要是利用8086汇编语言进行设计。

常说汇编语言过时,是低级语言,并不是说汇编语言要被弃之,相反,汇编语言仍然是程序员必须了解的语言,在某些行业与领域,汇编是必不可少的,非它不可适用。只是,现在计算机最大的领域为IT软件,也是我们常说的Windows编程,在熟练的程序员手里,使用汇编语言编写的程序,运行效率与性能比其它语言写的程序时成倍的优秀,但是代价是需要更长的时间来优化,假如是对计算机原理及编程基础不扎实,实在是得不偿失,对比现在的软件开发,已经是市场化的软件行业,加上高级语言的优秀与跨平台,一个公司不可以让一个团队使用汇编语言来编写所有的东西,花几倍甚至是几十倍的时间,不如使用其它语言来完成只要最终结果不比汇编语言编写的差太多,就能抢先一步完成,这是市场经济下得必然结果。

但是,这也并不代表汇编语言是没有用的、不需要学的,相反,只有在理解和掌握汇编语言的基础上,才能更好的使用其它高级语言。

关键词:汇编,汇编语言,机器语言,DOS调用

数制转换课程设计

1原理分析

进位计数制是人们利用符号来计数的方法。一种进位计数制包含一组数码符号和两个基本因素。数码是用不同的数字符号来表示一种数制的数值,这些数字符号称为”数码”。基是数制所使用的数码个数称为”基”。权是某数制每一位所具有的值称为”权”。

十六进制(Hexadecimal) 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F

十进制(Decimal) 0.1.2.3.4.5.6.7.8.9

八进制(Octal) 0.1.2.3.4.5.6.7

二进制(Binary) 0.1

在计算机部采用二进制计数制,但在实际应用中,需要计算机处理的信息是多种多样的,如各种进位制的数据,不同语种的文字符号和各种图像信息等。但在计算机中采用的是二进制计数制。本次课程设计通过所学的微机原理,用汇编语言编写程序,实现二进制转换成十进制或十六进制,十进制转换成二进制或十六进制,十六进制转换成二进制或十进制。

十进制转换为二进制整数部分的方法叫做除2取余法,每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。小数部分的方法叫乘2取整法,就是将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。换句话说就是0舍1入。读数要从前面的整数读到后面的整数。

二进制转换为十进制不分整数和小数部分,方法(按权相加法)是将二进制每位上的数乘以权,然后相加之和即是十进制数。

二进制转换为十六进制用取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,得到的数就是一位十六位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。

将十六进制转换为二进制,取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。

十进制转换成十六进制的方法与十进制转换成二进制的方法相同,但不同的是每次除以16。

2分析任务及要求

题目容:通过键盘输入一个8进制数,通过屏幕提示菜单选择转换成2进制,10进制或者16进制数并显示。

设计要求:根据题目要求,参考相关文献资料,选择合适的软硬件设计方案。

图纸绘制:确定硬件方案,完成完整硬件系统连线图的绘制。

程序编制:确定软件方案,绘制系统软件流程图,完成汇编程序的编制。

通过对题目进行分析,容易看出本次设计可分为3个部分:输入、进制转换、输出显示。输入可通过DOS调用——0AH,输入一个八进制数;进行数值转换;输出也通过DOS调用——09H,实现输出并显示。

2.1数制转换算法

2.1.1 八进制转换成二进制

由八进制向二进制转换可将每一位八进制数对应于三位二进制数,依次进行替换,转换方式如下所示(左边是一位八进制数,右边是该八进制数所对应的二进制数):

0——000;1——001;2——010;3——011;4——100;

5——101;6——110;7——111;

2.1.2八进制转换成十进制

八进制向十进制的转换可通过按基数位权的展开方式来实现,方法是将八进制每位上的数乘以权,然后相加之和即是十进制数。

2.1.3八进制转换成十六进制

若将八进制直接向十六进制转换,则比较复杂,故可以将八进制先转换为二进制再转换为十六进制。将八进制转换为二进制的算法在第一节已经说明,这里不再赘述,故下面只说明二进制转换为十六进制的算法(左边为二进制数,4个一组,右边为16进制):

0000——0;0001——1;0010——2;0011——3;

0100——4;0101——5;0110——6;0111——7;

1000——8;1001——9;1010——A;1011——B;

1100——C;1101——D;1110——E;1111——F;

3程序设计流程

3.1绘制程序流程图

3.2设计思路

首先对原理进行分析,了解不同进制数之间是如何进行转换的,充分认识汇编语言的指令系统,掌握各个汇编语言的指令系统,掌握各个汇编指令的功能及用法,了解各种程序结构(顺序、分支、循环和子程序)的特点。

首先定义堆栈段,再定义数据段,在数据段中输入MENU中要显示的容,再建一个表TABLE,TABLE中的容为L1,L2,L3。然后根据题目要求设计简单的程序流程图,再根据流程图设计出每一个模块的汇编语言程序,然后再通过调用、跳转、转移等方法将各个子程序连接在一起。这样依据题目要求的汇编程序就初步完成了。本次利用的软件是MF2KP,首先在MF2KP环境下输入设计的汇编程序,然后编译、连接、运行。

4汇编语言源程序设计

4.1堆栈段和数据段程序设计

首先定义堆栈段和数据段的程序,程序设计如下所示:

DATA SEGMENT

MENU DB 'Please Input Your Choice:1:Bin2,2:Dec10,3:Hex16',0dh,0ah,'$' Mess1 db 'Please input a Oct8 number:',0dh,0ah,'$'

Mess2 db 'Output Bin2 is:',0dh,0ah,'$'

Mess3 db 'Output Dec10 is:',0dh,0ah,'$'

Mess4 db 'Output Hex16 is:',0dh,0ah ,'$'

ERROR DB 'ERROR!PLEASE INPUT YOUR CHOICE AGAIN , $'

TABLE DW AA1, L1,L2,L3

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

4.2主程序设计

MAIN PROC FAR

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX

AA1:LEA DX,MENU

MOV AH,09H

INT 21H

MOV AH,01H

INT 21H

SUB AL,30H

CMP AL,04H

JB DONE

LEA DX,ERROR

MOV AH,09H

INT 21H

JMP AA1

DONE:CMP AL,01H

JZ L1

CMP AL,02H

JZ L2

CMP AL,03H

JZ L3

L1:CALL INOCT

CALL FAR CRLF

CALL FAR OUTBIN

CALL FAR CRLF

JMP AA1

L2:CALL INOCT

CALL CRLF

CALL OUTDEC

CALL CRLF

JMP AA1

L3:CALL FAR INOCT

CALL FAR CRLF

CALL FAR OUTHEX

CALL FAR CRLF

JMP AA1

MAIN ENDP

MOV AH,4CH

INT 21H

CODE ENDS

END START

4.3输入八进制数程序INOCT PROC NEAR

LEA DX,MESS1

MOV AH,09H

INT 21H

MOV BX,0

INOL1:MOV AH,01H

INT 21H

CMP AL,0DH

JZ INOEXIT

SUB AL,30H

CMP AL,9

JBE INOL2

SUB AL,7

INOL2:MOV CL,3

SHL BX,CL

OR BL,AL

JMP INOL1 INOEXIT:RET

INOCT ENDP

4.4输出二进制数程序OUTBIN PROC NEAR

LEA DX,MESS2

MOV AH,09H

INT 21H

MOV CX,16

OBL1:ROL BX,1

MOV DL,BL

AND DL,01H

OR DL,30H

MOV AH,02H

INT 21H

LOOP OBL1

RET

OUTBIN ENDP

4.5输出十进制数程序OUTDEC PROC

LEA DX,MESS3

MOV AH,09H

INT 21H

MOV CX,10000

CALL DECL1

MOV CX,1000

CALL DECL1

MOV CX,100

CALL DECL1

MOV CX,10

CALL DECL1

MOV CX,1

CALL DECL1 RET

OUTDEC ENDP

DECL1 PROC NEAR

MOV AX,BX

MOV DX,0

DIV CX

MOV BX,DX

MOV DL,AL

ADD DL,30H

MOV AH,2

INT 21H

RET

DECL1 ENDP

4.6输出十六进制数程序OUTHEX PROC

LEA DX,MESS4

MOV AH,09H

INT 21H

MOV CX,4

OHL1:ROL BX,1

ROL BX,1

ROL BX,1

ROL BX,1

MOV DL,BL

AND DL,0FH

ADD DL,30H

CMP DL,39H

JBE OHL2

ADD DL,7

OHL2:MOV AH,02H

INT 21H

LOOP OHL1

RET

OUTHEX ENDP

CODE ENDS

END START

4.7回车键确定程序CRLF PROC

MOV AH,02H

MOV DL,0DH

INT 21H

MOV DL,0AH

INT 21H

RET

CRLF ENDP

5结果分析

调试运行后首先出现的界面是:请输入您的选择:转换为二进制输出则输入1;转换为十进制输出则输入2;转换为十六进制输出则输入3;;结果如下图4-1所示:

图5-1 请输入您的选择

上述选择输入后,就显示:请输入一个八进制数,结果如下图4-2所示:

图5-2 请求输入一个八进制数

此后输入按照界面提示输入相应的数字即可完成各数制间的转换,其算法已在前面详细说明,这里不再赘述。

图5-3 将八进制转换成二进制数输出

图5-4 将八进制转换成十进制数输出

图5-5 将八进制转换成十六进制数输出

6小结与体会

“微机原理与系统设计”作为电子信息类本科生教学的主要基础课之一,课程紧密结合电子信息类的专业特点,围绕微型计算机原理和应用主题,以emeu8086CPU为主线,系统介绍微型计算机的基本知识,基本组成,体系结构和工作模式,从而使学生能较清楚地了解微机的结构与工作流程,建立起系统的概念。

这次微机原理课程设计,在设计的这些日子里,可以说得是甘苦与共,甘的是可以学到很多很多的的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。深刻了解了老师生科经常强调的东西,比如画流程图的习惯。起先我并不十分在意。但是,这次课程设计完全颠覆了我以前的认识,在这次课程设计中,画程序方框图显得尤为重要。通过流程图,在做设计的过程中,我清楚的知道每一步要做什么,每一步要完成什么任务,而且在程序调试的过程中也有利于查错。相比之前错误的做法,究其原因还是因为课本上用到的基本都是一些基础性质的程序,思路已经相当清晰再画流程图显得多余。

其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段编程的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的容以确保程序的正确性上都有了很大程度的提高。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在实际设计的过程中遇到问题,可以说是难以预测的,各种各样的问题都会出现,同时也会在设计的过程中发现自己的不足之处,例如对以前所学的知识掌握不够牢固、理解的不够深刻。通过这次课设我掌握了怎么去处理实际编程中出现的各类问题,其次在编程中发现了自己的弱点,最后巩固了理论知识,提高了自己的动手能力。

这次微原课设圆满完成,个中滋味确是只有自己亲身经历才明白。这次的设计,让我对微机原理的理解又更深了一层,提高了我将理论与实际相结合和解决问题的能力。同时,我要感帮助我的小伙伴们,他们的建议,指导,帮我分析让我顺利完成课设。通过这次课设,作为工科生的我应该谨记:程序只有在经常的读和写中才可提高,在以后学习编程语言的时候,应该要多动手实践编程,实践

出真知是亘古不变的真理。

参考文献

[1] 峰主编.《微型计算机原理与汇编语言》.第三版.: 电子工业,2003

[2] 志军.《微机原理》课程的教学改革与实践[J]. 工程学院学报(社会科学版).2003.12

[3] 素行《微型计算机系统原理及应用》,,清华大学,2004年

[4]《微机实验及课程设计教程》(试用版2.0),东南大学《微机系统与接口》课程组,2009年2月

[5] 周佩玲.《微型计算机原理与接口技术》.电子工业,2005

[6] 谭浩强.《微型计算机原理及应用》.清华大学,2001

相关主题
文本预览
相关文档 最新文档