1、第二章 数据表示方法,2-1 数据表示方法和运算器 2-2 逻辑部件 2-3 控制部件,21 数据表示方法和运算器,211计算机中数据的表示方法 当前的计算机所采用的存储器件都是两态器件,所以适合于存放二进制数据。尽管为了方便起见,也使用其他进制,如十进制、十六进制,但是在计算机内部数据还是以二进制的形式存放和处理。二进制只使用了两个不同的数字符号,易于用物理器件来实现:在物理世界中具有两个稳定状态的物理器件很多,如晶体管的“截止”与“导通”、电容的“充电”与“放电”、电压信号的“高”与“低”、脉冲的“有”与“无”,电磁单元的“正向磁化”与“反向磁化”等等,只要规定其中一种稳定状态表示“1”,
2、另一种稳定状态表示“0”,就可以用来表示二进制数位了。其次,二进制的运算规则非常简单,易于用电子器件来实现。数据的类型多种多样,如文件、图、表、树、阵列、链表、栈、向量、串、实数、整数、布尔数、字符等。计算机里用到的数据类型主要可分为两类:表示数量的数值数据和非数值性的符号数据。所有的数据都是以二进制的形式在计算机里处理和存储。本节主要讲述数值数据在计算机里的表示方法。,1数值数据表示方法 在计算机中表示数时,需要考虑以下几个因素:要表示的数的类型(小数、整数、实数和复数)、符号如何表示以及小数点的位置;可能遇到的数值范围;数值精确度;数据存储和处理所需要的硬件代价。计算机中表示数值符号的方法
3、是占用一位二进制位,1表示负号、0表示正号。常用的数值数据表示格式有两种,根据小数点的位置是固定不变还是浮动变化的分为定点格式和浮点格式。一般来说,定点格式容许的数值范围有限,但要求的处理硬件比较简单。而浮点格式容许的数值范围很大,但要求的处理硬件比较复杂。 (1) 定点数的表示方法 所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。由于约定在固定的位置,小数点就不再使用记号“”来表示。原理上讲,小数点位置固定在哪一位都可以,但是通常将数据表示成纯小数或纯整数。,例如用一个n1位字来表示一个定点数x,其中一位x0用来表示数的符号,其余位数代表它的量值。为了将整个n1位统一处理起见,符
4、号位x0放在最左位置,并用数值 0和1分别代表正号和负号,这样,对于任意定点数x=x0x1x2xn,在定点机中可表示为如下形式:,如果数x表示的是纯小数,那么小数点位于x0和x1之间。当x0x1x2xn各位均为0时,数x的绝对值最小,当各位均为1时,x的绝对值最大,故数的表示范围为 0x12n 如果数x表示的是纯整数,那么小数点位于最低位xn的右边,此时数x的表示范围为 0x2n1,目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。 (2) 浮点数的表示方法 采用浮点表示法表示的数据叫做浮点数,采用浮点数进行运算的机器叫做“浮点机”。浮点数是指小数点位置可以改变的数,显然
5、浮点数可用来表示带符号的实数。例如:表示8位字长的二进制浮点数可以写成 0.10110101 2111 尾 数 阶码,任意一个十进制数N可以写成 N = 10ZX ,同样,在计算机中一个任意进制数N可以写成 N = Bz X其中X称为浮点数的尾数,是一个纯小数。z是比例因子的指数,称为浮点的指数,是一个整数。比例因子的基数B是一个常数,一般规定只为2,8或16。在机器中表示一个浮点数时,一是要给出尾数,用定点小数形式表示。尾数部分给出有效数字的位数,因而决定了浮点数的表示精度。二是要给出指数,用整数形式表示,常称为阶码,阶码指明小数点在数据中的位置,因而决定了浮点数的表示范围。浮点数也要有符号
6、位。因此一个机器浮点数应当由阶码和尾数及其符号位组成:,32位浮点数的标准格式为:,64位浮点数的标准格式为:,不论是32位浮点数还是64位浮点数,规定基数B2。由于基数2是固定常数,不必用显示方式来表示它。 32位的浮点数中,F是浮点数的符号位,占1位,安排在最高位,F0表示正数,F1表示负数。X是尾数,放在低位部分,占用23位,用小数表示,小数点放在尾数域的最前面。Z是阶码,占用8位,阶符采用隐含方式,即采用移码方法来表示正负指数。移码方法对两个指数大小的比较和对阶操作都比较方便,因为阶码域值大者其指数值也大。采用这种方式时,将浮点数的指数值z变成阶码Z时,应将指数z加上一个固定的偏移值1
7、27(01111111),即Zz127。一个规格化的32位浮点数X的值可表示为X(1)F(1X) 2E127 其中尾数域所表示的值是1X。因为规格化的浮点数的尾数域最左位也即最高有效位总是1,故这一位经常不予存储,而认为隐藏在小数点的左边。,64位的浮点数中符号位1位,阶码域11位,尾数域52位,指数偏移值是1023。因此规格化的64位浮点数X的真值为X=(1)F (1X) 2E1O23 zE1023 若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是惟一的。例如05也可以表示成005101,50102等等。为了提高数据的表示精度,当尾数的值不为0时,其绝对值应05,即尾数域的最高有效位
8、应为1,否则要以修改阶码同时左右移小数点的办法,使其变成这一要求的表示形式,这称为浮点数的规格化表示。当一个浮点数的尾数为0,不论其阶码为何值,或者当阶码的值遇到比它能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成零值,称为机器零。 浮点数所表示的范围远比定点数大的多。假设(考虑符号位)机器中的数由8位二进制数表示时:在定点机中这8位全部用来表示有效数字(包括符号);在浮点机中若阶符阶码占3位,数符尾数占5位。在此情况下,若只考虑正数值,定点机小数表示的数的范围是00000000到01111111,相当于十进制数的0到127,而浮点机所能表示的数的范围是21100001到2110
9、1111,相当于十进制数的112875。显然,都用8位,浮点机能表示的数的范围比定点机大得多。,一台计算机中究竟采用定点表示还是浮点表示,要根据计算机的使用条件来确定。一般在高档微机以上的计算机中同时采用定点、浮点表示,由使用者进行选择。而单片机中多采用定点表示。 【例21】若浮点数X0的二进制存储格式为(43240000)16,求其32位浮点数的十进制值。 解: 将16进制数展开后,可得二制数格式为 0 100 0011 0 010 0100 0000 0000 0000 0000 F 阶码(8位) 尾数(23位) 指数z阶码127100001100111111100000111(7)10。
10、包括隐藏位1的尾数1X1010 0100 0000 0000 0000 00001010010 于是有 X0(1)F 1X 2z(1010010) 2710100100(187)10。,【例22】将十进制数1659375转换成32位浮点数的二进制格式来存储。 解:首先分别将整数和分数部分转换成二进制数:16593751000010011移动小数点,使其在第1位和第2位之间10000100111000010011 24 z4 所以:F=0,E=4127 =131,X=000010011 则得到的32位浮点数的二进制存储格式为: 0100 0001 1000 0100 1100 0000 0000
11、 0000 = (4184C000)16,(3)定点数据的编码方法 真值与机器码机器码是数在计算机中的表示形式。对于数值数据而言,无论以定点形式表示或是以浮点形式表示,都需要通过某种编码 方法,以计算机所能处理的0和1二进制位来表示其数值大小。通常一个数值数据的机内表示形式称为其机器码,而一个机器码所代表的数值称为该机器码的真值。计算机中只有机器码,不存在数的真值。假设机器码的宽度为n,最高位为符号位,下面分别介绍实际应用中常见的4种机器码编码方法:原码、反码、补码和移码。 原码表示法定点整数原码表示法定点整数原码的定义如下所示:,X 原= X 0X2n1 X 原=2n1X 2n1X0 由定义
12、可以看出,正整数的原码就是其自身,负整数的原码只需把其绝对值的原码的符号位置为1即可。( 用0表示正号,用1表示负号)。原码表示方法的定点整数的取值范围为(2n1)X2n11。注意在原码表示法中,零有正零和负零之分。000000,010000。定点小数的原码表示法定点小数原码的定义如下所示:X 原 X 0X1X 原1X 1X0,正的纯小数的原码就是其自身,而负的纯小数的原码可以通过把其绝对值的原码的符号位置1来得到。其取值范围为(12(n1)X(12(n1)。综上可以看出一个数的原码是由符号位加上数值位绝对值组成,符号位为0代表正数,符号位为1代表负数。由于0有0和0两种表示方法,n位二进制数
13、可以表示2n1个原码。 用原码实现乘除运算规则较简单,但做加减运算不方便。原码表示法的一个主要优点在于其真值和机器码表示之间对应关系很直观,容易转换。补码表示法定点整数的补码表示定点整数补码的定义如下所示:X 补 X 0X2n1X 补2nX 2n1X0,正整数的补码就是其自身,负整数的补码可以通过对其绝对值部分逐位求反,并在最低位加1求得。同样,在补码表示法中,符号位为0表示正号,为1表示负号。其表示的真值X的范围为 2n1X2n11。在补码表示中,0的机器码是惟一的,没有0和0之分。定点小数的补码表示定点小数补码的定义如下所示:X 补 X 0X1X 补2X 1X0定点小数的补码求解方法与定点
14、整数的补码求解方法相类似。其表示的真值X的范围为1X12-(n-1)。当n8时,1的定点小数补码表示为:10000000,而用定点整数的补码表示1,则为11111111。 在补码表示方法中,0的编码是惟一的,所以n位二进 制数可以表示2n个补码。,反码表示法定点整数的反码表示定点整数反码的定义如下所示: X 反 X 0X2n1 X 反(2n1)X 2n1X0同样,正整数的反码就是其自身,而负整数的反码可以通过对其绝对值逐位求反来求得。在反码表示法中,符号位仍然用0表示正号,1表示负号。其表示的真值范围与原码相同:(2n11)X2n-11。数值0用反码表示亦有0和0之分。当n8时,0反00000
15、000,0反11111111。定点小数的反码表示定点小数反码的定义如下所示:X 反 X 0X1X 反(22n1)X 1X0,定点小数的反码求解方法类似定点整数的反码求解方法。其表示的真值的取值范围为:(12(n1)X(12(n1)。反码表示法中,由于0占有了两个不同的编码,所以,n位二进制数可以表示2n1个反码。移码表示法定点整数的移码表示 X 移2n1X 2n-1X2n1 定点小数的移码表示 X 移1X 1X1移码的符号位与其他三种编码不同,用1表示正号而0表示负号。移码的求法其实也很简单,把其补码的符号位直接变反即可。所以在移码表示法中,0也有惟一的表示方法:10000000(n8) 【例
16、】 设机器码长度为8,求X(6)10的原码、补码、反码和移码。,解:X原码27(110)1000000011010000110 X补码28(110)1000000011011111010 X反码(281)(110)1111111111011111001 X移码27(110)1000000011001111010【例】 设机器码长度为8,求X(03125)10(00101)2的原码、补码、反码和移码。 解:X原码1X10(00101)1010110101000 X补码2X100(00101)1101111011000 X反码(227)X(10000000001)(00101)11010111 X
17、移码1X10(00101)0101101011000,实际上求某个数的原码、补码、反码和移码时不仅可以利用其定义式采求解,也可以通过这4个编码间的相互关系来求得。比如移码就可以通过把补码的符号位变反来求,而对于正数来讲其原码、补码和反码是完全相同的;一个负数的补码也可以很容易地从其原码推知:除符号位外,各位取反,末位再加1即可。(4)浮点数据的编码方法计算机内部浮点数据表示成如下形式:,FX是尾数的符号位,0表示正号而l表示负号;Z是阶码,通常用移码表示;X是定点小数形式的尾数,一般用补码或原码表示。【例2】 某浮点数机器码10位,基数为2,阶码用4位移码表示,尾数5位用补码表示,符号位1位。
18、求2100110l的编码。解: 符号位FX0 阶码Z(10)移码1010 尾数X(01101)补码11010 则其编码为0101011010【例 】 某浮点数机器码为17位,基数为2,阶码用4位移码表示,尾数用12位补码表示,符号位1位。求275的浮点编码形式。解:首先把275表示成浮点形式: (275)10(0687522)10(01011)22(10) FX1,Z(10)移码1010 X(01011)补码010100000000 编码为11010010100000000 同一个浮点数可以有许多种不同的编码表示(改变其阶码),所以需要对浮点数进行规格化处理,以统一其形式,同时提高数据的表示精
19、度。规格化处理(基数为2)尾数部分以纯小数形式表示,其绝对值应满足05X1。若不满足该条件,则需要修改阶码并对尾数进行移位,以使尾数满足该条件; 当尾数为正时,无论其使用原码还是补码表示,X应满足条件:05X1。以二进制形式表示为X01xx x(x为0或1); 用原码表示的负尾数,X满足1X05,以二进制形式表示为M11 xx x(x为0或1);以补码表示的负尾数,X满足1M05,以二进制形式表示为X10xx x(x为0或1); 从上面的讨论可以看出,如果规格化的尾数用原码表示,则其最高位一定为1如果改用补码表示,则尾数的最高位与其符号位相反,即为0。,2符号数据的表示方法 现代计算机不仅处理
20、数值领域的问题,而且处理大量非数值领域的问题。这样一来,必然要引入文字、字母以及某些专用符号,以便表示文字语言、逻辑语言等信息。例如人机交换信息时使用英文字母、标点符号、十进制数以及诸如$,等符号。然而数字计算机只能处理二进制数据,因此,上述信息应用到计算机中时,都必须编写成二进制格式的代码,也就是字符信息用数据表示,称为符号数据。最常见的编码格式为ASC码和EBCDIC码。(1)ASC码目前国际上普遍采用的一种字符系统是七单位的ASCII码(美国国家信息交换标准字符码),它包括10个十进制数码,26个英文字母和一定数量的专用符号,如$,等,总共128个元素,因此二进制编码需要7位,加上一个偶
21、校验位,共8位,刚好为一个字节。表21列出了七单位的ASCII码字符编码表。 ASCII码规定8个二进制位的最高一位为0,余下的7位可以给出128个编码,表示128个不同的字符。其中95个编码,对应着计算机终端能输人并且可以显示的95个字符,打印机设备也能打印这95个字符,如大小写各26个英文字母,09这10个数字符,通用的运算符和标点符号,*,B ELSEREAD (C) 就可以按图21所示从高位字节到低位字节依次存放在主存中。其中主存单元长度由4个字节组成。每个字节中存放相应字符的ASCII值,文字表达式中的空格“”在主存中也占一个字节的位置。因而每个字节分别存放十进制的73,70,32,
22、65,62,66,32,69,76,83,69,32,82,69,65,68,40,67,41,32。(2)EBCDIC码EBCDIC(Extended Binary Coded Decimal Interchange Code)即所谓扩展的二十进制交换码。采用8 bit编码来表示一个字符,共可以表示28256个不同符号,但EBCDIC中并没有使用全部编码,只选用了其中一部分,剩下的保留作扩充用。EBCDIC码常用于IBM大型机中。在EBCDIC码制中,数字“0”“9”的高4位编码都是1111,而低4位编码则依次为0000到1001。把高四位屏蔽掉,也很容易实现从EBCDIC码到二进制数字值的
23、转换。,3汉字的表示方法(1) 汉字的输入编码为了能直接使用西文标准键盘把汉字输入到计算机,就必须为汉字设计相应的输入编码方法。当前采用的方法主要有以下三类: 数字编码 常用的是国标区位码,用数字串代表一个汉字输入。区位码是将国家 标准局公布的6763个两级汉字分为94个区,每个区分94位,实际上把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。区码和位码各两位十进制数字,因此输入一个汉字需按键四次。例如“中”字位于第54区48位,区位码为5448。数字编码输入的优点是无重码,且输入码与内部编码的转换比较方便,缺点是代码难以记忆。 拼音码 拼音码是以汉语拼音为基础的输入方法。凡掌握汉语拼
24、音的人,不需训 练和记忆,即可使用。但汉字同音字太多,输入重码率很高,因此按拼音输入后还必须进行同音字选择,影响了输入速度。,字形编码 字形编码是用汉字的形状来进行的编码。汉字总数虽多,但是由一笔 一划组成,全部汉字的部件和笔划是有限的。因此,把汉字的笔划部件用字母或数字进行编码,按笔划的顺序依次输入,就能表示一个汉字。例如五笔字型编码是最有影响的一种字形编码方法。 除了上述三种编码方法之外,为了加快输入速度,在上述方法基础上,发展了词组 输入、联想输入等多种快速输入方法。但是都利用了键盘进行“手动”输入。理想的输入方式是利用语音或图像识别技术“自动”将拼音或文本输入到计算机内,使计算机能认识
25、汉字,听懂汉语,并将其自动转换为机内代码表示。目前这种理想已经成为现实。(2) 汉字的存储(汉字内码) 汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。英文字符的机内代码是七位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。例如汉字操作系统CCDOS中使用的汉字内码是一种最高位为“l”的两字节内码。 有些系统中字节的最高位用于奇偶校验位,这种情况下用三个字节表示汉字内码。,(3) 汉字的输出(汉字字模码) 字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。根据汉字输出的要求不同,点阵
26、的多少也不同。简易型汉字为16 16点阵,提高型汉字为24 24点阵、32 32点阵,甚至更高。因此字模点阵的信息量是很大的,所占存储空间也很大。以16 16点阵为例,每个汉字要占用32个字节,国标两级汉字要占用 256K字节。因此字模点阵只能用来构成汉字库,而不能用于机内存储。字库中存储了每个汉字的点阵代码。当显示输出或打印输出时才检索字库,输出字模点阵,得到字形。图 22示出了“大”字的点阵及编码。注意,汉字的输入编码、汉字内码、字模码是计算机中用于输入、内部处理、输出三种不同用途的编码,不要混为一谈。,图22汉字的字模点阵及编码,4校验码 元件故障、噪声干扰等各种因素常常导致计算机在处理
27、信息过程中出现错误。例如将1位x从部件A传送到部件B,可能由于传送信道中的噪声干扰而受到破坏,以至于在接收部件B收到的是而不是x。为了防止这种错误,可将信号采用专门的逻辑线路进行编码以检测错误,甚至校正错误。通常的方法是,在每个字上添加一些校验位,用来确定字中出现错误的位置。计算机中常用这种检错或纠错技术进行存储器读写正确性或传输信息的检验。这里仅介绍检错码中的奇偶校验码。最简单且应用广泛的检错码是采用一位校验位的奇校验或偶校验。设X(x0x1 xn-1)是一个n位字,则奇校验位 定义为 C x0x1xn-1 式中代表按位加,表明只有当X中包含有奇数个1时,才能使 1,即C0。 同理,偶校验位
28、C定义为Cx0x1xn-1 即X中包含偶数个1时,才使C0。 假设一个字X从部件A传送到部件B。在源点A,校验位C可用上面公式算出来,并合在一起将( x0 x1 xn-1 C )送到B。假设在B点真正接收到的是X( x0 x1 xn-1 C ),然后计算 F( x0 x1 xn-1 C )若F1,意味着收到的信息有错,例如(x0x1 xn-1)中正巧有一位变“反”时就会出现这种情况。若F0,表明X字传送正确。奇偶校验可提供单个错误检测,但无法检测多个错误,更无法识别错误信息的位置。,【例】 已知下表中左面一栏有5个字节的数据。请分别是用奇校验和偶校验进行编码,填在中间一栏和右面一栏。 解:假定
29、最低一位为校验位,其余高8位为数据位,列表如下。从中看出,校验位的值取。还是取1,是由数据位中1的个数决定的。,212 计算机中算术运算和逻辑运算1二进制数的算术运算(1) 定点数运算 定点数加法减法运算定点数的加法和减法运算使用补码较为方便。对于定点小数的运算规则如下: 加法:XY补X补y补 mod 2 减法:XY补X补y补 mod 2当运算结果超过了定点数的表示范围时,则产生溢出(Overflow),常用的溢出检测机制主要有以下两种:进位判决法: 令Cn1表示次高位(最高数值位)向最高位(符号位)的进位,Cn则表示符号位的进位,则结果是否溢出的判决表如表22所示,即CnCn11时溢出。这里
30、,表示异或。,表22 溢出的判决表,【例.】X(100)10(01100100)2,Y(50)10(00110010)2,求XY。解: X补01100100,y补00110010 XY补X补y补10010110 CnCn11,表示结果溢出。【例.】X(100)l0(01100100)2,Y(50)l0(00110010)2,求XY。解: X补10011100,y补00110010 XY补X补Y补11001110 CnCn10,因此没有溢出。双符号位判决法: 采用两位二进制位来表示符号位:00正号,11负号,根据运算结果的符号位也可以判定其是否溢出,其判决表如表23所示。,表23 双符号位判决表
31、,【例2.1】X(100)l0(01100100)2,Y(50)l0(00110010)2,求XY。解: X补001100100 Y补000110010 XY补X补y补010010110 其符号位为0 1,说明结果溢出。 定点数乘法运算在作定点数的乘法运算时采用原码比较方便。通常使用原码一位乘法来求两个定点数的乘积。 运算规则:乘积的符号位等于乘数和被乘数的符号位进行异或;乘积的值等于两数绝对值之积,即乘数和被乘数的绝对值进行移位相加。算法:(用绝对值进行运算) 令X表示被乘数,Y表示乘数,P表示部分积以存放中间结果,flag用作判别位,count用作计数。,令P0;count0;flag0;
32、 P和Y一起右移一位(P为高位部分,Y为低位部分),右移时P的最高位补0,P的最低位移入Y的最高位,Y的最低位移入到flag中; 如果flag1同PPX,否则P不变; countcount1,如果count超过Y的位数则运算停止,否则转到上述第2步继续执行; P和Y的内容就是所求乘积的绝对值,其中P存放积的高位,而Y存放积的低位。【例】 X(10)l0(1010)2,Y(6)10(0110)2,求X,Y。解: X原1010,Y原0110乘积的符号位S 0 1 1。,表24 定点数乘法运算表,则所得乘积为(00111100)2(60)l0 定点数除法运算定点数的除法通常也常用原码进行。下面介绍常
33、用的加减交替法求两个数X和Y 的商。运算规则:商的符号位同定点数原码乘法的处理方法,由两数的符号位进行异或;两数的绝对值部分进行相除;算法:(求XY,设X、Y的数值部分长度为N) 令及RX,counter0; RRY;若R为正则商1,否则商0; R左移一位,countercounter1; 若上一次商为1则RRY,否则RRY; R为正则商1,否则商0; 若R0或者counterN则结束,否则转到上述第3步执行。,(2) 浮点数运算在进行浮点运算之前,应先对浮点数进行规格化。浮点数的加减运算设有浮点数XM2i,YN2j,求XY或XY,其运算过程如下: 对阶:使两个数的阶码相同。令Kij,把阶码小
34、的数的尾数右移K位,其阶码加上K。当右移尾数时,若尾数用补码表示则符号位参加移位,符号位不变,如果是原码,则符号位不参加移位,尾数的最高位补0。 尾数进行加、减运算: 规格化处理:若尾数所得结果不是规格化的数,则需对其进行规格化处理。当尾数溢出时,尾数向右规格化位,阶码加1;当尾数用补码表示,尾数的最高位与符号位相同时,应向左规格化,尾数每向左移一位,阶码减1,直到尾数最高位与符号位相反。,舍入操作:舍入的方法常用0舍1入,即当向右规格化时,若移掉的最高位为1,则在尾数末位加1,否则舍去。另一种则是“恒1”法,即不管移走的数据为何值,尾数最末位恒置1。 溢出判断:以阶码为准。若阶码上溢,则结果
35、溢出;若阶码下溢,则结果为0;否则结果正确无溢出。 浮点数的乘除运算 浮点数相乘,其积的阶码为两数阶码相加,积的尾数为两尾数相乘。浮点数相除,其商的阶码为两数阶码之差,商的尾数为两尾数相除。其结果都需要进行规格化处理,同时还需要判断其阶码是否溢出。 2逻辑代数及逻辑运算 逻辑代数是1849年英国数学家乔治布尔提出的以代数的方式对逻辑变量进行描述和分析的数学工具,又称布尔代数。逻辑变量的取值只有“真”和“假”,通常以1和0表示。,(1) 基本的逻辑运算 “与”(AND)运算 又称为逻辑乘运算,其运算符号通常用AND、或等表示。两个变量的“与”运算的运算规则如表24所示。即当A、B中任一变量取0值
36、时,其运算结果为0。,表25 “与”运算表 表26 “或”运算表,“或”(OR)运算 又称为逻辑加运算,其运算符号为OR、U、V或等。两个变量的“或”运算规则如表25所示。即当A、B中任意一个取1值时,其运算结果为l。“非”(NOT)运算 又称为逻辑求反运算。常用表示对变量A进行求反。其运算规则很简单:0,。 “异或”运算 常用的还有“异或”运算,又称为半加运算,其运算符号为XOR或。异或运算是一种复合逻辑运算,可用上述基本逻辑运算表示如下:AB A BA B,22 逻辑部件,221 寄存器 1寄存器组(register block)概述CPU中的寄存器通常可以分为两类:用户可见的寄存器(us
37、er-visible registers)和状态控制寄存器(control and status registers)。 (1) 用户可见的寄存器用户能够通过机器语言来访问这些寄存器。合理优化地使用这些寄存器可以减少对主存的访问次数,从而提高程序的执行速度。按其功能可以分为4类:通用寄存器(general purpose register)通用寄存器的用途由程序员编程决定,例如可以用来存放操作数,也可以用作寻址寄存器。数据寄存器(dataregister)数据寄存器仅能用来存放数据而不能用来对操作数的地址进行计算。,地址寄存器(addressregister) 地址寄存器用来存放操作数的地址,
38、一般而言地址寄存器又可以分为段地址寄存器(segment pointer register)、间址寄存器(index register)和堆栈寄存器(stack pointer register)。段地址寄存器用在采用段式内存管理的计算机中,存放着某一段内存区域的基地址。间址寄存器用在间接寻址(indexed addressing)方式下。堆栈寄存器用以存放堆栈栈顶的地址,使得在使用堆栈操作(如push,pop)时无须显式地给出操作数的地址(即其地址是隐含的)。标志寄存器(flagcondition codes register)标志寄存器中的位是由CPU硬件根据运算的结果而设立的一些指示位,
39、以反映该次运算的某些特征:结果为正、负、零、溢出等等,并可以用作分支跳转的依据。一般而言,标志寄存器允许编程者进行读操作,但不允许对其直接进行写操作。,(2)状态控制寄存器(CSR)这些寄存器被控制器(control unit)用来控制CPU的操作。通常是程序员不可见的,但也有某些寄存器在某种特定的状态下可以由某些特权指令进行访问。常见的CSR有:程序计数器(program counter,PC)、指令寄存器(instruction register,IR)、存储器地址寄存器(memoryaddress,register,MAR)、存储器缓冲寄存器(memory buffer register
40、,MBR)以及程序状态字(programstatusword,PSW)。PC中存放着下一条待取指令的地址。当程序顺序执行时,CPU在取回一条指令后,会自动修改PC中的值以使其指向下一条指令。而程序中的分支或跳转指令也是通过修改PC中的值来达到改变流程的目的。IR中存放着CPU刚取回的指令,以供指令译码使用。CPU和存储器之间的数据交换通过MAR和MBR来实现。MAR中存放着待访问的内存单元的地址而MBR则存放从内存中读人的数据或要写回内存单元的数据。这4个寄存器(PC、IR、MAR、MBR)用来实现在CPU和存储器(memory)之间的数据交换。另外CPU内部,在ALU与MBR、用户可见的寄存
41、器之间也可能存在用作输入/输出缓冲寄存器。,2寄存器逻辑组成 寄存器是计算机的一个重要部件,用于暂存数据、指令等。它由触发器和一些控制门组成。在寄存器中,常用的是正边沿触发D触发器和锁存器。 图23所示是由正沿触发的D触发器组成的四位寄存器。在CP正沿作用下,外部数据才能进入寄存器。D是复位端,CP 是 D触发器的脉冲端,CK 是增加了个与逻辑门电路来取正沿脉冲的输入端。四D寄存器的功能见表27,其中代表正脉冲,也即正沿。,图23四D寄存器,表27 四D寄存器功能表,事实上,在计算机中常要求寄存器有移位功能。如在进行乘法时,要求将部分积右移;在将并行传送的数转换成串行数时也需移位。有移位功能的
42、寄存器称为移位寄存器。222 计数器计数器是计算机、数字仪表中常用的一种电路。计数器按时钟作用方式来分,有同步计数器和异步计数器两大类。在异步计数器中,由于高位触发器的时钟信号是由低一位触发器的输出来提供的,但是结构简单。同步计数器中各触发器的时钟信号是由同一脉冲来提供的,因此,各触发器是同时翻转的,它的工作频率比异步计数器高,但结构较复杂。计数器按计数顺序来分,有二进制、十进制两大类。在计算机中较少使用异步计数器,这里着重介绍有并行输入数据功能的正向同步十进制计数器。图24是用主从JK触发器构成的同步十进制集成化计数器。同步计数器是采用快速进位方式来计数的,触发器及实现快速进位的逻辑电路是它的核心。,