十六进制数转换为二进制数程序
很完整的2、8、10、16进制转换方法
比如 00000000 00000000 00000000 00000101 是 5的 原码。
生活中其实很多地方的计数方法都多少有点不同进制的影子。
比如我们最常用的10进制,其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。
至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。
生活中还有:七进制,比如星期。十六进制,比如小时或“一打”,六十进制,比如分钟或角度……
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。字母不区分大小写。
我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 ‘\77′来表示’?'。由于是八进制,所以本应写成 ‘\077′,但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6.2.4小节的内容,大家仅仅了解就行。
0000 = 0 + 0 + 0 + 0 = 0 0
二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):
十六进制数互相转换
二、十六进制数互相转换2006年11月24日 星期五 22:01二进制和十六进制的互相转换比较重要。
不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。
我们也一样,只要学完这一小节,就能做到。
首先我们来看一个二进制数:1111,它是多少呢?你可能还要这样计算:1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。
然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。
即,最高位的权值为23 = 8,然后依次是 22 =4,21=2, 20 = 1。
记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。
下面列出四位二进制数 xxxx 所有可能的值(中间略过部分)仅4位的2进制数 快速计算方法 十进制值 十六进值1111 = 8 + 4 + 2 + 1 = 15 F1110 = 8 + 4 + 2 + 0 = 14 E1101 = 8 + 4 + 0 + 1 = 13 D1100 = 8 + 4 + 0 + 0 = 12 C1011 = 8 + 4 + 0 + 1 = 11 B1010 = 8 + 0 + 2 + 0 = 10 A1001 = 8 + 0 + 0 + 1 = 10 9....0001 = 0 + 0 + 0 + 1 = 1 10000 = 0 + 0 + 0 + 0 = 0 0二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):1111 1101 , 1010 0101 , 1001 1011 F D , A 5 , 9 B反过来,当我们看到 FD时,如何迅速将它转换为二进制数呢?先转换F:看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。
进制转换程序代码
进制转换程序代码介绍进制转换是计算机科学中的一项基础技能,它将一个数值从一种进制表示转换为另一种进制表示。
在计算机编程中,常见的进制包括二进制、八进制、十进制和十六进制。
编写一个进制转换程序,可以让我们在不同进制之间进行转换,方便我们在计算机编程中进行数值计算和数据处理。
二进制转换二进制是计算机中最基础的进制,它只包含0和1两个数字。
在二进制中,每一位的权值是2的幂次,从右往左依次增加。
例如,二进制数1101表示为:(1 * 2^3) + (1 * 2^2) + (0 * 2^1) + (1 * 2^0) = 13我们可以使用以下步骤将一个十进制数转换为二进制数:1.将十进制数除以2,得到商和余数。
2.将余数写在右边,得到二进制数的最低位。
3.将商作为新的十进制数,重复步骤1和2,直到商为0为止。
例如,将十进制数13转换为二进制数的过程如下:13 / 2 = 6 余 16 / 2 = 3 余 03 / 2 = 1 余 11 /2 = 0 余 1所以,十进制数13的二进制表示为1101。
八进制转换八进制是一种基数为8的进制,它使用0-7这8个数字表示数值。
在八进制中,每一位的权值是8的幂次,从右往左依次增加。
例如,八进制数35表示为:(3 * 8^1) + (5 * 8^0) = 29我们可以使用以下步骤将一个十进制数转换为八进制数:1.将十进制数除以8,得到商和余数。
2.将余数写在右边,得到八进制数的最低位。
3.将商作为新的十进制数,重复步骤1和2,直到商为0为止。
例如,将十进制数29转换为八进制数的过程如下:29 / 8 = 3 余 53 / 8 = 0 余 3所以,十进制数29的八进制表示为35。
十六进制转换十六进制是一种基数为16的进制,它使用0-9和A-F这16个数字表示数值,其中A表示10,B表示11,依此类推。
在十六进制中,每一位的权值是16的幂次,从右往左依次增加。
例如,十六进制数3F表示为:(3 * 16^1) + (F * 16^0) = 63我们可以使用以下步骤将一个十进制数转换为十六进制数:1.将十进制数除以16,得到商和余数。
二进制数八进制数十进制数十六进制数相互转换方法
二进制数八进制数十进制数十六进制数相互转换方法二进制、八进制、十进制和十六进制是常用的数值系统,它们在计算机科学、电子工程和计量学等领域有广泛的应用。
本文将介绍二进制到八进制、十进制、十六进制的转换方法,以及这些数制之间的互相转换方法。
一、二进制数转换为八进制数、十进制数和十六进制数:1.二进制数转换为八进制数:111001->712.二进制数转换为十进制数:从二进制数的右侧开始,将每一位的值与对应的权重进行相乘,然后将乘积相加,即可得到十进制数。
例如,二进制数1011转换为十进制数的步骤如下:1*2^3+0*2^2+1*2^1+1*2^0=8+0+2+1=11因此,二进制数1011转换为十进制数113.二进制数转换为十六进制数:10011010->9A二、八进制数转换为二进制数、十进制数和十六进制数:1.八进制数转换为二进制数:将八进制数的每一位转换为对应的3位二进制数。
例如,八进制数71转换为二进制数的步骤如下:7->1111->0012.八进制数转换为十进制数:从八进制数的右侧开始,将每一位的值与对应的权重进行相乘,然后将乘积相加,即可得到十进制数。
例如,八进制数71转换为十进制数的步骤如下:7*8^1+1*8^0=56+1=57因此,八进制数71转换为十进制数573.八进制数转换为十六进制数:将八进制数转换为二进制数,然后将二进制数转换为十六进制数。
例如,八进制数71转换为十六进制数的步骤如下:7->1111->001111001->9A因此,八进制数71转换为十六进制数9A。
三、十进制数转换为二进制数、八进制数和十六进制数:1.十进制数转换为二进制数:将十进制数不断除以2,直到商为0,将每一步的余数按从低位到高位的顺序排列,即可得到对应的二进制数。
例如,十进制数11转换为二进制数的步骤如下:11/2=5余15/2=2余12/2=1余01/2=0余1因此,十进制数11转换为二进制数10112.十进制数转换为八进制数:将十进制数不断除以8,直到商为0,将每一步的余数按从低位到高位的顺序排列,即可得到对应的八进制数。
重要的2、8、10、16进制互相转换方法
重要的2、8、10、16进制互相转换方法重要的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进制,关键在于各自的权值不同。
一篇教程教你学会Python进制转换(十进制转二进制、八进制、十六进制)
⼀篇教程教你学会Python进制转换(⼗进制转⼆进制、⼋进制、⼗六进制)⼀、导⾔导语:在计算机进⾏数据交换时,常常会有⼀个进制转换的过程,我们知道计算机只认0 和 1.在内存系统中,基本基于⼆进制进⾏运算的,但是有时候数据过于庞⼤,为了⽅便存储管理,计算机会使⽤⼗六进制存储数据,但是怎么实现数据转换呢?我们⼈类由⼗根⼿指头,所以⾃然就使⽤⼗进制啦,每当我们数数字到10之后,于是就重0 开始继续数,所以逢⼗进⼀就这么来了。
对于其它进制呢,也是同样的,⽐如最常见的⼆进制,也就是逢⼆进⼀,慢慢来,依次类推,所以数学的世界是多么的奇妙呀!今天给⼤家带来的是使⽤ Python 实现进制转换,内容包括如下:dec(⼗进制)—> bin(⼆进制)dec(⼗进制)—> oct(⼋进制)dec(⼗进制)—> hex(⼗六进制)⼆、各种进制介绍在转换之前,我们先了解以下各种进制⼗进制(Decimal)我们所熟知的⼗进制,其实是从 0 开始,数到 9 之后,就跳到 10,这样就变成了 10,数数⼤家总会把⼆进制(Binary)⼆进制同理,从 0 开始也就是 00(前⾯的⼀个0可以省去,但是为了更好的描述,所以保留),到 01,也变成了 10【对应⼗进制中的 3】,然后是 11【对应⼗进制中的 4】,100【⼗进制中的5】。
以此类推因为⼆进制的英⽂单词是 binary,所以在计算机运算的过程中,使⽤⼆进制会⽤如下⽅法,0b11(4),0b1101(13)等等⼋进制(Octal)理解了⼆进制,在理解⼋进制就很容易了,⼋进制是逢⼋进⼀,范围是 0~7,对⽐⼀下⼆进制,就很好理解啦!!⼗六进制(Hexadecimal)⼗六进制就可能会相对复杂⼀点点,⼗六进制是⽤数字 0~9 和英⽂字母 A - F(⼤⼩写随意) 表⽰,因此 A代表 10, F代表15。
为什么在计算机领域中,⼗六进制⽤途会如此⼴泛呢?给⼤家看⼀个对⽐:当数据⽐较⼤的时候,⼆进制显然不再那么使⽤,再看使⽤⼗六进制,就简短很多。
(完整word版)微机实验--十六进制数转换为二进制数程序
一、实验目的掌握键盘接收数据的方法,并了解键盘数据显示时需要转换为ASCII码及转换原理。
二、实验内容编写程序,将键盘键入的四位十六进制数转换为等值的二进制数,并在屏幕上显示。
三、程序流程图十六进制数转换为二进制数程序流程图四、实验源程序PUSH AXPUSH DXMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HPOP DXPOP AXENDMDATA SEGMENTMESS DB 'INPUT HEXNUMBER:','$'ERROR DB 'INPUT ERROR',0DH,0AH,'$'DATA ENDSSTACK SEGMENTSTA DW 32 DUP(?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV SP,TOPLLL: MOV AH,09HMOV DX,OFFSET MESSINT 21HCRLFXOR DX,DXMOV BL,04HGGG: MOV AH,01HINT 21HCMP AL,0DHJZ PPPCMP AL,20HJZ PPPCMP AL,30HJB KKKSUB AL,30HCMP AL,0AHJB KKKSUB AL,07HCMP AL,0FHJBE GETSCMP AL,2AHJB KKKJA KKKSUB AL,20HGETS: MOV CL,04HSHL DX,CLXOR AH,AHADD DX,AXDEC BLJNZ GGGCRLFCALL ZHXSCRLFJMP LLLKKK: PUSH DXCRLFMOV AH,09HMOV DX,OFFSET ERRORINT 21HPOP DXPPP: CRLFCALL ZHXSMOV AX,4C00HINT 21HZHXS PROCMOV BX,DX TTT: ROL BX,1MOV DL,BLAND DL,01HADD DL,30HMOV AH,02HINT 21HLOOP TTTRETZHXS ENDP CODE ENDSJB GETSCMP AL,11HEND START五、实验结果六、思考题键盘接收的字符是什么形式的?程序中是如何转换的?答:键盘接收到的字符是ASCII码形式。
python进制转换程序设计
python进制转换程序设计Python进制转换程序设计一、引言进制转换是计算机科学中的基本操作之一,而Python作为一门强大的编程语言,也提供了丰富的函数和方法来进行进制转换。
本文将介绍如何使用Python编写一个简单的进制转换程序,以及一些常用的进制转换方法。
二、程序设计1. 十进制转二进制要将十进制数转换为二进制数,可以使用Python内置函数bin()。
该函数将十进制数转换为以"0b"开头的二进制字符串。
例如,将十进制数10转换为二进制数,可以使用以下代码:```decimal_num = 10binary_num = bin(decimal_num)print(binary_num) # 输出:0b1010```2. 十进制转八进制要将十进制数转换为八进制数,可以使用Python内置函数oct()。
该函数将十进制数转换为以"0o"开头的八进制字符串。
例如,将十进制数15转换为八进制数,可以使用以下代码:```decimal_num = 15octal_num = oct(decimal_num)print(octal_num) # 输出:0o17```3. 十进制转十六进制要将十进制数转换为十六进制数,可以使用Python内置函数hex()。
该函数将十进制数转换为以"0x"开头的十六进制字符串。
例如,将十进制数255转换为十六进制数,可以使用以下代码:```decimal_num = 255hex_num = hex(decimal_num)print(hex_num) # 输出:0xff```4. 二进制转十进制要将二进制数转换为十进制数,可以使用Python内置函数int()。
该函数将字符串表示的二进制数转换为十进制数。
例如,将二进制数"1010"转换为十进制数,可以使用以下代码:```binary_num = "1010"decimal_num = int(binary_num, 2)print(decimal_num) # 输出:10```5. 八进制转十进制要将八进制数转换为十进制数,可以使用Python内置函数int()。
16进制122转换成2进制算法
16进制数是计算机中常见的一种进制表示方法,通常在编程和数据存储中使用。
在这种表示方法中,数字0-9分别用十进制或十进制的对应数字表示,而A-F分别代表10-15这6个数字,因此16进制数可以表示从0到15共16个数字。
在计算机中,16进制数经常需要转换成2进制数进行进一步的计算或处理。
本文将介绍122这个16进制数如何转换成2进制数的算法。
1. 将16进制数122每一位转换成4位的2进制数。
122这个16进制数可以分解为1、2、2三位16进制数,将每一位分别转换成4位的2进制数:1 -> 00012 -> 00102 -> 00102. 将各个位的2进制数拼接在一起。
将上一步中得到的三个4位2进制数拼接在一起,得到122这个16进制数对应的2进制数:0001 0010 00103. 去掉多余的0。
可以去掉前面的0,得到最终的2进制数表示:xxx通过以上步骤,我们成功将16进制数122转换成了2进制数xxx。
这个转换算法可以应用于任意的16进制数到2进制数的转换中。
补充说明:- 在实际的计算机编程中,通常会使用现成的编程语言或函数来进行进制之间的转换,例如在Python中可以使用内置函数hex()和bin()来进行16进制和2进制之间的转换。
但是了解这种转换的算法和原理也是非常有帮助的。
- 还可以利用16进制和2进制之间的规律来进行快速的转换。
一个16进制数中的每个数字都可以对应成4位的2进制数,这种对应关系可以事先准备好,以便快速进行转换。
这在一些需要大量处理进制转换的场景中非常有用。
总结本文介绍了16进制数122转换成2进制数的算法,通过将16进制数的每一位分别转换成4位的2进制数,然后将各个位的2进制数拼接在一起,并去掉多余的0,最终得到了122对应的2进制数。
了解这种转换算法和原理可以帮助我们更好地理解计算机内部的数据表示方式,有助于我们在编程和数据处理中进行进制转换和数据操作。
十六进制与二进制数的相互转换
十六进制与二进制数的相互转换
人们往往都是采用十进制数的形式表示和使用数据,但这显然远远不能满足我们的要求,因为我们经常需要利用程序来实现日常任务的自动化,这就需要更精简的表示方法,为了满足这些需求,就有了十六进制和二进制的出现。
十六进制,又称为Hex,是一种进制,类似于十进制,它采用0-9、a-f共16个数字表示,字母全部小写。
它的特点是可以精简数据,例如十进制888可以用十六进制表示为378,简洁4个字节的表示。
二进制,又称为Binary,是一种进制,它跟十进制是完全不同的,它采用0和1两个数字表示,0和1可以被视为是开关的意思,例如黑白二色就可以由0和1来表示,电脑也可以通过0和1实现很复杂的功能。
不管是十六进制还是二进制,它们都是为了简化计算机使用的数据而创造出来的,而在计算机程序中,0和1有着重要的作用,不管你处理的数据是多少,它们总可以转换成二进制的形式来便于计算机理解。
要将十六进制转换成二进制,可以将每一位十六进制的数字换成0-9和a-f的二进制数,例如十六进制的48,就可以转换成二进制的01001000,通过每次将一位十六进制数换成4位的二进制,最后将4位二进制相加,就可以得出48的二进制形式。
从上面的描述可以看出,十六进制与二进制之间可以相互转换,而且比较容易实现,在计算机程序,存储和传输的过程中,都有非常广泛的应用,大大便于了计算机的实际运用。
2进制、10进制和16进制的相互转换
整数时十进制与二进制相互转换:二进制的1101转化成十进制1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13转化成十进制要从右到左用二进制的每个数去乘以2的相应次方,不过次方要从0开始。
相反,用十进制的13除以2,每除一下将余数就记在旁边,最后按余数从下向上排列就可得到1101。
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。
这种做法称为“按权相加”法。
2的0次方是12的1次方是22的2次方是42的3次方是82的4次方是162的5次方是322的6次方是642的7次方是1282的8次方是2562的9次方是5122的10次方是10242的11次方是20482的12次方是40962的13次方是81922的14次方是163842的15次方是32768有小数点的十进制与二进制之间的转换:十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
例如19.95 转2进制分为两个步骤:(1) 小数点前:19/2=9余19/2=4 余14/2=2 余02/2=1 余01/2=0 余1由下往上取余数10011(2) 小数点后0.95*2 = 1.9 取整1(1.9-1)*2 = 1.8 取整1(1.8-1)*2 = 1.6 取整1(1.6-1)*2 = 1.2 取整1(1.2-1)*2 = 0.4 取整0(0.4-0)*2 = 0.8 取整0(0.8-0)*2 = 1.6 取整1(1.6-1)*2 = 1.2 取整1假设小数精度为8位,从上往下去则小数点后为0.11110011故19.95 转化为二进制为10011.11110011整数时八进制数转换为十进制数:八进制就是逢8进1。
八进制数采用0~7这八数来表达一个数。
八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方,以此类推。
汇编语言实现四个以内十六进制的数到二进制的转换并输出
;程序功能:将四个16进制数(可以是数字以及A~F大小写均可以)转换成2进制数输出;程序举例:输入1234; 输出0001 0010 0011 0100;-----------数据段定义-------------DATAS SEGMENTDATA DB 10,?,10 DUP(?)RES DB 10 DUP(?) ;存放最后输入的4个数DATA0 DB'Please input Hexadecimal numbers :','$'DATA1 DB'The string is wrong,please input again:','$'DATA2 DB' ','$';这个字符串是为了输出空格DATA3 DB'The binary number you have input is:',0AH,0DH,'$'DATAS ENDS;-----------堆栈段-------------------STACK SEGMENTDW256 DUP(?)STACK ENDS;-----------代码段-------------------CODE SEGMENTASSUME DS:DATAS,SS:STACK,CS:CODESTART:MOV AX,DATASMOV DS,AXMOV DX,OFFSET DATA0 ;9号功能调用输出提示信息MOV AH,9INT 21HL0:MOV DX,OFFSET DATA ;输入16进制数(可以使1至9个)MOV AH,10INT 21HCALL INPUT ;函数调用CALL NEWLINECALL OUTPUTEXIT:MOV AH,4CHINT 21H;************将输入的字符串放到DX中***********INPUT P ROC NEARPUSH CXPUSH DXPUSH SIPUSH DICALL NEWLINEMOV DI,2MOV CX,0MOV CL,DATA[1] ;将输入的十六进制数个数存入CX;///////////////判断所有字符是否正确LOOP0:SUB DATA[DI],30H ;首先减去30H比较JL INAGAINCMP DATA[DI],9JLE COMPARESUB DATA[DI],07H ;若为A-F再减去7HJL INAGAINCMP DATA[DI],15JLE COMPARESUB DATA[DI],20H ;若为a-f再减去20HJL INAGAINCMP DATA[DI],15JLE COMPAREINAGAIN:CALL NEWLINE ;若输入不符合十六进制数规则,报错,从新输入CALL ERRORJMP L0COMPARE:INC DILOOP LOOP0JMP DEAL;////////////将后4位存入数组resDEAL:MOV DI,0 ;DI作为数组res的下标MOV CX,0MOV CL,DATA[1] ;将个数存入cl,再转到SI中CMP CX,4JAE NEXT0MOV SI,1 ;个数小于4时处理JMP REALNEXT0:MOV SI,CXSUB SI,3 ;将十六进制数个数中内容装换成对应下标MOV DX,0MOV CX,4 ;(改成更多要修改此处)cx为存入res中十六进制数个数REAL:INC SIMOV DL,DATA[SI] ;将输入的数字后4位存入res数组中MOV RES[DI],DLINC DILOOP REALPOP DIPOP SIPOP DXPOP CXRETINPUT ENDP;************将输入的数输出************OUTPUT PROC NEARPUSH AXPUSH BXPUSH DXPUSH CXPUSH DIMOV DX,OFFSET DATA3 ;提示信息MOV AH,9INT 21HCALL NEWLINE ;换行MOV DI,0MOV DX,0MOV CX,0 ;将cx清0便于后面计数MOV CL,DATA[1]CMP CL,4 ;改成更多要修改此处,将CX中放入输入的16进制数个数JL LOOP1MOV CX,4 ;如果CX>4就只要最后四个LOOP1:PUSH CX ;此时cx为将要输出数字个数MOV CX,4 ;此处cx赋值4是因为每一个16进制数占4个二进制位MOV DL,RES[DI]LOOP2:MOV BL,DLAND DL,01H ;保留最低位PUSH DXMOV DL,BLROR DL,1LOOP LOOP2MOV CX,4 ;此处cx赋值4是因为每一个16进制数占4个二进制位LOOP3:POP DXADD DL,30HMOV AH,2INT 21HLOOP LOOP3CALL SPACENEXT1:INC DIPOP CXLOOP LOOP1POP DIPOP DXPOP CXPOP BXPOP AXRETOUTPUT ENDP;************提示出错信息************ERROR PROC NEARPUSH AXPUSH DXMOV DX,OFFSET DATA1MOV AH,9INT 21HPOP DXPOP AXRETERROR ENDP;************回车换行************ NEWLINE PROC NEARPUSH AXPUSH DXMOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HPOP DXPOP AXRETNEWLINE ENDP;************空格************ SPACE PROC NEARPUSH AXPUSH DXMOV DX,OFFSET DATA2MOV AH,9INT 21HPOP DXPOP AXRETSPACE ENDPCODE ENDSEND START。
Lua小程序 十六进制字符串和二进制数据间的转换
Lua小程序十六进制字符串和二进制数据间的转换从十六进制字符串转为二进制数:1#! /usr/local/bin/lua234 --Note: Input hex string file's content must be5 --a upper case hex string67 --Check the arguments8if#arg ~= 2 then9print("Usage:hexstr2bytes.lua <Input Hex String File> <Output Bytes File>\n"); 10os.exit();11 end1213 --Open input hex string file14 local hexstrfile = io.open(arg[1], "rb");15if nil == hexstrfile then16print("Can not open input file!\n");17os.exit();18 end1920 --Read from the hex string file21 local hexstr = hexstrfile:read("*a");22if nil == hexstr then23print("Can not read hex string from input file!\n");24 elseif 1 == string.len(hexstr)%2 then25print("Hex string size must be evel!\n");26os.exit();27else28print("Hex String:", hexstr, "\n");29 end3031 --Close hex string file32 hexstrfile:close();3334 --Open output binary file35 local bytesfile = io.open(arg[2], "wb");36if nil == bytesfile then37print("Can not open output file to write!\n");38os.exit();39 end4041 --Convert hex string to bytes42for i = 1, string.len(hexstr) - 1, 2 do43local doublebytestr = string.sub(hexstr, i, i+1);44local n = tonumber(doublebytestr, 16);45if 0 == n then46bytesfile:write('\00');47else48bytesfile:write(string.format("%c", n));49end50 end5152 --Close output binary file53 bytesfile:close();545556从二进制数转十六进制字符串:1#! /usr/local/bin/lua234 --Check the arguments5if#arg ~= 2 then6print("Usage:bytes2hexstr.lua <Input Bytes File> <Output Hex String File>\n"); 7os.exit();8 end910 --Open input bytes file11 local bytesfile = io.open(arg[1], "rb");12if nil == bytesfile then13print("Can not open input file!\n");14os.exit();15 end1617 --Read from the bytes file18 local bytes = bytesfile:read("*a");19if nil == bytes then20print("Can not read bytes from input file!\n");21os.exit();22 end2324 --Close bytes file25 bytesfile:close();2627 --Open output hex string file28 local hexstrfile = io.open(arg[2], "wb");29if nil == hexstrfile then30print("Can not open output file to write!\n");31os.exit();32 end3334 --Convert bytes to hex string35for i = 1, string.len(bytes) do36local charcode = tonumber(string.byte(bytes, i, i));37local hexstr = string.format("%02X", charcode);38hexstrfile:write(hexstr);39 end4041 --Close output hex string file42 hexstrfile:close();使用Crypto++生成的私钥文件(使用HexEncoder编码的DER格式文件)ch: 30820275020100300D06092A864886F70D01010105000482025F3082025B020100028181009EEA4CF16CCD0DEF5FAA7B27D872AA0B5CCC286464E5338AE958E076BE764CA9 7C52E89D52329A4BB10DD586031CDD71D0C0581A8A3A41378AED44AA4F25B09C8BF2C 573C882BD82A8EE670C49229C609FB740CC7230FD25411851B3A37AEF91AA6EF3D2EF2CEC5E03A04257D2C3FDDAAD092696A96B7D0358B1AE339625F9B50201110281802EBD61ECA7879AAFD0D7C9DE8AF48C5DB1E1B186F07FA5BF71CED89B6531DA4FF763ADD3 EAFFD307341320AEF1DB503088B10ADAA120314C9245C8E6CBFC06C42AE3AFD1612DB A9FC6619E5E08E70BA0CB211D73FD94EA35D3D7BDFCA8AFDC98F5E1277FB1C12ACF09 75D3AA74227B6D23A692DF5B9E6720C5B81578CBBA3D2D024100D1FD16E7CB78989785B87DF9E80D071AF95AC47B70FD053A8D03784FF46D6484EEB09B200C3800FBE46C02A20127BED5CC880F0BAD8FDC9408FAE7A3C634C2C3024100C1BC58C4190843FF1A506 8390F9DA0EFC0857E936FD342007D6A86A23E51369E448D9F33ECFDC03BCBD6D67246C09B5E9A7DF0F9F78DDB664911B0C1E8119A2702403DC2E89E8723782C90BDCAB2E9E5B6CBB2C057E8122C4CD4FC4C508FFC98A51809F7B5278B1F87D19D892DF369C0654DF0DCB9218D668C2B8A2BAD8A85970C1B024100B656EA21F97130F018C425DB59FDC4A 569E70DB7F0C6D4B52ABE9CD4EF5B7EB313581D5E0C3A1E56657EE7F31569FBA4552B3D277F94924226A73CF2BC4CCD51024100BB5DA6433C896D07C88821107EF658DD201B7049191213A2001D3EC0A68279CCC6A36EC5DB384F2797CA47F94505A069B247758D8E6D1A8D30B068BCD26FC7F6使用hexstr2bytes.lua:hexstr2bytes.lua ch chout生成chout:00000000h: 30 82 02 75 02 01 00 30 0D 06 09 2A 86 48 86 F7 ; 0?u0*咹嗺00000010h: 0D 01 01 01 05 00 04 82 02 5F 30 82 02 5B 02 01 ; .?_0?[.. 00000020h: 00 02 81 81 00 9E EA 4C F1 6C CD 0D EF 5F AA 7B ; ..亖.炾L駆?颻獅00000030h: 27 D8 72 AA 0B 5C CC 28 64 64 E5 33 8A E9 58 E0 ; '豶?\?dd?婇X? 00000040h: 76 BE 76 4C A9 7C 52 E8 9D 52 32 9A 4B B1 0D D5 ; v緑L﹟R铦R2欿?? 00000050h: 86 03 1C DD 71 D0 C0 58 1A 8A 3A 41 37 8A ED 44 ; ?.輖欣X.?A7婍D 00000060h: AA 4F 25 B0 9C 8B F2 C5 73 C8 82 BD 82 A8 EE 67 ; 狾%皽嬺舠葌絺 g 00000070h: 0C 49 22 9C 60 9F B7 40 CC 72 30 FD 25 41 18 51 ; .I"渀煼@蘲0?A.Q 00000080h: B3 A3 7A EF 91 AA 6E F3 D2 EF 2C EC 5E 03 A0 42 ; 常z飸猲笠?靆.燘00000090h: 57 D2 C3 FD DA AD 09 26 96 A9 6B 7D 03 58 B1 AE ; W颐 ?&柀k}.X碑000000a0h: 33 96 25 F9 B5 02 01 11 02 81 80 2E BD 61 EC A7 ; 3? .亐.絘歆000000b0h: 87 9A AF D0 D7 C9 DE 8A F4 8C 5D B1 E1 B1 86 F0 ; 嚉 咨迠魧]贬眴? 000000c0h: 7F A5 BF 71 CE D8 9B 65 31 DA 4F F7 63 AD D3 EA ; •タq呜沞1贠鱟 ? 000000d0h: FF D3 07 34 13 20 AE F1 DB 50 30 88 B1 0A DA A1 ; ?4. 跴0埍.凇000000e0h: 20 31 4C 92 45 C8 E6 CB FC 06 C4 2A E3 AF D1 61 ; 1L扙孺它.?惘補000000f0h: 2D BA 9F C6 61 9E 5E 08 E7 0B A0 CB 21 1D 73 FD ; -簾芶瀆.?犓!.s? 00000100h: 94 EA 35 D3 D7 BD FC A8 AF DC 98 F5 E1 27 7F B1 ; 旉5幼近ǒ軜踽'•? 00000110h: C1 2A CF 09 75 D3 AA 74 22 7B 6D 23 A6 92 DF 5B ; ??u营t"{m# 遊00000120h: 9E 67 20 C5 B8 15 78 CB BA 3D 2D 02 41 00 D1 FD ; 瀏鸥.x撕=-.A.妖00000130h: 16 E7 CB 78 98 97 85 B8 7D F9 E8 0D 07 1A F9 5A ; .缢x槜吀} 鵝00000140h: C4 7B 70 FD 05 3A 8D 03 78 4F F4 6D 64 84 EE B0 ; 膡p?:?xO鬽d勵? 00000150h: 9B 20 0C 38 00 FB E4 6C 02 A2 01 27 BE D5 CC 88 ; ?.8. l.?'菊虉00000160h: 0F 0B AD 8F DC 94 08 FA E7 A3 C6 34 C2 C3 02 41 ; ..瓘軘. F4旅.A 00000170h: 00 C1 BC 58 C4 19 08 43 FF 1A 50 68 39 0F 9D A0 ; .良X?.C .Ph9.潬00000180h: EF C0 85 7E 93 6F D3 42 00 7D 6A 86 A2 3E 51 36 ; 锢厏搊覤.}j啟>Q6 00000190h: 9E 44 8D 9F 33 EC FD C0 3B CB D6 D6 72 46 C0 9B ; 濪崯3忑?酥謗F罌000001a0h: 5E 9A 7D F0 F9 F7 8D DB 66 49 11 B0 C1 E8 11 9A ; ^殅瘗鲘踗I.傲?? 000001b0h: 27 02 40 3D C2 E8 9E 87 23 78 2C 90 BD CA B2 E9 ; '.@=妈瀲#x,惤什? 000001c0h: E5 B6 CB B2 C0 57 E8 12 2C 4C D4 FC 4C 50 8F FC ; 宥瞬繵?,L渣LP忺000001d0h: 98 A5 18 09 F7 B5 27 8B 1F 87 D1 9D 89 2D F3 69 ; 槬..鞯'?囇潐-骾000001e0h: C0 65 4D F0 DC B9 21 8D 66 8C 2B 8A 2B AD 8A 85 ; 纄M疖?峟??瓓? 000001f0h: 97 0C 1B 02 41 00 B6 56 EA 21 F9 71 30 F0 18 C4 ; ?..A.禫?鵴0?? 00000200h: 25 DB 59 FD C4 A5 69 E7 0D B7 F0 C6 D4 B5 2A BE ; %踄 ?佛圃?? 00000210h: 9C D4 EF 5B 7E B3 13 58 1D 5E 0C 3A 1E 56 65 7E ; 溤颷~?X.^.:.Ve~ 00000220h: E7 F3 15 69 FB A4 55 2B 3D 27 7F 94 92 42 26 A7 ; 珞.i U+='•敀B&? 00000230h: 3C F2 BC 4C CD 51 02 41 00 BB 5D A6 43 3C 89 6D ; <蚣L蚎.A.籡 <塵00000240h: 07 C8 88 21 10 7E F6 58 DD 20 1B 70 49 19 12 13 ; .葓!.~鯴?.pI00000250h: A2 00 1D 3E C0 A6 82 79 CC C6 A3 6E C5 DB 38 4F ; ?.>捆倅唐 袍8O 00000260h: 27 97 CA 47 F9 45 05 A0 69 B2 47 75 8D 8E 6D 1A ; '検G鵈.爄睪u崕m. 00000270h: 8D 30 B0 68 BC D2 6F C7 F6 ; ?癶家o泅使用bytes2hexstr.lua:bytes2hexstr.lua chout chtmp生成chtmp:30820275020100300D06092A864886F70D01010105000482025F3082025B020100028181009EEA4CF16CCD0DEF5FAA7B27D872AA0B5CCC286464E5338AE958E076BE764CA9 7C52E89D52329A4BB10DD586031CDD71D0C0581A8A3A41378AED44AA4F25B09C8BF2C 573C882BD82A8EE670C49229C609FB740CC7230FD25411851B3A37AEF91AA6EF3D2EF2CEC5E03A04257D2C3FDDAAD092696A96B7D0358B1AE339625F9B50201110281802EBD61ECA7879AAFD0D7C9DE8AF48C5DB1E1B186F07FA5BF71CED89B6531DA4FF763ADD3 EAFFD307341320AEF1DB503088B10ADAA120314C9245C8E6CBFC06C42AE3AFD1612DB A9FC6619E5E08E70BA0CB211D73FD94EA35D3D7BDFCA8AFDC98F5E1277FB1C12ACF09 75D3AA74227B6D23A692DF5B9E6720C5B81578CBBA3D2D024100D1FD16E7CB78989785B87DF9E80D071AF95AC47B70FD053A8D03784FF46D6484EEB09B200C3800FBE46C02A20127BED5CC880F0BAD8FDC9408FAE7A3C634C2C3024100C1BC58C4190843FF1A506 8390F9DA0EFC0857E936FD342007D6A86A23E51369E448D9F33ECFDC03BCBD6D67246C09B5E9A7DF0F9F78DDB664911B0C1E8119A2702403DC2E89E8723782C90BDCAB2E9E5B6CBB2C057E8122C4CD4FC4C508FFC98A51809F7B5278B1F87D19D892DF369C0654DF0DCB9218D668C2B8A2BAD8A85970C1B024100B656EA21F97130F018C425DB59FDC4A 569E70DB7F0C6D4B52ABE9CD4EF5B7EB313581D5E0C3A1E56657EE7F31569FBA4552B3D277F94924226A73CF2BC4CCD51024100BB5DA6433C896D07C88821107EF658DD201B7049191213A2001D3EC0A68279CCC6A36EC5DB384F2797CA47F94505A069B247758D8E6D1A8D30B068BCD26FC7F6。
2、8、10、16进制转换
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
(别忘了,在上面的计算中,A表示10,而F表示15)
现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。
假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式:
现在商是1,还不是0,所以继续除以2。
那就: 1 ÷ 2, 得到商是0,余数是1
“将商继续除以2,直到商为0……最后将所有余数倒序排列”
好极!现在商已经是0。
我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了!
6转换成二进制,结果是110。
比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:
被除数 计算过程 商 余数
1234 1234/16 77 2
77 77/16 4 13 (D)
4 4/16 0 4
结果16进制为: 0x4D2
同样是120,转换成16进制则为:
被除数 计算过程 商 余数
120 120/16 7 8
7 7/16 0 7
120转换为16进制,结果为:78。
6. 十六----> 十
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
1. 十 -----> 二
给你一个十进制,比如:6,如果将它转换成二进制数呢?
详细进制转换
二进制、八进制、十进制、十六进制之间转换一、十进制与二进制之间的转换(1)十进制转换为二进制,分为整数部分和小数部分①整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。
下面举例:例:将十进制的168转换为二进制得出结果将十进制的168转换为二进制,(10101000)2分析:第一步,将168除以2,商84,余数为0。
第二步,将商84除以2,商42余数为0。
第三步,将商42除以2,商21余数为0。
第四步,将商21除以2,商10余数为1。
第五步,将商10除以2,商5余数为0。
第六步,将商5除以2,商2余数为1。
第七步,将商2除以2,商1余数为0。
第八步,将商1除以2,商0余数为1。
第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000(2)小数部分方法:乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。
如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。
换句话说就是0舍1入。
读数要从前面的整数读到后面的整数,下面举例:例:将0.125换算为二进制得出结果:将0.125换算为二进制(0.001)2 分析:第一步,将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25;第二步, 将小数部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5;第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0;第四步,读数,从第一位读起,读到最后一位,即为0.001。
例:将0.45转换为二进制(保留到小数点第四位)从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。
很完整的281016进制转换方法
很完整的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进制,关键在于各自的权值不同。
ffh转换为二进制
ffh转换为二进制
FFH是一个十六进制数,翻译为二进制数是11111111。
在计算机科学中,二进制是一种重要的数值系统,它由0和1组成。
在电子设备和计算机系统中,二进制是内部操作的主要方式,也是信息传输的基础。
二进制系统之所以重要,是因为它可以简单地将数字和字符转换为机器可以理解的语言。
例如,数字和字符用二进制编码后可以被计算机程序识别和处理。
在计算机科学领域,了解二进制和十六进制的转换是非常重要的。
这种能力可以让程序员更好地理解计算机的工作原理,从而更好地编写代码和完成开发任务。
同时,在实际应用中,除了数字和字符之外,还有很多信号和数据都需要以二进制形式进行传输和处理。
通信、传感器等领域中数据的处理也要依赖于二进制转换。
在日常生活中,我们也可以了解二进制的概念。
例如,计算机中的音乐和图像等传统艺术形式就是通过二进制编码来实现的。
以FFH为例,我们可以看到十六进制数是如何转换为二进制数的。
这种知识不仅可以帮助我们理解计算机的工作原理,还可以丰富我们的知识储备,帮助我们更好地了解数字和技术的本质。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
十六进制数转换为二进制数程序
程序:
CRLF MACRO ;宏定义
PUSH AX ;把AX压入堆栈
PUSH DX ;把DX压入堆栈
MOV AH, 02H ;显示回车
MOV DL, 0DH
INT 21H
MOV AH, 02H ;显示换行
MOV DL, 0AH
INT 21H
POP DX ;弹出DX
POP AX ;弹出AX
ENDM
DATA SEGMENT ;数据段
MESS DB 'INPUT HEXNUMBER:', '$'
ERROR DB 'INPUT ERROR', 0DH, 0AH, '$'
DATA ENDS
STACK SEGMENT ;堆栈段
STA DW 32 DUP(?)
TOP DW ?
STACK ENDS
CODE SEGMENT ;代码段
ASSUME CS: CODE, DS: DATA, ES: DATA, SS: STACK
START: MOV AX, DATA ;初始化
MOV DS, AX
MOV ES, AX
MOV SP, TOP
LLL: MOV AH, 09H ;显示提示信息
MOV DX, OFFSET MESS ;把MESS的偏移地址给DX
INT 21H
CRLF
XOR DX, DX ;DX清零
MOV BL, 04H ;接收字符个数
GGG: MOV AH, 01H ;接收字符
INT 21H
CMP AL, 0DH ;AL-0DH(判断是不是回车) JZ PPP ;是回车,转PPP
CMP AL, 20H ;AL-20H(判断是不是空格)
JZ PPP ;是空格,转PPP
CMP AL, 30H ;AL-30H(判断是不是ASCII码0) JB KKK ;不是,转KKK
SUB AL, 30H ;AL=AL-30H(将ASCII码转换成十六进制数) CMP AL, 0AH ;AL-0AH
JB GETS ;结果小于等于0,跳转GETS CMP AL, 11H ;AL-11H
JB KKK ;结果小于等于0,跳转KKK
SUB AL, 07H ;AL=AL-07H
CMP AL, 0FH ;AL-OFH
JBE GETS ;结果大于等于0,跳转GETS CMP AL, 2AH ;AL-2AH
JB KKK ;结果小于等于0,跳转KKK
CMP AL, 2FH ;AL-2FH
JA KKK ;结果大于0,跳转KKK
SUB AL, 20H ;AL=AL-20H
GETS: MOV CL, 04H ;CL=04H
SHL DX, CL ;DX左移4位
XOR AH, AH ;AH清零
ADD DX, AX ;DX=DX-AX(二进制数送DX) DEC BL ;BL=BL-1
JNZ GGG ;BL非零,跳转GGG(继续接收) CRLF
CALL ZHXS ;调用ZHXS
CRLF
JMP LLL ;跳转LLL
KKK: PUSH DX ;把DX压入堆栈
CRLF
MOV AH, 09H ;显示错误提示信息
MOV DX, OFFSET ERROR ;把ERROR的偏移地址给DX
INT 21H
POP DX ;弹出DX
PPP: CRLF
CALL ZHXS ;调用ZHXS
MOV AX, 4C00H ;返回DOS
INT 21H
ZHXS PROC ;显示子程序
MOV CX, 0010H ;CX=0010H
MOV BX, DX ;BX=DX
TTT: ROL BX, 1 ;BX左移一位
MOV DL, BL ;DL=BL
AND DL, 01H ;DL高位清零
ADD DL, 30H ;DL=DL+30H
MOV AH, 02H ;
INT 21H
LOOP TTT ;CX-1非零,,跳转TTT
RET
ZHXS ENDP
CODE ENDS
END START
运行结果:
D:\masm60>LINK 5.OBJ
Microsoft (R) Segmented-Executable Linker Version 5.13 Copyright (C) Microsoft Corp 1984-1991. All rights reserved.
Run File [5.exe]:
List File [NUL.MAP]:
Libraries [.LIB]:
Definitions File [NUL.DEF]:
LINK : warning L4021: no stack segment
D:\masm60>5.EXE
INPUT HEXNUMBER:
256S
INPUT ERROR
0000001001010110
D:\masm60>5.EXE
INPUT HEXNUMBER:
2AF6
0010101011110110
INPUT HEXNUMBER:。