代码转换程序设计.docx

上传人:b****5 文档编号:6239079 上传时间:2023-01-04 格式:DOCX 页数:22 大小:137.64KB
下载 相关 举报
代码转换程序设计.docx_第1页
第1页 / 共22页
代码转换程序设计.docx_第2页
第2页 / 共22页
代码转换程序设计.docx_第3页
第3页 / 共22页
代码转换程序设计.docx_第4页
第4页 / 共22页
代码转换程序设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

代码转换程序设计.docx

《代码转换程序设计.docx》由会员分享,可在线阅读,更多相关《代码转换程序设计.docx(22页珍藏版)》请在冰豆网上搜索。

代码转换程序设计.docx

代码转换程序设计

学号:

26

课程设计

 

题目

代码转换程序设计

学院

自动化学院

专业

自动化

班级

姓名

指导教师

周申培

 

2014

1

7

课程设计任务书

学生姓名:

专业班级:

指导教师:

周申培工作单位:

自动化学院

题目:

代码转换程序设计

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.用汇编语言编写一个字母和数制之间的转换程序,设计出友好的交互界面。

2.实现十六进制数和二进制数之间相互转换;实现十进制和二进制的相互转换;十进制转换为十六进制。

3.撰写课程设计说明书。

内容包括:

摘要、目录、正文、参考文献、附录(程序清单)。

正文部分包括:

设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。

时间安排:

12月30日-----12月31日查阅资料及方案设计

1月2日-----1月3日编程

1月6日调试程序

1月7日-----1月8日撰写课程设计报告

指导教师签名:

年月日

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

年月日

 

摘要I

 

摘要

日常生活与实际应用中,往往需要计算机处理的信息是多种多样的,如各种进位制的数据,不同语种的文字符号和各种图像信息等。

但在计算机内部采用的是二进制计数制,这种进制表达方法对于人们研究分析是不那么方便的。

本次课程设计将通过所学的微机原理知识理论,用汇编语言编写程序,实现二进制、十进制与十六进制之间的相互转换,并在MF2KP软件上演示。

关键词:

汇编程序进制转换MF2KP

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程序设计流程

2.1程序流程图

 

Y

 

N

 

 

 

2.2设计思路

首先对原理进行分析,了解不同进制数之间是如何进行转换。

充分认识汇编语言的指令系统,掌握各个汇编指令的功能及用法,了解各种程序结构(顺序、分支、循环和子程序)的特点。

首先定义堆栈段,再定义数据段,在数据段中输入MENU中要显示的内容。

再建一个表TABLE,TABLE中的内容为L0,L1,L2,L3,L4,L5,L6把然后根据题目要求设计简单的程序流程图,再根据流程图设计出每一模块的汇编语言程序,然后再通过调用、跳转、转移等方法将各个子程序连接在一起。

这样依据题目要求的汇编程序就初步完成了,本次用到的软件是MF2KP,首先在MF2KP环境下输入设计的汇编程序,然后编译、连接、运行。

3程序设计

3.1堆栈段数据段程序设计

首先定义堆栈段的程序,程序如下所示:

STACKSEGMENTSTACK

