高级语言中也多用十进制数。十进制数由0-9十个数字组合而成,逢10进1。但由于汇编语言是面向硬件的,因此,在汇编语言中使用的数字也是和硬件结合紧密的二进制数。
二进制数只由0和1而个数字组成,逢2进1,也就是说,在十进制数中计算1+1时将得到一位数字的结果--2,而在二进制数中计算时将得到一个二位二进制数--10,表1-1列出了四位二进制数与十进制数间的对应关系。
在十进制数字中还有"数位"之分,个位,十位,百位......,在二进制数中也分各个数位。以四位二进制数1010为例,从右数第一位,称为bit0,第二位称bit1,以此类推。因此,1010的bit3,bit1位是1,bit2,bit0位是0。与十进制数一样,二进制数自右向左数位逐渐升高。最左端的数位为最高位,1010的最高位为1。
二进制数 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |
十进制数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
二进制数 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
十进制数 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
我们知道,计算机利用电路来记忆1和0,那么1和0究竟和电路的工作状态有什么关系呢?通俗的讲,1,0反应了电路输出(入)电压的高和低。如果电路输出(入)的电压高,比如达到了电源电压的幅度,此时电路的输出(入)就为1。如果电路输出(入)的电压很低,比如接近0V,那么这时电路的输出(入)就为0。
二进制数字在实际应用中还有一些缺点,比如不便于书写,难于记忆等。为此,在汇编语言中还常用另一种数制--十六进制。十六进制数字由十六个数组成,逢16进1。前十个数字和十进制一样,是0-9,后六个数字用英文字母A-F来表示。表1-2列出了十六进制与十进制数间的对应关系。
十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
十进制 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
十六进制 | 8 | 9 | A | B | C | D | E | F |
从表1-2可以看出,有些十六进制数与十进制数是一样的,区分不开。这个问题对于1位十六进制数而言到还没有什么关系,可对于多位十六进制数来说就有些麻烦了。比如给出一个数"79",它是十进制的"79"还是十六进制的"79(相当于十进制121)"呢?所以为区分十六进制数与十进制数,特别规定了十六进制数尾部应加字母"H"(Hexadecimal)。十六进制数79应该写成"79H"才对。
对照表1-1和表1-2,可以看出每个四位二进制数都有相应的十六进制数与之对应。若用十六进制数代替二进制数,在书写时可以使数位减少四倍,简化了书写。同时也可以看到十六进制数同二进制数之间没有实质上的差别,只是两种不同的表达形式而已。下面的例子介绍了二-十-十六进制数字间的转换方法,请大家自己总结其中的规律。
解:采用短除法计算
2| 83 ------余数:1 ←──bit0 2| 41 ------余数:1 ←──bit1 2| 20 ------余数:0 ←──bit2 2| 10 ------余数:0 ←──bit3 2| 5 ------余数:1 ←──bit4 2| 2 ------余数:0 ←──bit5 1 ←─────────bit6
计算结果为7位二进制数:1010011
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
权 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
∴ 10110110 = 1×27+0×26+1×25+1×24+0×23+1×22+1×21+0×20= 182
16| 34567 ------余数:7 ←──第0位 16| 2160 ------余数:0 ←──第1位 16| 135 ------余数:7 ←──第2位 8 ←─────────第3位
∴ 结果是一个4位十六进制数:8707
由表1-1,表1-2查得
1101 | 1010 | 1100 | 0011 |
↓ | ↓ | ↓ | ↓ |
D | A | C | 3 |
∴ 1101101011000011 = DAC3
① 权这个字最早指秤砣,同样一个秤砣在秤杆的不同位置可以表示不同的份量。引申到数字中,同样一个数在不同的数位上所表示的大小也是不一样的。