汇编: 十进制与十六进制 、二进制与十进制 、十六进制与二进制之间的转换

作者&投稿:邬政 (若有异议请与网页底部的电邮联系)
怎么用汇编语言实现二进制与十进制和十六进制的转换?~

这是我曾经写的一个程序,这段代码的作用是循环4次输入4位16进制数,我把它转换位2进制数,方法就是对于每一位数(现在是ASCII码)转化为0——9或a——f的数,然后左移4位,放到一个变量里面,循环就行了,也就是16进制转换为2进制的基本算法,左移4位,不断的进行。。


XOR BX,BX ;BX里面放输入后经转换的2进制数
MOV CL,04 ;转换的时候移位次数
MOV AH,01
MOV DI,4 ;循环4次输入
LP1: SHL BX,CL ;由于最高位也只移3个4位,所以就放在前面。
INT 21H
SUB AL,30H ;输入的1位数与0的ascii比较
CMP AL,9
JBE DEAL1 ;不小于9的为A,B,C等值
SUB AL,7 ;根据位置关系再减7
DEAL1: ADD BL,AL ;转换后的数存入BL
DEC DI
CMP DI,0
JNZ LP1

取十进制中的数字9举例,过程如下。
十进制—>二进制:9/2=4 余1; 4/2=0 余0; 2/2=1 余0;剩1 从最后的1向前看,将数字写出来就是 1001,也就是9的二进制;
二进制—>十进制:从低位的1开始,向高位衍生:1乘以2的零次方,0乘以2的1次方,0乘以2的2次方,1乘以2的3次方,然后将结果相加,即为十进制9.
十进制—>十六进制:十六进制的16个数为0 1 2 3 4 5 6 7 8 9 A B C D E F,十进制的9换成十六进制的9,就在前面加一个字母H就行了。9 = H9
二进制—>:十六进制.9的二进制1001,同上为H9.
十六进制—>二进制,举例:AE86。首先转A为1010,E为1101,8为1000,6为0110,然后将转换后的数字排列:十六进制AE86的二进制为1010 1101 1000 0110。

十进制与十六进制
先将十进制转成二进制。除2取余
再将二进制换成十六进制。如1011 1101 转成 BD (4个4个的转前面不足的用0补)
二进制转十进制。。。。。。。
如1011 1101 即。。。。1*2的0次方 + 0乘以2的1次方 +1乘以2的2次方。。。
依次由最低位到最高为一个一个来。。。
16转2进制。。。4个4个的转。。。

建议你。。。先百度一下结果不要直接问。。也只有我们家恩这种菜鸟才会有闲情回答你。。。

十进制整数转换R进制(R可以是任何整数,比如3、5、7)整数,方法就是除R取余,十进制转八或十六进制方法类似转二进制,除以基数取余就行了,比如转八进制就除8,转十六进制就除16。
二进制和八进制、十六进制之间转换采用的是分组转换法,因为2、8、16之间是存在幂的关系的。所以,二级制转八进制,以小数点为中心向两边(二进制小数也可以转为八进制小数)分组,每3位为一组,因为2的3次方=8,然后将各组直接写成相应的八进制数就可以了(3位二进制数最大是7,不会超过8)。转十六进制类似,只是这时候需要每4位分一组。反过来,八进制、十六进制转二进制就简单了,只要把每一位都写成二进制数就行了。八进制和十六进制之间一般借助二进制来转换,不容易出错。
十进制小数转R进制小数,方法为乘R取整,每次乘以相应之后基数后取结果的整数部分即可。需要注意的是并非所有的十进制小数都能完全转化为R进制小数,这时就需要取近似值。
二进制(包括小数)转为十进制数时,采用乘权相加法,每一位数乘以相应位的权制然后相加就ok。比如1101.101这个数,以小数点为中心,向左每位权值分别为1、2、4、8,向右每位为0.5、0.25、0.125(也就是二分之一、四分之一、八分之一)。正数1101.101B=1*1+0*2+1*4+1*8(整数部分)+1*0.5+0*0.25+1*0.125(小数部分)=13.625D。八进制、十六进制转十进制方法类似,只要你搞清楚每位的权值就行了。
如此详细,得分当之无愧。

1


