10进制转16进制汇编语言
- 格式:doc
- 大小:19.50 KB
- 文档页数:3
此属本人原创请尊重知识产权:多字节十六进制转换为十进制(多字节十六进制除十运算)MOV 40H,#0FFH ;三字节数据的低位存放地址MOV 41H,#0FFHMOV 42H,#0FFH ;三字节数据的高位存放地址MOV R0,#50H ;转换后十进制数存放的首地址(个位)MOV R2,#7 ;取十进制的位数减一(如FFFFFFH转换为十进制是16777215,八位减一就是7)CFYS:MOV R1,#40H ;给高字节地址MOV B,#00H ;避免影响下一轮运算SCCF:MOV A,@R1ANL A,#0F0H ;屏蔽低四位ORL A,B ;合并给A(被除数)SWAP AMOV B,#10DIV ABSWAP A ;高位在AXCH A,@R1 ;商高位在ANL A,#0FH ;屏蔽高四位XCH A,BSWAP AORL A,B ;合并给A(被除数)MOV B,#10DIV ABORL A,@R1 ;合并给A(被除数)MOV @R1,AINC R1CJNE R1,#43H,SCCF ;是否完成一次除十运算MOV @R0,BINC R0DJNZ R2,CFYS ;是否完成全部运算MOV @R0,A(以上程序编写于2014/10/03上午)BCD码和十六进制的转换大家都知道汇编语言里把十六进制转换为BCD码用DA指令,但是没有哪条指令能把BCD码转换为16进制,我曾经也很为此困惑,但最终我解决了此问题,看程序!假如R0里储存的是37分钟的BCD码,那么R0里的数是37H,要把它转换成37的十六进制25H存入R1中。
我们现实的算法是37/16=25H就可以得出结果,但是机器没那么聪明,因为37H是十六进制。
汇编程序解决的方法如下:MOV A,R0 ;ANL A,#0FH ;屏蔽高4位(即屏蔽分钟的十位)MOV R2,A ;把个位的值给R2MOV A,R0 ;ANL A,#0F0H ;屏蔽低4位(即屏蔽分钟的个位)SWAP A ;高低字节互换MOV B,#10 ;给B赋值(也可以赋0AH)MUL AB ;A乘B得出十位的十六进制值ADD A,R2 ;十位的值加上个位的值MOV R1,A ;把转换好的十六进制值给R1(以上程序编写于2014/09/13中午)。
十进制转16
10进制数转换成十六进制数,这是一个连续除以16的过程:把要转换的数,除以16,得到商和余数,将商继续除以16,直到商为0。
常见进制后缀字母表示:
B :二进制数。
Q :八进制数。
D :十进制数。
H :十六进制数。
后缀进制标识,只作为进制表示而用,不做计算。
对于十进制数通常不加后缀,也即十进制数后的字母 D 可省略。
十六进制--->十进制
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。
字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
假设有一个十六进数 2AF5, 那么如何换算成10进制?
用竖式计算:
可以看出,所有进制换算成10进制,关键在于各自的权值不同。
课程设计报告--汇编程序设计(进制转换)汇编语言课程设计报告:代码与数制之间的转换内容提要:本课程设计的主要内容是代码与数制之间的转换~程序的主要功能如下:1. 将十六进制数转换成其对应的ASCII码2. 将ASCII码转换成其对应的十六进制数3. 实现二进制数与十六进制数之间相互转换4. 实现十进制数与二进制数之间相互转换5. 实现十六进制数与十进制数之间相互转换数制转换是计算机科学技术中最为基础的运算~在日常生活中~人们习惯性地使用十进制数进行计算。
而在计算机内部~所有的信息,数、字符、汉字、计算机的指令、状态,都是用二进制数来表示的。
在计算机中~二进制数的运算、处理比十进制数的更容易实现。
有时为了缩短书写~在计算机中还采用十六进制数。
所以~我们需要把数从二进制数形式转换成其他进制的形式~甚至在不同的进位制之间进行转换。
- 1 -汇编语言课程设计报告:代码与数制之间的转换目录一、前言〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 1.1 程设计的目的〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 1.2 代码与数制之间的转换程序的意义〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 1.3 数制之间的转换程序的主要功能〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3正文〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 二、2.1 代码与数制之间相互转换程序的设计大纲〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 2.2 代码与数制之间相互转换程序的结构图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃4 2.3 友好交互界面结构图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃5 2.4 程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃62.4.1 主程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃62.4.2 键盘输入子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃62.4.3 ASC码转16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃72.4.4 16进制转ASC进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃82.4.5 2,16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃82.4.6 2?16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃92.4.7 16?2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃92.4.8 2~10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃102.4.9 2?10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃102.4.10 10?2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃112.4.11 10~16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃112.4.12 10?16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃122.4.13 16?10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃12三、源程序及其注释〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃13四、课程设计体会〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃29五、参考文献〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃29- 2 -汇编语言课程设计报告:代码与数制之间的转换课程设计题目:代码与数制之间的转换一、前言1.1 课程设计的目的, 加深对汇编语言课程理论方面的理解, 通过编写一定规模和难度的程序,进行一次较全面的汇编编程训练,提高分析问题和解决问题的能力, 提高调试程序的能力1.2 代码与数制之间的转换程序的意义数制转换是计算机科学技术中最为基础的运算,在日常生活中,人们习惯性地使用十进制数进行计算。
16进制和10进制转换公式十六进制和十进制是计算机中常用的进制系统,用于表示和处理数字。
在计算机科学中,经常需要进行十六进制和十进制之间的转换。
本文将介绍十六进制和十进制的转换公式及其应用。
一、十六进制和十进制的基本概念十六进制是一种基数为16的数制,使用0-9和A-F(或a-f)表示数字。
其中,A-F分别表示十进制的10-15。
十进制是一种基数为10的数制,使用0-9表示数字。
二、十六进制转换为十进制1. 将十六进制数的每一位按权展开,从右到左依次乘以16的幂,幂的值从0开始递增。
2. 将每一位的结果相加即可得到十进制数。
例如,将十六进制数3A转换为十进制:3A = 3 * 16^1 + A * 16^0= 3 * 16 + 10 * 1= 48 + 10= 58三、十进制转换为十六进制1. 将十进制数不断除以16,直到商为0为止,将每一步的余数保留下来。
2. 将得到的余数从下往上排列,得到的即为十六进制数。
例如,将十进制数42转换为十六进制:42 ÷ 16 = 2 余 10(A)2 ÷ 16 = 0 余 2所以,42的十六进制表示为2A。
四、十六进制和十进制的应用1. 存储和传输数据:在计算机中,数据可以以十六进制或十进制的形式进行存储和传输。
十六进制常用于表示字节数据,如内存地址、颜色值等;而十进制则常用于表示整数、浮点数等。
2. 编程语言:十六进制常用于编程语言中表示特殊字符、转义序列等。
例如,在C语言中,'\x41'表示字符'A',其中\x表示后面的两位是十六进制数。
3. 网络协议:在网络通信中,十六进制常用于表示数据包的各个字段。
例如,在IP协议中,IP地址可以用十进制或十六进制表示。
4. 数据分析:在数据分析中,十六进制和十进制常用于处理和分析数据。
例如,在数据恢复中,十六进制可以用于查找特定的文件头标识符。
五、总结本文介绍了十六进制和十进制之间的转换公式及其应用。
matlab10进制和16进制转换Matlab中的十进制和十六进制转换引言:在计算机科学中,数字的表示方式有多种,其中最常见的是十进制和十六进制。
在Matlab中,我们可以轻松地进行十进制和十六进制之间的转换。
本文将介绍如何在Matlab中进行这种转换。
一、什么是十进制和十六进制?1. 十进制:十进制是我们日常生活中最常用的数字表示方式。
它是一种基数为10的数字系统,使用了10个基本数字0-9。
2. 十六进制:十六进制是一种基数为16的数字系统,它使用了16个基本数字0-9和字母A-F。
十六进制中,A代表10,B代表11,以此类推,F 代表15。
十六进制常用于计算机科学和工程领域,因为它可以更紧凑地表示二进制数字。
二、十进制转换为十六进制:在Matlab中,我们可以使用dec2hex函数将十进制数字转换为十六进制。
该函数的语法如下:hex = dec2hex(dec)其中,dec是要转换的十进制数字,hex是转换后得到的十六进制数字。
例如,如果我们要将十进制数字15转换为十六进制,可以使用以下代码:dec = 15;hex = dec2hex(dec);disp(hex);运行结果为"F",这就是15的十六进制表示。
三、十六进制转换为十进制:在Matlab中,我们可以使用hex2dec函数将十六进制数字转换为十进制。
该函数的语法如下:dec = hex2dec(hex)其中,hex是要转换的十六进制数字,dec是转换后得到的十进制数字。
例如,如果我们要将十六进制数字"1F"转换为十进制,可以使用以下代码:hex = '1F';dec = hex2dec(hex);disp(dec);运行结果为31,这就是"1F"的十进制表示。
四、在Matlab中进行进制转换的应用案例:现在我们来看一个实际的应用案例,假设我们有一个十进制的RGB 颜色值,我们想要将其转换为十六进制表示。
十进制和十六进制是计算机中常见的数制。
在计算机中,数据存储和处理都是以二进制的形式进行的,而在实际的编程中,为了方便人类阅读和书写代码,常常使用十进制和十六进制进行表示。
了解十进制和十六进制之间的转换方法对于理解计算机编程及相关知识至关重要。
一、十进制和十六进制的定义和特点1. 十进制定义:十进制是我们日常生活中常用的数制,有0-9十个数字,每一位的权值是10的幂次方。
2. 十六进制定义:十六进制是一种使用16个数字(0-9以及A-F)来表示数字的数制,每一位的权值是16的幂次方。
二、十进制向十六进制的转换方法1. 整数部分转换:将十进制整数部分不断除以16,将余数写下来,直至商为0为止,然后将余数倒过来即为对应的十六进制数。
示例:将十进制数2348转换为十六进制步骤一:2348 ÷ 16 = 146……12(C)步骤二:146 ÷ 16 = 9 (2)步骤三:9 ÷ 16 = 0 (9)所以2348的十六进制为92C。
2. 小数部分转换:将十进制小数部分乘以16,将得到的整数部分作为十六进制的位,将小数部分乘16再取整,直至小数部分为0或者达到要求的精度。
例如:0.625 转换为十六进制的结果为0.A。
三、十六进制向十进制的转换方法1. 整数部分转换:将十六进制的每一位乘以16的幂次方,然后相加即可得到对应的十进制数。
示例:将十六进制数3A7转换为十进制3A7 = 3×16^2 + 10×16^1 + 7×16^0 = 9352. 小数部分转换:将十六进制小数部分转化为十进制,并且将结果除以16取余再乘16,得到的整数部分作为十进制的小数部分。
例如:0.A 转化为十进制的结果为0.625。
四、注意事项与常见问题1. 在进行十进制和十六进制的转换过程中需要小心保持数字的准确性,一旦出现计算错误可能会导致结果的失真。
2. 在实际编程中,经常会涉及到各种进制的转换,因此掌握进制转换的方法是非常重要的。
很完整的2、8、10、16进制转换方法最近在研究C语言,因为要用到各进制间转换,所以收集了一些资料…这是一节“前不着村后不着店”的课。
不同进制之间的转换纯粹是数学上的计算。
不过,你不必担心会有么复杂,无非是乘或除的计算。
生活中其实很多地方的计数方法都多少有点不同进制的影子。
比如我们最常用的10进制,其实起源于人有10个指头。
如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。
至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。
生活中还有:七进制,比如星期。
十六进制,比如小时或“一打”,六十进制,比如分钟或角度……我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用‘\77′来表示’?'。
由于是八进制,所以本应写成‘\077′,但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6.2.4小节的内容,大家仅仅了解就行。
6.2.5 十六进制数转换成十进制数2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。
字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
假设有一个十六进数 2AF5, 那么如何换算成10进制呢?用竖式计算:2AF5换算成10进制:第0位: 5 * 16^0 = 5第1位: F * 16^1 = 240第2位: A * 16^2 = 2560第3位: 2 * 16^3 = 8192 +————————————-10997直接计算就是:5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997(别忘了,在上面的计算中,A表示10,而F表示15)现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。
⼆进制、⼗进制、⼗六进制相互转换1.⼆进制->10进制例如:1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13转化成⼗进制要从右到左⽤⼆进制的每个数去乘以2的相应次⽅不过次⽅要从0开始2.⼆进制转16进制:要将⼆进制转为16进制,只需将⼆进制的位数由右向左每四位⼀个单位分隔,分的不够的前边补零,⽤四位数的⼆进制数来代表⼀个16进制。
说的⽐较啰嗦,就是2^4=16,每四位⼆进制正好是1位16进制例如: 10112->0001 0112->18 (16)3. 10进制->2进制⽤10进制数不断除2,取余,余数倒写。
例如:302302/2 = 151 余0151/2 = 75 余175/2 = 37 余137/2 = 18 余118/2 = 9 余09/2 = 4 余14/2 = 2 余02/2 = 1 余01/2 = 0 余1 故⼆进制为1001011104. 10进制转16进制:原理与转2进制⼀样,不断除16取余,余数倒写。
例如:23785/16=1486余9,1486/16=92余14,92/16=5余12,5/16=0余5⼗六进制中,10对应为a,11对应为b,15对应为f,再将余数倒写为5ce9,则⼗进制23785=⼗六进制5ce95. 16进制转10进制:与2进制转10进制⼀样。
例如:把上⾯的5ce9转成10进制:9*16^0+e*16^1+c*16^2+5*16^3 = 237856. 16进制转⼆进制:就把⼆进制转16进制倒过来就可以,16进制的每⼀位对应⼆进制的4位。
例如:ABA ->1010 B->1011 AB->10101011。
一、介绍10进制和16进制的概念1. 10进制:十进制是我们日常生活中最常用的计数方式,采用0-9十个数字表示数值。
2. 16进制:十六进制是一种计数方式,采用0-9和A-F共16个数字表示数值,适合于计算机处理二进制数据。
二、10进制转16进制的方法和步骤1. 取余法:将10进制数除以16,得到的余数就是16进制数的一位,然后将商继续除以16,直到商为0。
2. 举例说明:以37为例进行10进制转16进制,37÷16=2余5,商2继续除以16,得到0余2,所以37的16进制表示为25。
三、10进制转16进制的算法1. 计算方法:将10进制数逐步除以16,并记录下每一步的余数,然后将余数按照逆序排列即可得到16进制数。
2. 算法步骤:将10进制数A除以16得到商B和余数C,重复除以16的操作,直到商为0为止,然后将所有的余数倒序排列得到16进制数。
四、实际应用1. 计算机科学:在计算机领域,对于大整数的表示和计算,往往需要用到16进制表示,便于进行位运算和存储。
2. 网络通信:在网络通信中,IP位置区域和MAC位置区域常常使用16进制表示,便于网络设备的识别和寻址。
五、10进制转16进制的相关知识1. 二进制和16进制:16进制和二进制相互转换非常方便,因为每一位16进制数都对应4位二进制数,可以直接转换。
2. 16进制与ASCII码:16进制数和ASCII码之间有着密切的通联,例如字母A对应的ASCII码就是41,即十六进制的41。
六、总结1. 10进制转16进制是一种十分常见的数制转换方法,适用于计算机领域和网络通信等多个领域。
2. 掌握10进制转16进制的方法和原理,有助于理解计算机底层运行机制和网络数据传输原理。
七、拓展阅读1. 《计算机科学导论》:该书介绍了计算机科学中的数制转换、数据表示等基础知识,对深入了解10进制和16进制有着极大帮助。
2. 《网络通信原理》:这本书详细介绍了网络通信中的数据表示和传输机制,是深入理解16进制在网络通信中的应用的好书籍。
四、进制的转换目标:熟悉各进制之间的转换规则,计算机中级考证也会考到。
要求做到给出一个十进制,能够做到各进制之间互相转换。
在编程中,我们的变量通常用10进制表示;不过,在计算机内存中,数据是以二进制的形式存在的,所以我们作为一个程序员应该要熟悉的掌握各进制之间的转换,本章不讲补码和反码的知识,有需要了解的自行百度学习。
计算机分二进制、八进制、十进制、十六进制二进制:采用0和1表示//规则:逢二进一如:1010八进制:采用0~7这八个数表示//规则:逢八进一,在程序中表示八进制要在这个数的前面加个0 如:055十进制:采用0~9这10个数表示//规则:逢九进一如:95十六进制:用16个阿拉伯数字表示,但我们只有0~9这十个数字,所以我们用A、B、C、D、E、F这五个数字表示10、11、12、13、14、15,字母不区分大小写。
//规则:逢十六进一,在程序中表示16进制要在这个数的前方加上0x 如:0x6e10进制转2进制:例子:将十进制‘100 ’转成二进制最后得出的二进制是:1100100 //将得出的余数倒过来写转换规则:将10进制数除以2,得出的商继续除以2,直到商不够2为止,取余数,倒写,就是转换后的2进制数2进制转10进制:例子:将二进制‘100’转换成十进制第一步 1 0 0第二步 2 1 0//二进制对应的下标,自右向左0开始第三步1*2^2+0*2^1+0*2^0 = 4+0+0 = 4//2的0次方为1最后得出的十进制是:4转换规则:将二进制自右向左加上下标,0~n(n为二进制的位数减1),然后用二进制第1位的值*2^0+二进制第2位的值*2^1+二进制第n位的值+2^(n-1),最后相加的和就是计算出的十进制//二进制的位数是自右向左数的10进制转8进制:例子:将十进制‘100’转成八进制最后得出的八进制是:144 //将得出的余数倒写转换规则:将10进制数除以8,得出的商继续除以8,直到商不够8为止,取余数,倒写,就是转换后的8进制数8进制转10进制:例子:将八进制‘144’转成十进制第一步 1 4 4第二步 2 1 0//八进制对应的下标,自右向左0开始第三步1*8^2+4*8^1+4*8^0 = 64 + 32 +4 = 100最后得出的十进制是:100转换规则:将八进制自右向左加上‘下标’,0~n(n为八进制的位数减1),然后用八进制第1位的值*8^0+八进制第2位的值*8^1+八进制第n位的值+8^(n-1),最后相加的和就是计算出的十进制//八进制的位数是自右向左数的10进制转16进制:例子:将十进制‘100’转成十六进制最后得出的十六进制是:64 //将得出的余数倒写转换规则:将10进制数除以16,得出的商继续除以16,直到商不够16为止,取余数,倒写,就是转换后的16进制数16进制转10进制:例子:将十六进制‘64’转换成十进制第一步 6 4第二步 1 0//十六进制对应的下标,自右向左0开始第三步6*16^1+4*16^0 = 96 + 4 = 100最后得出的十进制是:100转换规则:将十六进制自右向左加上‘下标’,0~n(n为十六进制的位数减1),然后用十六进制第1位的值*16^0+十六进制第2位的值*16^1+十六进制第n位的值+16^(n-1),最后相加的和就是计算出的十进制//十六进制的位数是自右向左数的2进制转8进制:例子:将二进制‘10001000’转换成八进制第一步 1 0 ,0 0 1,0 0 0第二步 2 1 , 4 2 1, 4 2 1第三步 2 0 ,0 0 1,0 0 0第四步 2 , 1 ,0最后得出的八进制是:210转换规则:将2进制数自右至左每3位分成一段,不够3位的可以前面补零;每段分别对应口诀421(八进制是逢八进一的,在2进制中07的表示方法是111;所以口诀是这么来的1*2^2+1*2^1+1*2^0),第一位为4,第二位为2,第三位为1;然后将每段二进制为1时对应口诀的数字相加,(如果当前位对应的二进制是0,则该位为0);二进制可以分成几段,代表八进制的位数。
;(2)数制转换
;将输入的一个数据以不同进制形式输出。
;要求:
;(a)所有数字从键盘输入;
;(b)输入数据为任意一个小于十万的十进制数据;
;(c)将所输入数据以十六进制在屏幕显示输出(即十进制转十六进制)。
DA TA SEGMENT
KEYBUFFER DB 100
DB 0
DB 100 DUP(0)
STRING1 DB 'Please input decimal data:',' $'
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,ES:DA TA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,STRING1 ;显示提示输出
MOV AH,09H
INT 21H
MOV AH,0AH
LEA DX,KEYBUFFER
INT 21H
LEA SI,KEYBUFFER+1
CALL TRANS10TO16
CALL DISPCR
CALL DISPAX
CALL DISPCR
MOV AX,BX
CALL DISPAX
MOV AH,4CH
INT 21H
DISPAL PROC NEAR
PUSH AX
PUSH CX
PUSH DX
PUSH AX
MOV CL,4 ;处理高位十六进制数
SHR AL,CL
CALL CHANG ;十六进制数变换成ASCII码
MOV AH,02
MOV DL,AL
POP AX
AND AL,0FH ;处理低位十六进制数
CALL CHANG ;同上解释
MOV AH,02
MOV DL,AL
INT 21H
POP DX
POP CX
POP AX
RET
DISPAL ENDP
CHANG PROC NEAR ;数码转换
CMP AL,10
JNGE CHANG1
ADD AL,7
CHANG1:
ADD AL,30H
RET
CHANG ENDP
DISPAX PROC NEAR
XCHG AL,AH
CALL DISPAL
XCHG AH,AL
CALL DISPAL
RET
DISPAX ENDP
DISPCR PROC NEAR
PUSH AX
PUSH DX
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,2
MOV DL,0DH
INT 21H
POP DX
POP AX
RET
DISPCR ENDP
;将输入缓冲区中以ASCII码表示的十进制数转换成16位二进制数TRANS10TO16 PROC NEAR
PUSH CX
PUSH DX
XOR AX,AX
XOR CX,CX
MOV CL,[SI]
INC SI
MOV AL,[SI]
INC SI
SUB AL,30H
DEC CX
JCXZ TRANSF2 MOV BX,10 TRANSF1:
MUL BX
JC TRANSF_ERR MOV DL,[SI]
INC SI
SUB DL,30H
ADD AL,DL
ADC AH,0
JC TRANSF_ERR LOOP TRANSF1 MOV BX,0 TRANSF2:
JMP TRANSF_OK TRANSF_ERR:
MOV BX,-1 TRANSF_OK:
POP SI
POP DX
POP CX
RET
TRANS10TO16 ENDP CODE ENDS
END START。