ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:116.80KB ,
资源ID:12583704      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12583704.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(进制转换程序设计1.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

进制转换程序设计1.docx

1、进制转换程序设计11 常用数制计算机常用的数制:二进制,十进制,八进制,十六进制。通常表示一个数时,每个数字表示的量不散取决于数字本身,而且取决于所在的位置,这种表示方法被称为位置表示法。在位置表示法中,对每个数位赋予一定的位值,称为权。每个数位上的数字锁表示的量是这个数字和权的乘积。相邻两位中高位的权与低位的权之比如果是个常数,则此常数称为基数,用X表示,则数所表示的量N为式中,从起向左是数的整数部分,向右是数的小数部分;表示各数位上的数字,称为系数,它可以在0,1,X-1共X中数中任意取值;m和n为冥指数,均为正整数。正由于相邻高位的权与低位的权相比是个常数,因而在这种位值计数法中,基数(

2、或称底数)X的取值不同便得到不同进位制数的表达式。(1)十进制十进制是生活中最常用的十进制,当X=10时,得十进位制数的表达式为其特点是:系数只能在09这10个数字中取值;每个数位上的权是10的某次冥;在加,减运算中,采用“逢十进一,借一当十”的规则。(2)二进制二进制是计算机中最常用的数值。当X=2时,得二进制数的表达式为二进制的特点是:系数只能在0和1这两个数字中取值;每个数位上的权是2的某次冥;在加减运算中,采用“逢二进一,借一当二”的规则。(3)八进制和十六进制由于1位八进制数对应3位二进制,1位十六进制对应4位二进制,因此,当二进制数列很长时,可以用八进制或十六进制数来表示。当X=8

3、时,得八进制数的表达式为八进制的特点是:系数只能在07这8个数字中取值;每个数位上的权是8的某次冥;在加减运算中,采用“逢八进一,借一当八”的规则。同理,当X=16时,得十六进制数的表达式为十六进制的特点:系数只能在015这16个数字中取值(其中09这10个数字借用十进制中的数码,1015这6个数用A,B,C,D,E,F表示);每个数位上的权的16的某次冥;在加减运算中,采用逢“十六进一,借一当十六”的规则。表1.1列出四种进位制中数的表示法,其中B是Binary的缩写,表示该数为二进制数;Q表示该数为八进制数;H是Hexadecimald的缩写,表示该数是十六进制数;十进制数采用符合D(De

4、cimal)。表1.1 十进制,二进制,八进制,十六进制数码对照表十进制二进制八进制十六进制00000B0Q0H10001B1Q1H20010B2Q2H30011B3Q3H40100B4Q4H50101B5Q5H60110B6Q6H70111B7Q7H81000B10Q8H91001B11Q9H101010B12QAH111011B13QBH121100B14QCH131101B15QDH141110B16QEH151111B17QFH数制间的转换规则 1.十进制数与非十进制数之间的转换 (1)十进制数转换成非十进制数 把一个十进制数转换成非十进制数(基数记作R)分成两步.整数部分转换时采用“

5、除R取余法”;小数部分转换时采用“乘R取整法”。 (2)非十进制数转换成十进制数 非十进制数(基数记作R,第j个数位的位权记作Rj)转换成十进制数的方法:按权展开求其和。 2.非十进制数之间的转换 (1)二进制数与八进制数之间的转换 二进制数转换成八进制数的方法.以小数点分界,整数部分自右向左、小数部分自左向右,每三位一组,不足三位时,整数部分在高位左边补0,小数部分在低位右边补0,然后写出对应的八进制数码。 八进制数转换成二进制数的方法:用八进制数码对应的三位二进制数代替八进制数码本身即可。 (2)二进制数与十六进制数之间的转换 二进制数转换成十六进制数的方法:以小数点分界,整数部分自右向左

6、、小数部分自左向右,每四位一组,不足四位时,整数部分在高位左边补0,小数部分在低位右边补0,然后写出对应的十六进制数码。 十六进制数转换成二进制数的方法:用十六进制数码对应的四位二进制数代替十六进制数码本身即可。 2设计原理程序流程图如图2.1所示。 N (A) N(A ) N(A) Y Y Y 图2.1 程序运算流程图对于不同的情况我们只需要定义不同的输入函数和输出函数,根据不同的情况,调用不同的输入函数和输出函数。本程序调用二进制输入,十进制输入,十六进制输入,二进制输出,十进制输出,十六进制输出等六个子程序。确定程序功能和功能结构,数据结构,以及用户界面;对各功能模块进行准确的定义,对全

7、局数据变量进行说明和定义;确定各功能模块的原理及算法并画出相应的数据和程序流图。课设涉及到各种跳转,各个寄存器之间的移动,特定的输入和输出。调用01h的输入功能,结果在al中,调用02h的输出功能,输出得到是dl里面的内容。提示信息的输出是用db来定义的,结束标志是$,同时我也定义了一个表,来应对各种不同的情况。首先输出一个选择窗口,有6种选择。按照自己的要求选择,选择之后,就会调用相应的输入函数,必须输入相应进制的数进行处理,2进制数必须输入16位,16进制数输入4位,10进制数要求输入的必须小于2的16次方。输入之后,程序就会处理输入数据,然后调用相应的输出函数,就会输出相应的数据。输入函

8、数,输出函数都是子函数。整个程序由主程序和若干子程序组成。子程序:完成各数制之间转换的具体功能实现CRLF :实现回车换行的操作INBIN :二进制输入子程序OUTBIN :二进制输出子程序INDEC :十进制输入子程序入INHEX :十六进制输入子程序OUTDEC :10进制输出子程序OUTHEX :16进制输出子程序L1:二进制转化成十进制L2:二进制转换成十六进制L3:十进制转换成二进制L4:十进制转换成十六进制L5:十六进制转换成十进制L6:十六进制转换成二进制主程序:主要实现友好的交互界面的设计,以及代码与数制之间相互转换的子程序调用。定时器通道3的G端与61H端口的bit0位相联,

9、如果将61H端口的bit0位置成1,那么定时器通道3就被启动,此时将有一组信号从OUT端输出,信号的频率可以用程序控制;若61H端口bit0位为0,则定时器被关闭,OUT端就会恒定为1,此电路用在这里相当一个可控开关,如果将61H端口的bit0、bit1位都置成1,则相当于既打开了定时器又打开了开关,这时候定时器产生的声音信号就会送到放大器推动喇叭发声;若将bit0位置0,则定时器关闭,此时OUT端为1,这时候如果连续改变bit1位的状态,也可以从喇叭中听到声音;若将OUT位置0,则开关关闭,此时即使打开定时器也不能听到声音。 PC中的定时电路有三个通道,通道3用于发声,通道1用于控制系统内部

10、的时钟。 通道1的工作方式和通道3一样,但是系统启动时设定其发出一个频率固定为18.2Hz的信号,这个信号直接送到系统中的中断控制器。每一个Hz都产生一个硬件中断,一般称这个硬中断为IRQ0,对应的中断号是08H。也就是说,当计算机启动后,我们的机器看上去十分平静,但实际上CPU非常忙碌。在定时器的控制下每隔55毫秒就要执行一个08H号中断,这个中断的主要工作就是连续地计数。 在内存0040H:006CH处有四字节的存储空间专门用于保存计数值,CPU每执行一次08H中断,这四字节的计数值就被加1,不难算出这个计数值每增加1091后时间恰好过了1分钟,每增加65454后时间恰好过了1小时。系统内

11、部的时钟之所以能准确走时,靠得就是08H中断和这四字节的计数值。因此我们要想精确的定时,必须依靠时钟计数值才行。而该程序对时间要求不是那么严。本次设计中,先将定时器3的OUT端置1,再给bit1一个矩形波,通过矩形波的频率来控制喇叭发声的频率;若控制OUT端为高电平时的时长,则可以控制报警音的时间。 设计的报警子程序模块如下:BELL PROC MOV DX,65535 IN AL,61H AND AL,0FCHTRIG: XOR AL,2 OUT 61H,AL MOV CX,65535Delay:LOOP Delay DEC DX JNE TRIG RETBELL ENDP3源程序DATA

12、SEGMENT ;数据段 MENU DB Please Input your Choice:,0dh,0ah db 1: Bin -Dec,0dh,0ah db 2: Bin -Hex,0dh,0ah db 3: Dec -Bin,0dh,0ah db 4: Dec -Hex,0dh,0ah db 5: Hex -Dec,0dh,0ah db 6: Hex -Bin,0dh,0ah db 0: Exit. $,0dh,0ah mess0 db error!$ mess1 db Please input a Bin number:$ mess2 db Please input a Dec num

13、ber:$ mess3 db Please input a Hex number:$ mess4 db Output Bin is: $ mess5 db Output Dec is: $ mess6 db Output Hex is: $ TABLE DW L0,L1,L2,L3,L4,L5,L6DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR PUSH DS XOR AX,AX ;清零AX,CF PUSH AX ;NT 会改变AL的值,应压栈保护 MOV AX,DATA MOV DS,AXLKS:LEA DX,MENU ;

14、实现根据输入进行跳转 MOV AH,09H INT 21H ;显示字符串 DS:DX=字符串 MOV AH,01H INT 21H ;带回显的字符输入 AL=8位数据 CMP AL,30H JB LK;低于转移 CMP AL,36H JA LK ;高于转移 JMP LK1 LK:CALL BELL JMP LKS LK1:AND AL,0FH LEA SI,TABLE ;将TABLE首地址给SI MOV AH,0 SHL AX,1 ;将AX左移一位 ADD SI,AX;相加结果送回SI JMP SI ;跳转到对应的进制转换部分 L1:CALL INBIN ;调用子程序INBIN CALL CR

15、LF CALL OUTDEC CALL CRLF JMP LKS ;无条件转移到LKS子程序 L2:CALL INBIN ;BINHEX CALL CRLF CALL OUTHEX CALL CRLF JMP LKS L3:CALL INDEC ;DECBIN CALL CRLF CALL OUTBIN CALL CRLF JMP LKS L4:CALL INDEC ;DECHEX CALL CRLF CALL OUTHEX CALL CRLF JMP LKS L5:CALL INHEX ;HEXDEC CALL CRLF CALL OUTDEC CALL CRLF JMP LKS L6:CA

16、LL INHEX ;HEXBIN CALL CRLF CALL OUTBIN CALL CRLF JMP LKS L0:RET ;返回 MAIN ENDP CRLF PROC ;回车换行子程序 MOV AH,02H ;将02H送AH MOV DL,0AH INT 21H MOV DL,0DH INT 21H RET ;返回 CRLF ENDP BELL PROC ;报警子程序 CALL CRLF LEA DX,MESS0 MOV AH,09H INT 21H CALL CRLF MOV DX,6553 IN AL,61H AND AL,0FCH TRIG: XOR AL,2 OUT 61H,A

17、L MOV CX,65535Delay:LOOP Delay DEC DX JNE TRIG RETBELL ENDP INBIN PROC ;二进制的输入 LEA DX,MESS1 ;MESS1首地址送DX MOV AH,09H INT 21H MOV BX,0 INBL1:MOV AH,01H INT 21H CMP AL,0DH ;比较 JZ INBEXIT ;等于或结果为0转移 AND AL,01H ;相与,送到AL SHL BX,1 ;将BX左移一位 OR BL,AL ;相或,送到BL JMP INBL1 ;无条件转移到INBL1 INBEXIT:RET ;返回 INBIN ENDP

18、 ; 二进制的输入:每次我们输入的数都放在al中,每次都将al和空的bl进行或运算,实际上就将我们输入的数据存到了bx中,之后左移一位,在输入数据,之后重复进行上面的步骤,这样就将我们所输入的数据存到了bx中。 INDEC PROC ;十进制的输入 LEA DX,MESS2 MOV AH,09H ;调用9号中断功能,字符串显示功能 INT 21H MOV BX,0INDL1:MOV AH,01H INT 21H CMP AL,0DH JZ INDEXIT ;等于或结果为0转移 SUB AL,30H CMP AL,9 JBE INDL2 ;低于或等于,不高于转移 SUB AL,7INDL2:MO

19、V AH,0 XCHG AX,BX ;交换,AXBX MOV CX,10 MUL CX ;(AX)()() ADD BX,AX JMP INDL1 INDEXIT:RET INDEC ENDP;十进制的输入:通过ax和bx的配合使用,每次都将前一次输入的数据乘以10,在加上这一次的输入,就这样就形成了10进制的输入。 INHEX PROC ;十六进制的输入 LEA DX,MESS3 MOV AH,09H INT 21H MOV BX,0 IHL1:MOV AH,01H INT 21H CMP AL,0DH JZ IHEXIT ;等于或结果为0转移 SUB AL,30H ;相减,结果送AL CM

20、P AL,9 JBE IHL2 ;低于或等于,不高于转移SUB AL,7IHL2:MOV CL,4 SHL BX,CL OR BL,AL JMP IHL1 IHEXIT:RET INHEX ENDP;十六进制的输入 :输入的数据放在al中,将al和bl将行或运算,将我们所输入的数据保存起来,之后左移4位,在重复这个操作,将我们所输入的数据全部保存在16数据里面。 OUTBIN PROC ;二进制的输出 LEA DX,MESS4 MOV AH,09H INT 21H MOV CX,16 OBL1:ROL BX,1 MOV DL,BL AND DL,01H ;相与 OR DL,30H ;相或 MO

21、V AH,02H INT 21H LOOP OBL1 ;循环OBL1子程序 RET OUTBIN ENDP;二进制的输出:我们所输入的数据都保存在bx中,每次都将bx左移一位,然后将bl的数据转存到dl中,加上30h后,在输出之后就是二进制的了。 OUTDEC PROC ;十进制的输出 LEA DX,MESS5 MOV AH,09H INT 21H PUSH BX ;入栈 MOV AX,BX MOV DX,0 ;余数 MOV CX,10000 DIV CX ;AX除以CX商送AL,余数送AH MOV BX,DX MOV DL,AL OR DL,30H ;逻辑与运算 MOV AH,02H INT

22、 21H MOV AX,BX MOV DX,0 MOV CX,1000 DIV CX ;AX除以CX商送AL,余数送AH MOV BX,DX MOV DL,AL OR DL,30H MOV AH,02H INT 21H MOV AX,BX MOV DX,0 MOV CX,100 DIV CX MOV BX,DX MOV DL,AL OR DL,30H MOV AH,02H INT 21H MOV AX,BX MOV CL,10 DIV CL MOV BL,AH MOV DL,AL OR DL,30H MOV AH,02H INT 21H MOV DL,BL OR DL,30H MOV AH,0

23、2H INT 21H POP BX ;出栈 RET OUTDEC ENDP ;十进制的输出: 将保存在bx中的数据转存到ax中来,由于19位数据所存最大数据是6万多,所以第一次除以一万,余数存放在dx中,商存在al中,将ax中的内容转存到dl中,输出出来,而将dx中的余数又转存到bx中,继续上面的操作,不过除数改城了1000,然后除数变成100,10,最后输出商。 OUTHEX PROC ;十六进制输出程序 LEA DX,MESS6 MOV AH,09H INT 21H MOV CX,4OHL1:ROL BX,1 ;循环左移 ROL BX,1 ROL BX,1 ROL BX,1 MOV DL,

24、BL AND DL,0FH ADD DL,30H ;加运算 CMP DL,39H JBE OHL2 ;低于或等于,不高于转移 ADD DL,7 OHL2:MOV AH,02H INT 21H LOOP OHL1 ;OHL1循环 RET OUTHEX ENDP;16进制的输出:bx中左移4位,将dl低四位与bl低四位,进行与运算,结果在dl中,然手加上30h,变成ask码输出,就可以输出16进制数。CODE ENDS END MAIN4 程序运行结果运行程序首先输出一个选择窗口,有6种选择。按照自己的要求选择进制转换之间的关系,选择之后,调用相应的输入函数,必须输入相应进制的数进行处理。其中2进

25、制数必须输入16位,16进制数输入4位,10进制数要求输入的必须小于2的16次方。输入之后,程序就会处理输入数据,然后调用相应的输出函数,就会输出相应的数据。开始运行程序通过输入数字确定进制之间转换,其验证结果如下:输入06之外的数字是错误的,发出警报,显示为:1.二进制转换为10进制2.二进制转换为16进制3.10进制转换为二进制4.十进制转换为十六进制5.十六进制转换为十进制6.十六进制转换为二进制这个程序要求我们输入必须符合二进制,十进制和十六进制的规则,当二进制转化成其他进制时输入可为16位之内,而其他进制转换为二进制,二进制显示的是16位。16进制显示的是4位。当输入内容不符合程序要

26、求时,仪器会发出警报,并且重新选择,直到选择或者数入正确为止。5心得体会 本次实验设计的提点是将不同进制的输入输出分别写成功能不同的函数,不近翻遍调用,而且只需定义一次,不可以重复调用,可以简化程序。 我的收获是对数制转换的原理有了叫较为清楚的理解,可以解释原来不懂的程序,对应各种寄存器的跳转有了一定的了解,同时认识到由于寄存器的数量有限,我们有时侯不得不进行出栈和入栈了,这样可以解决有时候寄存器不够的情况,对应进一步学习汇编有了一定的推动作用,汇编基础有了一定的提高,这个课程设计让我对汇编重新复习一遍。汇编语言程序设计是一门很抽象的学科,学起来也比较乏味。一开始学的时候感觉很难,也没什么兴趣

27、。但随着学习的推进,以及上机编程,逐渐感到轻松。在这次课程设计中,让我更加熟悉了汇编语言的一些基本的指令;掌握了汇编语言的一些基本的中断调用功能,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制;能够熟练的利用子程序和宏进行编程。在设计过程中,不断对程序进行修改、改进,增强了自己分析问题、解决问题的能力;在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器、存储器等工作原理以及一些指令执行后对它们的改变,例如INT指令会改变AL的值,在编程时应注意这方面的问题。在编写过程中,让我深刻的体会到了搞科学的严谨性。有时一个逗号或者写错一个字母

28、这样一点点小小的错误,就会产生十几个错误,导致调试的失败。不管做什么事,都要认认真真,否则就会得不偿失了。当设计一步步接近成功,每一个子程序的调试成功,都让自己感到喜悦,从中体会到了编程的乐趣,有一种成就感,也让自己树立了信心,增强了对汇编语言程序设计的兴趣。通过这次的课程设计,让我对汇编有了更进一步的认识,加强了我用汇编语言编程的能力。 参考文献1 易先清. 微机计算机原理与应用. 北京:电子工业出版社,20012 裘雪红等微型计算机原理与接口技术西安:电子科技大学出版社,20013 潘新民等微型计算机原理 汇编 接口技术北京:希望电子出版社,20024 李文英,刘星,宋蕴新,李勤微机原理与接口技术北京:清华大学出版社,20015 钱晓捷,陈涛16/32位微机原理 、汇编语言及接口技术北京:机械工业出版社,20016 沈美明,温冬婵IBM-PC汇编语言程序设计北京:清华大学出版社,2001

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

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