微机原理及接口技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 微型计算机的码制和编码

数据是计算机的处理对象,在计算机中常采用基2码进行编码,它包括数值数据和非数值数据两类。数值数据可分为有符号数和无符号数,有符号数又有正、负之分。另外,数值数据还有整数和小数之分。本节重点对数据的表示问题进行讨论。

1.3.1 微型计算机中数的表示方法

1.机器数与真值(数的符号表示)

在计算机所处理的数据中,将无正、负意义的数称为无符号数。而算术运算中的数存在正负之分,这类数称为带符号数,通常规定一个数的最高位为其符号位。其中,带符号数的正号(+)、负号(–)采用“0”和“1”来表示,“0”表示正数的符号,“1”表示负数的符号。

例如,8位二进制数,计算机一般用D7位来表示其符号,如

在上述表示方法中,D7为0表示数据为正,为1表示数据为负。

例如,有符号二进制数+110101B和–110101B在计算机中分别表示为0110101B和1110101B。

为了区别原来的数与它在计算机中的表示形式,通常将符号位和数值位一起作为一个数,称为机器数,机器数能被计算机正确识别,而数据的实际数值称为机器数的真值。

2.小数的表示

在计算机中,小数点通常采用两种方法来表示,即定点表示法和浮点表示法。

(1)定点表示法

定点表示法指小数点在数中的位置是固定不变的,这样在计算机中数的小数点是隐含的。一个二进制数可以写成如式(1-2)所示的形式:

N=S×2J (1-2)

式中 J——二进制整数,称为数N的阶码;

2——阶码的底;

S——为尾数,为K位二进制小数,是N的全部有效数字。

例如,1011.101B=0.1011101×2100

式(1-2)也可以表示如下:

J指明了小数点的位置,当J=K时,定点数为整数,即小数点被固定在数值位最低有效位之后。

例9 1011.101B=0.1011101×2100

在该表达式中,J=4,而K=7,为了化成定点整数,将表达式右侧二进制数再右移3位,即为1011.101B=0.0001011101×2111。若字长8位,则数值部分取0001011。

J=0时,定点数就是定点小数。

例10 0.00010111×211=0.10111×20

这时J=0,此数字就是定点小数。

J码固定不变的二进制数的表示法称为定点表示法,这样的数为定点数,机器称为定点机。

(2)浮点表示法

浮点表示法是指小数点在数中的位置是浮动可变的。由于计算机不能识别小数点“.”,所以用J来表示数据中的小数点的位置,J称为浮点数的阶码,阶码包括阶码的符号(又称阶符)Jf和阶码JM两部分。尾数S包括尾数符号Sf和尾数SM两部分。SM通常采用定点小数形式表示,它决定了浮点数的精度。计算机中,浮点数的表示如下:

例11 已知采用十六位二进制数表示一个浮点数,阶码占5位,尾数和数符占11位。把实数84.375表示为浮点数。

解:84.375=1010100.011B=0.1010100011×2+111

阶码J=+111,尾数S=0.1010100011,尾数符号为0,则浮点形式为

1.3.2 微型计算机中的原码、反码和补码

二进制数据的正、负可以用一位二进制的“0”和“1”两个状态来表示。计算机对数据进行运算时,直接对其符号位进行计算得到的是错误的结果,因此为了简化对二进制数值数据的算术运算,需要对二进制数据进行编码表示,常用的编码有原码、反码和补码。为了讨论方便,首先引入两个概念:机器数和真值。

机器数:带符号的二进制数值数据在计算机内部的编码;

真值:机器数所代表的实际值。

(1)原码

设真值为X,机器字长为n位,则二进制数X的原码定义为:

从式(1-3)可知:一个数的原码就是该数的机器数,它的最高位为符号位,且用“0”表示正,用“1”表示负,其余各位为数值位。因此,二进制正、负数的原码就是符号化的机器数真值本身。例如,长度为8的机器数,若X≥0,则[+0]=00000000,[+1]=00000001,[+127]=01111111;若X≤0,则[–0]=10000000,[–1]=10000001,[–127]=11111111。

例12 已知X=+1110010B,Y=–11011B,求XY的原码(机器字长为8位)。

解:由式(1-3)得