沙湾区15641456785: 如何用汇编程序实现二进制,十进制,十六进制之间的转换 -
荡董亚硒: 二进制和十六进制转换,也就是将二进制按四位划分一段,然后用十六进制表示,末尾加上H就可以了. 十六进制转为二进制则将十六进制的每一位用二进制表示,为四位一段,按顺序写下来末尾加上B就是了. 十进制么,就是日常用的自然数,计算出二进制或十六进制的数值,就可以了.当然末尾可以加上D或什么也没有.

沙湾区15641456785: 51单片机汇编程序的二进制、十进制、十六进制数怎么表示? -
荡董亚硒: 二进制10B 十进制10或10D 十六进制10H

沙湾区15641456785: 51单片机汇编程序二进制、十进制、十六进制数怎么表示? -
荡董亚硒: 汇编中的2进制在数值结尾加“B” 10进制在结尾加“D”(有的编译器不加字母默认为十进制) 16进制在结尾加“H”(有的编译器不加字母默认为十六进制,如Windows里面的debug程序)

沙湾区15641456785: 怎么用汇编语言实现二进制与十进制和十六进制的转换?
荡董亚硒: 这是我曾经写的一个程序,这段代码的作用是循环4次输入4位16进制数,我把它转换位2进制数,方法就是对于每一位数(现在是ASCII码)转化为0——9或a——f的数,然后左移4位,放到一个变量里面,循环就行了,也就是16进制转换为2进...

沙湾区15641456785: 汇编语言 二进制 十进制 十六进制 之间进行转化 -
荡董亚硒: 其实你不需要转换的,之所以要“转换”出来是供给人看的.计算机里面都是以二进制存储的,你用应用软件提取出来的都是以十六进制表述的数据.你看看如下东东:mov a,#10000000B mov a,#80H mov a,#128 第一个是二进制,第二个是十六进制,第三个是十进制.直接赋值就可以了.

沙湾区15641456785: 在汇编语言中如何检测输入数据为十进制十六进制还是二进制??
荡董亚硒: 这个问题问行还不明确. 在计算机中,所有的数据都是只是内存字节中的一个值,都是以二进制保存的. 关于十进制,十六进制,二进制 只是人对数值的一个表示方式.也就是说对于电脑中的同一个数值,在输出时,可以用不同的进制来输出给人看. 对于输入电脑的数据,没办法去“检测”它是什么进制,你把它当什么进制就是什么进制. 一般都只能作一个规定, 告诉别人,程序A 的输入是十六进制数,程序B 的输入是十进制数,这样别人用这个程序时,就输入对应进制表示的数就可以了.

沙湾区15641456785: 汇编 十进制转换16进制 十进制 转换2进制 十进制的数是键盘输入的,不一定是一位的 -
荡董亚硒: 1.输入两位10进制转换为16进制输出 data segmentdata ends code segment assume cs:code,ds:data start:mov ax,data mov ds,axmov al,0 mov ah,01h int 21h mov bh,al mov ah,01h int 21h mov bl,almov ax,0sub bh,30h mov al,bhmov cl,0ah mul...

沙湾区15641456785: 怎么用汇编语言编写一个16进制转换成2进制数的程序 -
荡董亚硒: 在机器内部进行科学运算时,绝大多数情况下就是二进制数,按4位分节也就是16进制数. 以下程序是将输入的10进制数转为机内的二进制(或16进制), 再以二进制形式在屏幕上输出.供参考.code segmentassume cs:codeorg 100h ...

沙湾区15641456785: 2进制10进制16进制之间怎么换算 -
荡董亚硒: 一.进制概念 1. 十进制 十进制使用十个数字(0、1、2、3、4、5、6、7、8、9)记数,基数为10,逢十进一. 历史上第一台电子数字计算机ENIAC是一台十进制机器,其数字以十进制表示,并以十进制形式运算.设计十进制机器比设计二...

沙湾区15641456785: 二进制数与十进制、十六进制换算? -
荡董亚硒: 几进制就是逢几进一,如十进制,最常用的吧,每到十的时候就往前一位进一.同理,二进制与十六进制也是这个道理.16进制中,由于阿拉伯数字只有0-9的表示,因此需用大写英文字母前六个(即A-E)来补充,其中的A=10,B=11,C=12,D=...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网