1学号:微机原理及接口技术上机实习题目代码转换程序设计学院自动化学院专业班级姓名指导教师李道远年月日2上机实习任务书学生姓名:专业班级:指导教师:李道远工作单位:自动化学院题目:代码转换程序设计初始条件:完成一个字母或数制之间的转化程序,主程序分别具有3种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“Q”键退出。1)实现二进制数向十六进制数的转换2)实现十六进制数向二进制数的转换3)实现十六进制数向十进制数的转换要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图3目录摘要...................................................11原理分析..............................................42程序设计流程..........................................22.1程序流程图........................................22.2设计思路..........................................33程序设计..............................................34运行结果..............................................45心得体会..............................................8参考文献...............................................9附录...................................................104摘要计算机处理的信息是往往是多种多样的,如各种进位制的数据,不同语种的文字符号和各种图像信息等。但在计算机内部采用的是二进制计数制,这种进制表达方法对于人们研究分析不是很直观。本次课程设计将通过所学的微机原理知识理论,用汇编语言编写程序,程序设计成一个数据转换系统,给出一个可供选择的菜单,根据界面的信息选择不同的子功能,实现二进制、十进制与十六进制数据之间的相互转换。通过这种转换中数据的流向能够更好的理解计算机的一些基本原理,如计算机数据的存储形式和一些基本的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二进制(Binary):0、1计算机中采用的是二进制计数制,这种进制表达方法对于人们研究分析不是很直观。本次课程设计通过所学的微机原理,用汇编语言编写程序,实现二进制转换成十六进制,十六进制转换成二进制或十进制。二进制转换为十六进制用取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,得到的数就是一位十六位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。将十六进制转换为二进制,取一分四法,即将一位十六进制数分解成四位二5进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。十进制转换为十六进制整数部分的方法叫做除16取余法,每次将整数部分除以16,余数为该位权上的数,而商继续除以16,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。2程序设计流程2.1程序流程图开始用户选择子功能输入为1选择二进制转十六进制输入为2选择十六进制转二进制输入为3选择十六进制转十进制输入有误,重新输入输入为Q选择退出结束转换成十进制数并输出转换成二进制数并输出转换成十六进制数并输出退出输入十六进制数输入十六进制数输入二进制数图2-162.2设计思路运行程序,首先会显示主界面,用户可依据提示选择不同的编号,实现不同的子功能。1、二进制向十六进制的转换。当用户选择编号1,便选择了这一个子功能。通过判断标识符,程序跳转到标识符所在的位置。根据提示输入一个二进制数,按回车键结束。将二进制数存入内存单元,然后调用输出十六进制的程序,其转换的主要思想是:将内存中存储的2进制数输出为16进制数,需要将内存中的码进行移位运算,将4位2进制数合并为1位16进制数,再循环输出显示。显示完毕后,跳转到主菜单。2、十六进制向二进制的转换。当用户选择编号2,便选择了这一个子功能。通过判断标识符,程序跳转到标识符所在的位置。根据提示输入一个十六进制数,按回车键结束。将十六进制数存入内存单元,然后调用输出二进制的程序,将内存中存储的2进制数输出为2进制数,只需要将内存中所存储的码循环输出显示出来即可。将转换后的二进制数输出后,跳转到主菜单。3、十六进制向十进制的转换。当用户选择编号3,便选择了这一个子功能。通过判断标识符,程序跳转到标识符所在的位置。根据提示输入一个十六进制数,按回车键结束。将十六进制数存入内存单元,然后调用输出十进制的程序,转换成十进制的主要思想是,将内存中存储的2进制数输出为10进制数,需要将内存中的码进行除法运算,再循环输出显示。显示完毕后,跳转到主菜单。4、退出。当用户选择编号q,便选择了退出。通过判断标识符,程序跳转到标识符所在的位置,实现退出。3程序设计首先定义堆栈段的程序,然后定义数据段,在数据段中有后面程序要用到的数据MENU,mess1到mess6和error,还有数据表TABLE。在定义完堆栈段和数据段后,就是主程序的设计。首先对寄存器AX清零,压栈。读取数据,在屏幕上显示字符串MENU,根据MENU的提示,从键盘输入一字符串。将该字符串减30H后于4进行比较,若小于4,则跳转到DONE程序,否则提示error。7在DONE程序中,若输入的数字为1,则立即跳转到L1,进行二进制转换为十六进制;若输入的数字为2,则跳转到L2,十六进制转换为二进制;若为3,则跳转到L3进行十六进制转换为十进制;如果为Q,则退出程序;结束其余字符均提示error。子程序有输入二进制程序、输入十进制程序、输入十六进制程序、输出二进制程序、输出十六进制程序、输出十进制程序、回车键确定程序。输入二进制程序,二进制数从键盘键入之后只需要直接完成从键盘向内存的循环输入即可;输入十六进制程序,十六进制数从键盘键入之后需要进行从1位变为4位的移位运算转换成二进制数,再完成从键盘向内存的循环输入;输出二进制程序,将内存中存储的2进制数输出为2进制数,只需要将内存中所存储的码循环输出显示出来即可;输出十进制程序,将内存中存储的2进制数输出为10进制数,需要将内存中的码进行除法运算,再循环输出显示;输出十六进制程序,将内存中存储的2进制数输出为16进制数,需要将内存中的码进行移位运算,将4位2进制数合并为1位16进制数,再循环输出显示。回车键确定程序,当输入指定数制的数之后,需要依靠此程序来确定输入完成并执行转换过程并输出,完整程序代码见附录。4运行结果(1)在微机原理实验平台集成开发环境EMU8086上输入该汇编程序,点击EMULATE,再点击运行程序。这时弹出DOS窗口,窗口如图4-1所示。图4-18(2)首先进行二进制转换成十六进制,在窗口中输入1,这时窗口中提示“PleaseinputaBin2number:”如图4-2。图4-2输入二进制数1101111,运行显示结果如图4-3所示。图4-39(3)要进行十六进制转换成二进制,在窗口中输入2,这时窗口中提示“PleaseinputaHex16number:”.如图4-4。图4-4输入十六进制数FF66,运行显示结果如图4-5所示。图4-510(4)要进行十六进制转换成十进制,在窗口中输入3,这时窗口中提示“PleaseinputaHex16number:”.如图4-6。图4-6输入十六进制数00FF,运行显示结果如图4-7所示。图4-711(5)当输入Q的字符时,系统退出,运行显示结果如图4-8所示。图4-8(6)当输入非1、2、3、Q的字符时,系统报错,请求重新输入,运行显示结果如图4-9所示。图4-95心得体会经过近一个星期的工作,才把课程设计完成。经过这次课程设计,我加深了对汇编语言的理解,也对上课时所说的语法有了深刻的认识。在编写代码的过程中让我充分感受到了不同编程语言之间的差别。对与高级语言来说或许是很简单的一个程序或者只需要调用已有的函数库,可是对于汇编来说却要写上几十行甚至更多的代码。可是更加深刻的了解了寄存器、存储器之间的数据流向,12因为每个考虑不周都会导致一大堆的错误出现,常常令人感到一种无力感,想要放弃。此次课程设计收获颇多,不仅仅是体会到了分析问题,想出解决方案的重要性,我进一步了解到了汇编语言的一些基本的指令,以及各个寄存器的功能及使用的方法。在设计的过程中不断地修改,改进,增强了自己分析问题解决问题的能力;在不断地调试过程中,不断的发现问题,解决问题,通过查资料,翻阅相关的书籍,以及向同学们请教,来逐一的解决各个问题。同时也更深的了解到了寄存器,存储器等的工作原理以及需要注意的一些问题。在每一个子功能的编写过程中,需要十分的注意到各个变量名的统一化,以便于将其嵌入到主菜单中去,在编写标识符的名字的时候,尽量要做到看名字知其含义,使程序的可读性进一步增高。在编写代码转换程序的过程中,更是体会到了严谨的重要性,一个小小的错误都可能使整个程序无法运行,再小的错误都不容忽视,再细小的地方都需要注意。不管在做什么,都需要十分的认真和谨慎,将每一步都做到最好。当设计一步步接近成功,每一个子功能调试正确,都会让自己感到很高兴,从中体会到了编程的乐趣,让自己更有信心,增强了对汇编语言程序设计的兴趣.参考文献【1】《微机原理与接口技术》,姚燕男、薛钧义编著,高等教育出版社,2004【2】《微型机原理与接口技术》,刘永华,王成端编著,清华大学出版社,2006【3】《微型计算机原理与接口技术》,杨立等编著,中国水利水电出版社,2005【4】《微机原理应用实践》,王萍、周根元等编著,机械工业出版社,200113附录STACKSEGMENTDB200DUP(0)STACKENDSDATASEGMENTMENUDB'PleaseInputyourChoice:',0dh,0ahdb'1:Bin2--Hex16',0dh,0ahdb'2:Hex16--Bin2',0dh,0ahdb'3:Hex16--Dec10',0dh,0ahdb'Q:Exit.$'mess1db'PleaseinputaBin2number:$'mess2db'PleaseinputaDec10number:$'mess3db'PleaseinputaHex16number:$'mess4db'OutputBinis:$'mess5db'OutputDecis:$'mess6db'OutputHexis:$'errordb'error!pleaseinputyourchoiceag