[X]=01110010B;[Y]=10011011B

例13 已知[X]=01010011B,[Y]=10101100B,求XY的真值。

解:由式(1-3),已知原码求真值时,只需用“+”、“–”分别取代符号位中的“0”和“1”即可。因此有,X的真值为+1010011B;Y的真值为–101100B。

(2)反码

设真值为X,机器字长为n位,则二进制数X的反码定义为:

从式(1-4)可知:对于正数,其反码就是该数的原码;对于负数,其反码就是机器数符号位保持不变,其余按位取反。例如,长度为8的机器数,若X≥0,则[+0]=00000000,[+1]=00000001,[+127]=01111111;若X≤0,则[–0]=11111111,[–1]=11111110,[–127]=10000000。8位二进制数反码的数值取值范围为–127~+127,16位二进制数反码的数值范围为–32767~+32767。

例14 已知X=+11010B,Y=–100010B,求XY的反码(机器字长为8位)。

解:由式(1-4)得

[X]=[X]=00011010B

[Y]=11011101B

例15 已知[X]=01111101B,[Y]=11111111B,求XY的真值。

解:求解思路是根据原码与真值之间的关系,先求出原码,然后求真值。

根据XY的反码值,知

X≥0,则[X]=[X]X的真值为+1111101B,即+125。

Y≤0,则[Y]=10000000B,Y的真值为–0000000B,即0。

(3)补码

设真值为X,机器字长为n位,则二进制数X的补码定义为:

从式(1-5)可知:对于正数,其补码就是该数的原码;对于负数,其补码就是机器数符号位保持不变,其余按位取反后末位加1。例如,长度为8的机器数,若X≥0,则[+0]=00000000,[+1]=00000001,[+127]=01111111;若X≤0,则[–0]=00000000,[–1]=11111111,[–127]=10000001。

求二进制数的补码时应注意:

(1)在补码表示法中,0只有一种表示,即000…000;

(2)对于10000000这个补码编码,其真值被定义为–128;

(3)负数的补码再取补码等于原码。

例16 已知X=+48D,Y=–48D,机器字长n=8位,求XY的补码。

解:首先将+48D转换为二进制数+110000B。由于机器字长是8位,符号位占1位,所以其数值占7位。再根据正数的补码等于原码,得

[X]=00110000B

Y写成二进制数,有Y=-110000B。为求Y的补码,首先求Y的原码,得[Y]=10110000B。

再根据式(1-5),得Y的补码为[Y]=11010000B。

例17 已知[X]=00011001,[Y]=11111111,求XY的真值。

解:由于X≥0,所以[X]=[X]=00011001B,X的真值为+0011001B,即+25。

由于Y≤0,所以[Y]=[Y]–1=11111111–1=11111110B,因此[Y]=10000001,Y的真值为–0000001B,即–1。

综合来讲,一个有符号数究竟采用何种形式的机器数,必须事先约定;对微型计算机系统来讲,一般采用补码形式表示机器数。将有符号数采用补码形式表示后,其符号位可以直接参与运算,从而使运算器的结构简化,降低了机器成本。

1.3.3 微型计算机的二进制编码

计算机不仅要处理数值数据,而且还要处理大量的非数值数据,如英文大写字母A~Z,标点符号、汉字、专用符号、非数据性数码(如电话号码),而计算机在信息处理过程中只能识别二进制数,二进制数又只有“0”和“1”两个数,仅用0和1表示非数值数据存在困难,因此二进制编码应运而生。二进制编码的实质就是用一组二进制数来表示字母、字符和数码。

1.字符编码

目前,在微型计算机中,使用最多、最普遍的编码形式是ASCII字符编码,即美国标准信息交换码(American Standard Code for Information Interchange,ASCII)。

ASCII的编码方法为:把所有可显示的字符(数字0~9,大、小写英文字母等)和控制字符(换行、回车等)共计128个,排列成16行×8列的表格,字符与其位置一一对应,它的编码便用它所在的列号和行号的七位二进制编码表示,其格式为:

奇偶校验是一种检查信息在传送过程中是否出错的方法。奇偶校验位是0还是1取决于要传送的信息中所包含1的总个数,可分为奇校验和偶校验。