DB200DUP(?

STACKENDS

在数据段中有后面程序要用到的数据MENU,mess1到mess6和error,还有数据表TABLE。

定义数据段程序如下所示:

DATASEGMENT

MENUDB'PleaseInputyourChoice:

',0dh,0ah

db'1:

Bin2-->Dec10',0dh,0ah

db'2:

Bin2-->Hex16',0dh,0ah

db'3:

Dec10-->Bin2',0dh,0ah

db'4:

Dec10-->Hex16',0dh,0ah

db'5:

Hex16-->Bin2',0dh,0ah

db'6:

Hex16-->Dec10',0dh,0ah

db'0:

Exit.$'

mess1db'PleaseinputaBin2number:

$'

mess2db'PleaseinputaDec10number:

$'

mess3db'PleaseinputaHex16number:

$'

mess4db'OutputBinis:

$'

mess5db'OutputDecis:

$'

mess6db'OutputHexis:

$'

errordb'error!

pleaseinputyourchoiceagain$'

TABLEDWL0,L1,L2,L3,L4,L5,L6

DATAENDS

3.2主程序设计

在定义完堆栈段和数据段后,就是主程序的设计。

首先对寄存器AX清零,压栈。

读取数据,在屏幕上显示字符串MENU,根据MENU的提示,从键盘输入一字符串。

将该字符串减30H后于7进行比较,若小于7,则跳转到DONE程序,否则调用报警程序,发出声音报警并提示error。

在DONE程序中,若输入的数字为1,则立即跳转到L1,进行二进制转化为十进制;若输入的数字为2,则跳转到L2,进行二进制转换为十六进制;若为3,则跳转到L3进行十进制转换为二进制;若为4,则跳转到L4进行十进制转换为十六进制;若为5,则跳转到L5进行十六进制转换为二进制;若为6,则跳转到L6进行十六进制转换为十进制;如果为零,则退出程序,结束。

主程序的设计如下所示:

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

PUSHDS

XORAX,AX;清零

PUSHAX

MOVAX,DATA

MOVDS,AX

LKS:

LEADX,MENU;取存储区首址

MOVAH,09H;显示字符串

INT21H

MOVAH,01H;从键盘输入字符串

INT21H

SUBAL,30H

CMPAL,07h

JBDONE;AL小于07H跳转到DONE

CALLSOUNDF;调用报警程序

LEADX,error

MOVAH,09H;显示字符串error

INT21H

JMPMAIN

DONE:

LEASI,TABLE

MOVAH,0

SHLAX,1

ADDSI,AX

JMP[SI]

;二进制转换成十进制

L1:

CALLINBIN;调用输入二进制程序

CALLCRLF

CALLOUTDEC;调用输出十进制程序

CALLCRLF

JMPLKS;直接跳转到LKS

;二进制转换成十六进制

L2:

CALLINBIN;调用输入二进制程序

CALLCRLF

CALLOUTHEX;调用输出十六进制程序

CALLCRLF

JMPLKS

;十进制转换成二进制

L3:

CALLINDEC;调用输入十进制程序

CALLCRLF

CALLOUTBIN;调用输出二进制程序

CALLCRLF

JMPLKS

;十进制转换成十六进制

L4:

CALLINDEC;调用输入十进制程序

CALLCRLF

CALLOUTHEX;调用输出十六进制程序

CALLCRLF

JMPLKS

;十六进制转换成二进制

L5:

CALLINHEX;调用输入十六进制程序

CALLCRLF

CALLOUTBIN;调用输出二进制程序

CALLCRLF

JMPLKS

;十六进制转换成十进制

L6:

CALLINHEX;调用输入十六进制程序

CALLCRLF

CALLOUTDEC;调用输出十进制程序

CALLCRLF

JMPLKS

L0:

RET

MAINENDP

CODEENDS;代码段结束

ENDSTART;程序结束

3.3输入二进制程序

二进制数从键盘键入之后只需要直接完成从键盘向内存的循环输入即可,其代码如下:

INBINPROC

LEADX,MESS1

MOVAH,09H;显示字符串MESS1

INT21H

MOVBX,0

INBL1:

MOVAH,01H;从键盘输入字符

INT21H

CMPAL,0DH;比较输入的是否是回车键

JZINBEXIT;等于零(回车键)跳转到INBEXIT

ANDAL,01H;保留低四位

SHLBX,1;逻辑左移一位

ORBL,AL

JMPINBL1

INBEXIT:

RET

INBINENDP

3.4输入十进制程序

十进制数从键盘键入之后需要进行乘法运算之后转换成二进制数,再完成从键盘向内存的循环输入,其代码如下:

INDECPROC

LEADX,MESS2

MOVAH,09H;显示字符串MESS2

INT21H

MOVBX,0

INDL1:

MOVAH,01H;从键盘输入字符

INT21H

CMPAL,0DH;比较输入的是否是回车键

JZINDEXIT;等于零(回车键)跳转到INDEXIT

SUBAL,30H

CMPAL,9

JBEINDL2;小等于9跳转到INDL2

SUBAL,7

INDL2:

MOVAH,0

XCHGAX,BX;AXBX交换

MOVCX,10

MULCX;AX乘以CX

ADDBX,AX

JMPINDL1

INDEXIT:

RET

INDECENDP

3.5输入十六进制程序

十六进制数从键盘键入之后需要进行从1位变为4位的移位运算转换成二进制数,再完成从键盘向内存的循环输入,其代码如下:

INHEXPROC

LEADX,MESS3

MOVAH,09H;显示字符串MESS3

INT21H

MOVBX,0

IHL1:

MOVAH,01H;从键盘输入字符

INT21H

CMPAL,0DH;比较输入的是否是回车键

JZIHEXIT;等于零(回车键)跳转到IHEXIT

SUBAL,30H

CMPAL,9

JBEIHL2;如果AL小等于9跳转到IHL2

SUBAL,7

IHL2:

MOVCL,4

SHLBX,CL;BX逻辑左移CL位

ORBL,AL

JMPIHL1

IHEXIT:

RET

INHEXENDP

3.6输出二进制程序

将内存中存储的2进制数输出为2进制数,只需要将内存中所存储的码循环输出显示出来即可,其代码如下:

OUTBINPROC

LEADX,MESS4

MOVAH,09H;显示字符串MESS4

INT21H

MOVCX,16

OBL1:

ROLBX,1;BX循环左移一位

MOVDL,BL

ANDDL,01H

ORDL,30H

MOVAH,02H;字符输出

INT21H

LOOPOBL1;循环OBL1

RET

OUTBINENDP

3.7输出十进制程序

将内存中存储的2进制数输出为10进制数,需要将内存中的码进行除法运算,再循环输出显示,其代码如下:

OUTDECPROC

LEADX,MESS5

MOVAH,09H;显示字符串MESS5

INT21H

PUSHBX;压栈

MOVAX,BX

MOVDX,0

MOVCX,10000

DIVCX;AX除以CX

MOVBX,DX

MOVDL,AL

ORDL,30H

MOVAH,02H

INT21H

MOVAX,BX

MOVDX,0

MOVCX,1000

DIVCX

MOVBX,DX

MOVDL,AL

ORDL,30H

MOVAH,02H

INT21H

MOVAX,BX

MOVDX,0

MOVCX,100

DIVCX

MOVBX,DX

MOVDL,AL

ORDL,30H

MOVAH,02H

INT21H

MOVAX,BX

MOVCL,10

DIVCL

MOVBL,AH

MOVDL,AL

ORDL,30H

MOVAH,02H

INT21H

MOVDL,BL

ORDL,30H

INT21H

POPBX

RET

OUTDECENDP

3.8输出十六进制程序

将内存中存储的2进制数输出为16进制数,需要将内存中的码进行移位运算,将4位2进制数合并为1位16进制数,再循环输出显示,其代码如下:

OUTHEXPROC

LEADX,MESS6

MOVAH,09H;显示字符串MESS6

INT21H

MOVCX,4

OHL1:

ROLBX,1;循环左移

ROLBX,1

ROLBX,1

ROLBX,1

MOVDL,BL

ANDDL,0FH;保留低四位

ADDDL,30H

CMPDL,39H

JBEOHL2

ADDDL,7

OHL2:

MOVAH,02H

INT21H

LOOPOHL1

RET

OUTHEXENDP

3.9回车键确定程序

当输入指定数制的数之后,需要依靠此程序来确定输入完成并执行转换过程并输出,其代码如下:

CRLFPROC

MOVAH,02H;输出字符

MOVDL,0DH;确定(回车键)

INT21H

MOVDL,0AH;键盘缓冲输入

INT21H

RET

CRLFENDP

3.10报警程序

当输入的数不在所选范围(即数字0~6)时,会启动此程序进行报警并恢复到出错前的状况,其代码如下:

SOUNDFPROCNEAR

INAL,61H;取得设备控制寄存器开关量

MOVBL,AL

MOVAL,0B6H

OUT43H,AL;写入方式控制字

MOVAX,1000H;输出频率1000Hz

OUT42H,AL;先写入低8位

MOVAL,AH

OUT42H,AL;后写入高8位

ORAL,3;接通扬声器

OUT61H,AL;设置设备控制寄存器开关量

MOVDX,2500

LOOP1:

DECDX

MOVCX,65535

LOOP2:

LOOPLOOP2;循环LOOP2

CMPDX,0H

JNZLOOP1;DX不等于0跳转到LOOP1

MOVAL,AH

MOVAL,BL

OUT61H,AL;恢复原状

RET

SOUNDFENDP

 

4运行结果

在微机原理实验平台集成开发环境MF2KP上输入该汇编程序,点击16位编码系统的汇编源程序,再点击连接目标码,再点运行程序。

这时弹出DOS窗口,窗口如图4-1所示。

图4-1初始窗口

首先进行二进制转换成十进制,在窗口中输入1,这时窗口中提示“PleaseinputaBinnumber:

”.输入二进制数,运行显示结果如图4-2所示。

图4-2二进制转十进制

要进行二进制转换成十六进制时,在窗口中输入2,这时窗口中提示“PleaseinputaBinnumber:

”.输入二进制数,运行显示结果如图4-3所示。

图4-3二进制转十六进制

要进行十进制转换成二进制时,在窗口中输入3,这时窗口中提示“PleaseinputaDecnumber:

”.输入十进制数113,运行显示结果如图4-4所示。

图4-4十进制转二进制

要进行十进制转换成十六进制时,在窗口中输入4,这时窗口中提示“PleaseinputaDecnumber:

”.输入十进制数159,运行显示结果如图4-5所示。

图4-5十进制转十六进制

要进行十六进制转换成二进制,在窗口中输入5,这时窗口中提示“PleaseinputaHexnumber:

”.输入十六进制数1D,运行显示结果如图4-6所示。

图4-6十六进制转二进制

要进行十六进制转换成十进制,在窗口中输入6,这时窗口中提示“PleaseinputaHexnumber:

”.输入十六进制数30,运行显示结果如图4-7所示。

图4-7十六进制转十进制

当输入非0-6的字符时,系统报错,请求重新输入,运行显示结果如图4-8所示。

图4-8报错界面

5心得体会

回顾此次微机原理课程设计,至今感慨颇多。

的确,从选题到定稿,从理论到实践,在短短的一个星期的日子里,有苦有甜。

同时也学到很多很多新的东西,虽然时间有限但是自己很多方面都有了提升,如动手编程能力和解决问题的能力。

课程设计刚开始拿到题目时,对于理论知识学习不够扎实的我深深感到了自己的不足,便重新看了教材,对知识进行了梳理,掌握了基本理论知识。

这样对平时学习的不足和缺陷就有所弥补。

遇到过各种各样的问题,没有扎实的理论知识是无法解决的。

只有把所学的理论知识与实践相结合起来,从理论中得出结论,通过实际动手去验证理论,在这二者的配合下,我们不仅可以成功的完成课程设计,而且还可以掌握和巩固所学知识,充实自己的知识储备。

同时也可以使自己的实际动手能力和独立思考的能力在一定程度上得到提升,使自己能更好的适应社会的要求。

通过本次课程设计,我在发现问题、分析问题和解决问题的能力得到了提升。

培养了我的设计思维,提高了我们的逻辑思维能力,使我们在汇编程序的分析与设计上有了很大的进步。

同时也让我在面对问题的时候不在像以前那样惊慌失措,而是慢慢分析问题,逐步去解决问题,实现各个击破。

培养我们独立思考的能力,和逻辑的分析能力.

总之,通过本次课程设计,我收获颇丰,一方面使自己各方面能力在一定程度上得到提升,另一方面是自己切身体会到汇编语言的实用性和有效性,同时在让我体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐。

参考文献

【1】《微机原理与接口技术》,姚燕男、薛钧义编著,高等教育出版社,2004

【2】《微型机原理与接口技术》,刘永华,王成端编著,清华大学出版社,2006

【3】《微型计算机原理与接口技术》,杨立等编著,中国水利水电出版社,2005

【4】《微机原理应用实践》,王萍、周根元等编著,机械工业出版社,2001

【5】《微型计算机原理与与常用接口技术》,袁开榜等编著,中国水利水电出版社,2006

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

姓名

性别

专业、班级

课程设计题目:

代码转换程序设计

课程设计答辩或质疑记录:

 

成绩评定依据:

评定项目

评分成绩

1.选题合理、目的明确(10分)

2.设计方案正确、具有可行性、创新性(20分)

3.设计结果(20分)

4.态度认真、学习刻苦、遵守纪律(15分)

5.设计报告的规范化、参考文献充分(不少于5篇)(10分)

6.答辩(25分)

总分

最终评定成绩(以优、良、中、及格、不及格评定)

指导教师签字:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1