进制转换及数据类型
数据的表示方法:
1. 二进制数:01 逢二进一:0+0=0,0+1=1,1+0=1,1+1=(1)0
2. 八进制数:01234567 逢八进一:1+5=6,5+6=13
3. 十进制数:0123456789 逢十进一:1+5=6,5+6=11
4. 十六进制数:0123456789ABCDEF 逢十六进一:5+6=B,A+B=15
表1.0各种进制及其字符表示
进制 | 字符 | 例子 | 备注 |
二进制 | B/Y | 1010B、1011B | 字符Y、O和T是宏汇编MASM系统所增加的进制表示符。 |
八进制 | Q/O | 1234O、311O | |
十进制 | D/T | 1234D、512D | |
十六进制 | H | 1234H、1011H | |
表1.1 4位二进制数对应的十进制和十六进制数
二进制 | 十进制 | 十六进制 | ||
0000 | 0 | 0 | ||
0001 | 1 | 1 | ||
0010 | 2 | 2 | ||
0011 | 3 | 3 | ||
0100 | 4 | 4 | ||
0101 | 5 | 5 | ||
0110 | 6 | 6 | ||
0111 | 7 | 7 | ||
二进制 | 十进制 | 十六进制 | ||
1000 | 8 | 8 | ||
1001 | 9 | 9 | ||
1010 | 10 | A | ||
1011 | 11 | B | ||
1100 | 12 | C | ||
1101 | 13 | D | ||
1110 | 14 | E | ||
1111 | 15 | F | ||
进制的转换
非十进制数转换成十进制数:
方法:首先把非十进制数写成按权展开的多项式,然后按十进制数的计数规则求和。
例:2A.8H=(?)D
解:2A.8H=2*161+A*160+8*16-1
=32+10+0.5
=42.5D
例:165.2O=(?)D
解:165.2O=1*82+6*81+5*80+2*8-1
=64+48+5*0.25
=117.25D
例:10101.11B=(?)D
解:10101.11B=1*24+0*23+1*22+0*21+1*20+1*2-1+1*2-2
=16+0+4+0+1+0.5+0.25
=21.75D
十进制数转换其它进制数:
1.整数转换
方法:整数转换,采用基数连除法。把十进制整数N转换成R进制数的步骤:
1) 将N除以R,记下所得的商和余数
2) 将上一步所得的商再除以R,记下所得商和余数
3) 重复做第2步直到商为0
4) 将各个余数转换成R进制的数码,并按照和运算过程相反的顺序把各个余数排列起来,即为R进制数。
例:427D=(?)H
解:
427D=1ABH
例:427D=(?)O
解:
427D=653O
例:11D=(?)B
解:
11D=1011B
2.纯小数转换
纯小数转换,采用基数连乘法。把十进制的纯小数M转换成R进制数的步骤:
1) 将M乘以R,记下整数部分
2) 将上一步乘积中的小数部分再乘以R,记下整数部分
3) 重复做第2步,直到小数部分为0或者满足精度要求为止
4) 将各步求得的整数转换成R进制的数码,并按照和运算过程相同的顺序排列起来,即为所求的R进制数。
例:0.85D=(?)H
解:0.85*16=13.6 ……13=D
0.6*16=9.6 ……9=9
0.6*16=9.6 ……9=9
┋
0.85D=(0.D99…)D
例:0.35D=(?)O
0.35*8=2.8 ……2
0.8*8=6.4 ……6
0.4*8=3.2 ……3
0.2*8=1.6 ……1
┋
0.35D=(0.2631…)D
3.即有整数又有小数
若十进制数有整数也有小数,则整数和小数分别转换,再求其和即可。
例:11.375D=(?)B
解:
11D=1011B
0.375*2=0.75 ……0
0.75*2=1.5 ……1
0.5*2=1.0 ……1
0.375D=0.011B
故:11.375D=1011.011B
二进制数转换成八进制数或十六进制数
方法:以二进制数的小数点为起点,分别向左、向右每三位(或四位)分一组。对于小数部分,最低位一组不足三位(或四位)时,必须在有效位右边补0,使其足位。然后把每一组二进制数转换成八进制(或十六进制)数,并保持原排序。对于整数部分,最高位一组不足位时,可在有效位的左边补0,也可不补。
例1011011111.10011B=(?)O=(?)H
解:1 011 011 111 . 100 110
1 3 3 7 4 6
=1337.46O
10 1101 1111 . 1001 1000
2 D F 9 8
=2DF.98H
八进制数或十六进制数转换成二进制数
八进制(或十六进制)数转换成二进制数时,只要把八进制(或十六进制)数的每一位数码分别转换成三位(或四位)的二进制数,并保持原排序即可。整数最高位一组左边的0,及小数最低位一组右边的0可以省略。
例:36.24O=(?)B
3 6 . 2 4
011 110 . 010 100
=11110.0101B
例:3DB.46H=(?)B
3 D B . 4 6
0011 1101 1011 . 0100 0110
=1111011011.0100011B
基本的数据类型
1、字节(DB)define byte
一个字节有8位二进制组成,其最高位是第7位,最低位是第0位。在表示有符号数时,最高位就是符号位。
00001001 = 9
10001011 = -11 有符号
= 139 无符号
通常情况下,存储器按字节编址,读写存储器的最小信息单位就是一个字节。
Var_byte db 10011101B
Var_bytes db 41H,42D,61H
2、字(DW)define word
由2个字节组成一个字,其最高位是第15位,最低位是第0位。高8位称为高字节,低8位称为低字节。
00101010 00111100
Var_word dw 4512
3、双字(DD)define doubleword
二进制与十六进制的转换表用2个字(4个字节)来组成一个双字,其高16位称为高字,低16位称为低字。
双字有较大的数据表示范围,它通常是为了满足数据的表示范围而选用的数据类型,也可用于存储远指针。
Var_dword dd 0F99728H 2H 0ABH
4、四字(DQ)
由4个字(8个字节)组成一个四字类型,它总共有64个二进制位,当然,也就有更大的数据表示范围,但在汇编语言中很少使用该数据类型。
5、十字节(DT)
由10个字节组成一个十字节类型,它总共有80个二进制位。
6、字符串(DB)
字符串是由若干个字节组成的,字节数不定,通常每个字节存储一个字符。该数据形式是汇编语言程序中经常使用的另一种数据形式。
Char_ABC db ‘A’,’B’,’C’
String_ABC db ‘ABC’
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论