奇校验:所传送的信息连同校验位一起使得1的总个数为奇数。

偶校验:所传送的信息连同校验位一起使得1的总个数为偶数。

ASCII字符编码如表1-2所示。

ASCII码表有以下几个特点。

①每个字符用7位基2码表示,其排列次序为B6,B5,B4,B3,B2,B1,B0。一个字符用一个字节(8位)表示,一般情况下其最高位为“0”,即B7为“0”,当需要奇偶校验时,其最高位用作校验位。

表1-2 ASCII字符编码

表1-2中的部分符号意义说明如表1-3所示。

表1-3 表1-2中的符号

②ASCII码共编码了128个字符,分别是:

a.32个控制字符,主要用于通信中的通信控制或对计算机设备的功能控制,编码为0~31(十进制);

b.间隔字符(也称空格字符)SP,编码值为20H;

c.删除控制码DEL,编码值为7FH;

d.94个可印刷字符(或称有形字符),其编码规律如下。

  • 字符0~9这10个数字符号的高3位编码都为011,低4位为0000~1001,屏蔽掉高3位的值,低4位正好是数据0~9的二进制形式,因此数字符号的ASCII码与其本身相差30H,这样既满足排序要求,也有利于与二进制码之间的转换。
  • 英文字母的编码值符合A~Z或a~z正常的字母排序关系。大、小写字母编码的B5位值不相同,若B5为0,则表示大写字母;若B5为1,则表示小写字母,这样便于大、小写字母之间的编码转换。

2.8421BCD码

8421BCD(Binary Coded Decimal)码是二进制编码的十进制数,它的实质是将十进制数码0~9分别用四位二进制数来表示。四位二进制码的位权从高到低分别为8,4,2,1,选择的是0000,0001,0010,…,1001这10种组合,如表1-4所示。

表1-4 8421 BCD码与十进制数码的对照表

例18 将十进制数67.9转换成BCD码。

解:转换过程如下:

因此有(67.9)10=(01100111.1001)BCD

注意:如果给出BCD码对应的十进制数的二进制数表达,则转换方法与例18可逆。

3.汉字的编码

计算机处理的汉字必须采用基2码进行编码。汉字编码遵循“GB2312—80”(通用汉字字符集及其交换标准)方案,该标准按汉字使用的频度,将汉字分为高频字(约100个)、常用字(约3000个)、次常用字(约4000个)、罕见字(约8000个)、死字(约45000个)。汉字字符集是将高频字、常用字和次常用字归结在一起共6763个。再将其分为一级汉字3755个(按拼音排序)、二级汉字3008个(按部首排序),还有字母、数字、图形符号等约700多个。汉字编码一般采用两个字节即16位二进制数,但由于汉字的特殊性,所以在汉字的输入、存储、输出过程中所使用的汉字编码是不一样的,即输入时有输入编码,存储时有汉字机内码,输出时有汉字字形编码。

(1)汉字输入编码

在键盘上输入的各种汉字编码又称外码,常用的输入码有国标区位码、拼音码、首尾码和拼形码等,采用何种编码取决于用户选用的输入法,同一汉字的输入法不同,编码也不同。以国标区位码对“雹”字进行编码为例,其区码为17,位码为02,则它的区位码就为1702。将其变成十六进制后为1102H,再分别加上20H(2020H)后就转换成国标码,得

国标区位码:2020H+1102H=3122H;

内码:8080H+3122H=B1A2H。

(2)汉字机内码

汉字机内码也称汉字内部码,简称内码,它是机器存储和处理汉字时采用的统一编码。每个汉字的机内码是唯一的,用两个字节表示。为了避免与西文字符的ASCII码之间产生二义性,汉字机内码中两个字节的最高位均规定为“1”。

(3)汉字字形码

汉字字形码也叫汉字字模点阵码,用以显示和打印汉字的点阵码,由一串二进制码按序存放在存储器中而得到。在汉字处理过程中,由汉字字模库起始地址和给出的内码,计算出字模数据地址,将其取出并送往显示缓冲区,经变换后送打印和显示。而16×16点阵汉字需32个字节码;24×24点阵汉字为72字节码;ASCII字符点阵为8×8需8个字节码。