《数据表示方法欢迎光临长金融高等专科学校》由会员分享,可在线阅读,更多相关《数据表示方法欢迎光临长金融高等专科学校(73页珍藏版)》请在金锄头文库上搜索。
1、第二章 数据表示方法2-1 数据表示方法和运算器数据表示方法和运算器 2-2 逻辑部件逻辑部件 2-3 控制部件控制部件 121 数据表示方法和运算器数据表示方法和运算器 2 21 11 1计算机中数据的表示方法计算机中数据的表示方法 当前的计算机所采用的存储器件都是两态器件,所以适合于存放二进制数据。尽管为了方便起见,也使用其他进制,如十进制、十六进制,但是在计算机内部数据还是以二进制的形式存放和处理。二进制只使用了两个不同的数字符号,易于用物理器件来实现:在物理世界中具有两个稳定状态的物理器件很多,如晶体管的“截止”与“导通”、电容 的 “充 电 ”与 “放 电 ”、 电 压 信 号 的
2、“高 ”与 “低 ”、 脉 冲 的 “有 ”与 “无 ”, 电磁单元的“正向磁化”与“反向磁化”等等,只要规定其中一种稳定状态表示“1”,另一种稳定状态表示“0”,就可以用来表示二进制数位了。其次,二进制的运算规则非常简单,易于用电子器件来实现。数据的类型多种多样,如文件、图、表、树、阵列、链表、栈、向量、串、实数、整数、布尔数、字符等。计算机里用到的数据类型主要可分为两类:表示数量的数值数据和非数值性的符号数据。所有的数据都是以二进制的形式在计算机里处理和存储。本节主要讲述数值数据在计算机里的表示方法。 2 1数值数据表示方法数值数据表示方法 在计算机中表示数时,需要考虑以下几个因素:要表示
3、的数的类型(小数、整数、实数和复数)、符号如何表示以及小数点的位置;可能遇到的数值范围;数值精确度;数据存储和处理所需要的硬件代价。计算机中表示数值符号的方法是占用一位二进制位,1表示负号、0表示正号。常用的数值数据表示格式有两种,根据小数点的位置是固定不变还是浮动变化的分为定点格式和浮点格式。一般来说,定点格式容许的数值范围有限,但要求的处理硬件比较简单。而浮点格式容许的数值范围很大,但要求的处理硬件比较复杂。 (1) (1) 定点数的表示方法定点数的表示方法 所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。由于约定在固定的位置,小数点就不再使用记号“”来表示。原理上讲,小数点位
4、置固定在哪一位都可以,但是通常将数据表示成纯小数或纯整数。 3 例如用一个n1位字来表示一个定点数x,其中一位x0用来表示数的符号,其余位数代表它的量值。为了将整个n1位统一处理起见,符号位x0放在最左位置,并用数值 0和1分别代表正号和负号,这样,对于任意定点数x=x0x1x2xn,在定点机中可表示为如下形式:x0x1 x2 xn-1 xn符号 数量值 4如果数x表示的是纯小数,那么小数点位于x0和x1之间。当x0x1x2xn各位均为0时,数x的绝对值最小,当各位均为1时,x的绝对值最大,故数的表示范围为0x12n 如果数x表示的是纯整数,那么小数点位于最低位xn的右边,此时数x的表示范围为
5、 0x2n1,目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。 (2) 浮点数的表示方法浮点数的表示方法 采用浮点表示法表示的数据叫做浮点数,采用浮点数进行运算的机器叫做“浮点机”。浮点数是指小数点位置可以改变的数,显然浮点数可用来表示带符号的实数。例如:表示8位字长的二进制浮点数可以写成 0.101101012111 尾 数 阶码 5 任意一个十进制数N可以写成 N = 10ZX ,同样,在计算机中一个任意进制数N可以写成 N = Bz X其中X称为浮点数的尾数,是一个纯小数。z是比例因子的指数,称为浮点的指数,是一个整数。比例因子的基数B是一个常数,一般规定只为2,
6、8或16。在机器中表示一个浮点数时,一是要给出尾数,用定点小数形式表示。尾数部分给出有效数字的位数,因而决定了浮点数的表示精度。二是要给出指数,用整数形式表示,常称为阶码,阶码指明小数点在数据中的位置,因而决定了浮点数的表示范围。浮点数也要有符号位。因此一个机器浮点数应当由阶码和尾数及其符号位组成: 6 3232位浮点数的标准格式为: Z0Z1Z2Zn-1ZnX0X1X2Xn-1Xn阶符阶码数符尾数31302322032位浮点数FZX64位浮点数的标准格式为: 63625251064位浮点数FZX7不论是32位浮点数还是64位浮点数,规定基数B2。由于基数2是固定常数,不必用显示方式来表示它。
7、32位的浮点数中,F是浮点数的符号位,占1位,安排在最高位,F0表示正数,F1表示负数。X是尾数,放在低位部分,占用23位,用小数表示,小数点放在尾数域的最前面。Z是阶码,占用8位,阶符采用隐含方式,即采用移码方法来表示正负指数。移码方法对两个指数大小的比较和对阶操作都比较方便,因为阶码域值大者其指数值也大。采用这种方式时,将浮点数的指数值z变成阶码Z时,应将指数z加上一个固定的偏移值127(01111111),即Zz127。一个规格化的32位浮点数X的值可表示为X(1)F(1X)2E127 其中尾数域所表示的值是1X。因为规格化的浮点数的尾数域最左位也即最高有效位总是1,故这一位经常不予存储
8、,而认为隐藏在小数点的左边。8 64位的浮点数中符号位1位,阶码域11位,尾数域52位,指数偏移值是1023。因此规格化的64位浮点数X的真值为X=(1)F(1X)2E1O23zE1023若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是惟一的。例如05也可以表示成005101,50102等等。为了提高数据的表示精度,当尾数的值不为0时,其绝对值应05,即尾数域的最高有效位应为1,否则要以修改阶码同时左右移小数点的办法,使其变成这一要求的表示形式,这称为浮点数的规格化表示。当一个浮点数的尾数为0,不论其阶码为何值,或者当阶码的值遇到比它能表示的最小值还小时,不管其尾数为何值,计算机都把该
9、浮点数看成零值,称为机器零。浮点数所表示的范围远比定点数大的多。假设(考虑符号位)机器中的数由8位二进制数表示时:在定点机中这8位全部用来表示有效数字(包括符号);在浮点机中若阶符阶码占3位,数符尾数占5位。在此情况下,若只考虑正数值,定点机小数表示的数的范围是00000000到01111111,相当于十进制数的0到127,而浮点机所能表示的数的范围是21100001到21101111,相当于十进制数的112875。显然,都用8位,浮点机能表示的数的范围比定点机大得多。9 一台计算机中究竟采用定点表示还是浮点表示,要根据计算机的使用条件来确定。一般在高档微机以上的计算机中同时采用定点、浮点表示
10、,由使用者进行选择。而单片机中多采用定点表示。 【例21】若浮点数X0的二进制存储格式为(43240000)16,求其32位浮点数的十进制值。 解: 将16进制数展开后,可得二制数格式为 0 100 0011 0 010 0100 0000 0000 0000 0000 F 阶码(8位) 尾数(23位) 指数z阶码127100001100111111100000111(7)10。包括隐藏位1的尾数1X1010 0100 0000 0000 0000 00001010010 于是有 X0(1)F 1X 2z(1010010) 2710100100(187)10。 10【例22】将十进制数1659
11、375转换成32位浮点数的二进制格式来存储。解:首先分别将整数和分数部分转换成二进制数:16593751000010011移动小数点,使其在第1位和第2位之间1000010011100001001124z4所以:F=0,E=4127=131,X=000010011则得到的32位浮点数的二进制存储格式为:01000001100001001100000000000000=(4184C000)1611 (3)定点数据的编码方法定点数据的编码方法真值与机器码机器码是数在计算机中的表示形式。对于数值数据而言,无论以定点形式表示或是以浮点形式表示,都需要通过某种编码方法,以计算机所能处理的0和1二进制位来
12、表示其数值大小。通常一个数值数据的机内表示形式称为其机器码,而一个机器码所代表的数值称为该机器码的真值。计算机中只有机器码,不存在数的真值。假设机器码的宽度为n,最高位为符号位,下面分别介绍实际应用中常见的4种机器码编码方法:原码、反码、补码和移码。 原码表示法定点整数原码表示法定点整数原码的定义如下所示:12 X原=X0X2n1X原=2n1X2n1X0由定义可以看出,正整数的原码就是其自身,负整数的原码只需把其绝对值的原码的符号位置为1即可。(用0表示正号,用1表示负号)。原码表示方法的定点整数的取值范围为(2n1)X2n11。注意在原码表示法中,零有正零和负零之分。000000,01000
13、0。定点小数的原码表示法定点小数原码的定义如下所示:X 原 X 0X1X 原1X 1X013正的纯小数的原码就是其自身,而负的纯小数的原码可以通过把其绝对值的原码的符号位置1来得到。其取值范围为(12(n1)X(12(n1)。综上可以看出一个数的原码是由符号位加上数值位绝对值组成,符号位为0代表正数,符号位为1代表负数。由于0有0和0两种表示方法,n位二进制数可以表示2n1个原码。用原码实现乘除运算规则较简单,但做加减运算不方便。原码表示法的一个主要优点在于其真值和机器码表示之间对应关系很直观,容易转换。补码表示法定点整数的补码表示定点整数补码的定义如下所示:X补X0X2n1X补2nX2n1X
14、014 正整数的补码就是其自身,负整数的补码可以通过对其绝对值部分逐位求反,并在最低位加1求得。同样,在补码表示法中,符号位为0表示正号,为1表示负号。其表示的真值X的范围为2n1X2n11。在补码表示中,0的机器码是惟一的,没有0和0之分。定点小数的补码表示定点小数补码的定义如下所示:X补X0X1X补2X1X0定点小数的补码求解方法与定点整数的补码求解方法相类似。其表示的真值X的范围为1X12-(n-1)。当n8时,1的定点小数补码表示为:,而用定点整数的补码表示1,则为。 在补码表示方法中,0的编码是惟一的,所以n位二进 制数可以表示2n个补码。 15 反码表示法定点整数的反码表示定点整数
15、反码的定义如下所示:X反X0X2n1X反(2n1)X2n1X0同样,正整数的反码就是其自身,而负整数的反码可以通过对其绝对值逐位求反来求得。在反码表示法中,符号位仍然用0表示正号,1表示负号。其表示的真值范围与原码相同:(2n11)X2n-11。数值0用反码表示亦有0和0之分。当n8时,0反00000000,0反11111111。定点小数的反码表示定点小数反码的定义如下所示:X反X0X1X反(22n1)X1X016定点小数的反码求解方法类似定点整数的反码求解方法。其表示的真值的取值范围为:(12(n1)X(12(n1)。反码表示法中,由于0占有了两个不同的编码,所以,n位二进制数可以表示2n1
16、个反码。移码表示法定点整数的移码表示 X移2n1X2n-1X2n1定点小数的移码表示X移1X1X1移码的符号位与其他三种编码不同,用1表示正号而0表示负号。移码的求法其实也很简单,把其补码的符号位直接变反即可。所以在移码表示法中,0也有惟一的表示方法:10000000(n8)【例】设机器码长度为8,求X(6)10的原码、补码、反码和移码。 17 解:解:X原码原码27(110)1000000011010000110 X补码补码28(110)1000000011011111010 X反反 码码 (28 1) ( 110) 11111111 11011111001 X移移码码27(110)1000
17、000011001111010【例例】 设设机机器器码码长长度度为为8,求求X(03125)10(00101)2的原码、补码、反码和移码。的原码、补码、反码和移码。 解解:X原原 码码1X10(00101)1010110101000 X补补 码码2X100(00101)1101111011000 X反反码码(227)X(10000000001)(00101)11010111 X移移 码码1X10(00101)0101101011000 18实际上求某个数的原码、补码、反码和移码时不仅可以利用其定义式采求解,也可以通过这4个编码间的相互关系来求得。比如移码就可以通过把补码的符号位变反来求,而对于
18、正数来讲其原码、补码和反码是完全相同的;一个负数的补码也可以很容易地从其原码推知:除符号位外,各位取反,末位再加1即可。(4)浮点数据的编码方法浮点数据的编码方法计算机内部浮点数据表示成如下形式:FXZX19 FX是尾数的符号位,0表示正号而l表示负号;Z是阶码,通常用移码表示;X是定点小数形式的尾数,一般用补码或原码表示。【例2】某浮点数机器码10位,基数为2,阶码用4位移码表示,尾数5位用补码表示,符号位1位。求2100110l的编码。解:符号位FX0阶码Z(10)移码1010尾数X(01101)补码11010则其编码为0101011010【例】某浮点数机器码为17位,基数为2,阶码用4位
19、移码表示,尾数用12位补码表示,符号位1位。求275的浮点编码形式。解:首先把275表示成浮点形式:(275)10(0687522)10(01011)22(10) FX120Z(10)移码1010X(01011)补码0编码为110000同一个浮点数可以有许多种不同的编码表示(改变其阶码),所以需要对浮点数进行规格化处理,以统一其形式,同时提高数据的表示精度。规格化处理(基数为2)尾数部分以纯小数形式表示,其绝对值应满足05X1。若不满足该条件,则需要修改阶码并对尾数进行移位,以使尾数满足该条件; 当尾数为正时,无论其使用原码还是补码表示,X应满足条件:05X1。以二进制形式表示为X01xxx(
20、x为0或1);用原码表示的负尾数,X满足1X05,以二进制形式表示为M11 xx x(x为0或1);以补码表示的负尾数,X满足1M05,以二进制形式表示为X10xx x(x为0或1); 从上面的讨论可以看出,如果规格化的尾数用原码表示,则其最高位一定为1如果改用补码表示,则尾数的最高位与其符号位相反,即为0。 21 2符号数据的表示方法符号数据的表示方法现代计算机不仅处理数值领域的问题,而且处理大量非数值领域的问题。这样一来,必然要引入文字、字母以及某些专用符号,以便表示文字语言、逻辑语言等信息。例如人机交换信息时使用英文字母、标点符号、十进制数以及诸如$,等符号。然而数字计算机只能处理二进制
21、数据,因此,上述信息应用到计算机中时,都必须编写成二进制格式的代码,也就是字符信息用数据表示,称为符号数据。最常见的编码格式为ASC码和EBCDIC码。(1)ASC码目前国际上普遍采用的一种字符系统是七单位的ASCII码(美国国家信息交换标准字符码),它包括10个十进制数码,26个英文字母和一定数量的专用符号,如$,等,总共128个元素,因此二进制编码需要7位,加上一个偶校验位,共8位,刚好为一个字节。表21列出了七单位的ASCII码字符编码表。ASCII码规定8个二进制位的最高一位为0,余下的7位可以给出128个编码,表示128个不同的字符。其中95个编码,对应着计算机终端能输人并且可以显示
22、的95个字符,打印机设备也能打印这95个字符,如大小写各26个英文字母,09这10个数字符,通用的运算符和标点符号,*,等等。另外的33个字符,其编码值为031和127,则不对应任何一个可以显示或打印的实际字符,它们被用作控制码,控制计算机某些外围设备的工作特性和某些计算机软件的运行情况。22计算机里的存储和传送单位通常使用Byte(1Byte8bit),所以7位的ASCII码也用一个字节来表示。ASCII编码和128个字符的对应关系如表21所示。表中编码符号的排列次序为,最高1位没有使用,通常填0;也可以把它用作校验位或者用来扩展字符集。表中未给出,列为高位部分,行为低位部分。ASCII的字
23、符编码表一共有2416行,238列。低4位编码用作行编码,而高3位用作列编码。值得注意的一点是数字“0”到“9”的编码:它们都位于3列(011),从0行(0000)排列到9行(1001),即“0”的ASCII码为(0110000)2(30)16,“9”的 ASCII码为(0111001)2(39)16。把高3位屏蔽掉,低4位恰是“0”“9”的二进制码。可以看出,十进制的8421码可以去掉(011)而得到。这个特点使得在数字符号(ASCII码)与数字值(二进制码)之间进行转换非常方便。23表21ASC字符编码表0000010100111001011101110000NULDELSP0Pp0001
24、SOHDC1!1AQaq0010STXDC22BRbr0011ETXDC3#3CScs0100EOTDC4$4DTdt0101ENQNAK%5EUeu0110ACKSYN&6FVfv0111DELETB7GWgw1000BSCAN(8HXhx1001HTEM)9IYiy1010LFSUB*:JZjz1011VTESC+;Kk1100FFFS,Nn1111SIUS/?OoDEL24字符串是指连续的一串字符,通常方式下,它们占用主存中连续的多个字节,每个字节存一个字符。当主存字由2个或4个字节组成时,在同一个主存字中,既可按从低位字节向高位字节的顺序存放字符串内容,也可按从高位字节向低位字节的次序
25、顺序存放字符串内容。这两种存放方式都是常用方式,不同的计算机可以选用其中任何一种。例如下述字符串: 图2-1字符串在主存中的存放 25IFABELSEREAD(C)就可以按图21所示从高位字节到低位字节依次存放在主存中。其中主存单元长度由4个字节组成。每个字节中存放相应字符的ASCII值,文字表达式中的空格“”在主存中也占一个字节的位置。因而每个字节分别存放十进制的73,70,32,65,62,66,32,69,76,83,69,32,82,69,65,68,40,67,41,32。(2)EBCDIC码EBCDIC(ExtendedBinaryCodedDecimalInterchangeCo
26、de)即所谓扩展的二十进制交换码。采用8bit编码来表示一个字符,共可以表示28256个不同符号,但EBCDIC中并没有使用全部编码,只选用了其中一部分,剩下的保留作扩充用。EBCDIC码常用于IBM大型机中。在EBCDIC码制中,数字“0”“9”的高4位编码都是1111,而低4位编码则依次为0000到1001。把高四位屏蔽掉,也很容易实现从EBCDIC码到二进制数字值的转换。 263 3汉字的表示方法汉字的表示方法(1 1) 汉字的输入编码汉字的输入编码为了能直接使用西文标准键盘把汉字输入到计算机,就必须为汉字设计相应的输入编码方法。当前采用的方法主要有以下三类:数字编码 常用的是国标区位码
27、,用数字串代表一个汉字输入。区位码是将国家 标准局公布的6763个两级汉字分为94个区,每个区分94位,实际上把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。区码和位码各两位十进制数字,因此输入一个汉字需按键四次。例如“中”字位于第54区48位,区位码为5448。数字编码输入的优点是无重码,且输入码与内部编码的转换比较方便,缺点是代码难以记忆。拼音码 拼音码是以汉语拼音为基础的输入方法。凡掌握汉语拼音的人,不需训 练和记忆,即可使用。但汉字同音字太多,输入重码率很高,因此按拼音输入后还必须进行同音字选择,影响了输入速度。 27字形编码 字形编码是用汉字的形状来进行的编码。汉字总数虽多,
28、但是由一笔 一划组成,全部汉字的部件和笔划是有限的。因此,把汉字的笔划部件用字母或数字进行编码,按笔划的顺序依次输入,就能表示一个汉字。例如五笔字型编码是最有影响的一种字形编码方法。除了上述三种编码方法之外,为了加快输入速度,在上述方法基础上,发展了词组 输入、联想输入等多种快速输入方法。但是都利用了键盘进行“手动”输入。理想的输入方式是利用语音或图像识别技术“自动”将拼音或文本输入到计算机内,使计算机能认识汉字,听懂汉语,并将其自动转换为机内代码表示。目前这种理想已经成为现实。(2 2) 汉字的存储(汉字内码)汉字的存储(汉字内码)汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一
29、般采用两个字节表示。英文字符的机内代码是七位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。例如汉字操作系统CCDOS中使用的汉字内码是一种最高位为“l”的两字节内码。 有些系统中字节的最高位用于奇偶校验位,这种情况下用三个字节表示汉字内码。 28 (3 3) 汉字的输出(汉字字模码)汉字的输出(汉字字模码) 字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。根据汉字输出的要求不同,点阵的多少也不同。简易型汉字为16 16点阵,提高型汉字为24 24点阵、32 32点阵,甚至更高。因此字模点阵的信息量是很大的,所占
30、存储空间也很大。以16 16点阵为例,每个汉字要占用32个字节,国标两级汉字要占用 256K字节。因此字模点阵只能用来构成汉字库,而不能用于机内存储。字库中存储了每个汉字的点阵代码。当显示输出或打印输出时才检索字库,输出字模点阵,得到字形。图 22示出了“大”字的点阵及编码。注意,汉字的输入编码、汉字内码、字模码是计算机中用于输入、内部处理、输出三种不同用途的编码,不要混为一谈。 29图22汉字的字模点阵及编码304校验码校验码 元件故障、噪声干扰等各种因素常常导致计算机在处理信息过程中出现错误。例如将1位x从部件A传送到部件B,可能由于传送信道中的噪声干扰而受到破坏,以至于在接收部件B收到的
31、是而不是x。为了防止这种错误,可将信号采用专门的逻辑线路进行编码以检测错误,甚至校正错误。通常的方法是,在每个字上添加一些校验位,用来确定字中出现错误的位置。计算机中常用这种检错或纠错技术进行存储器读写正确性或传输信息的检验。这里仅介绍检错码中的奇偶校验码。最简单且应用广泛的检错码是采用一位校验位的奇校验或偶校验。设X(x0x1xn-1)是一个n位字,则奇校验位定义为Cx0x1xn-1式中代表按位加,表明只有当X中包含有奇数个1时,才能使1,即C0。同理,偶校验位C定义为Cx0x1xn-1即X中包含偶数个1时,才使C0。假设一个字X从部件A传送到部件B。在源点A,校验位C可用上面公式算出来,并
32、合在一起将(x0x1xn-1C)送到B。假设在B点真正接收到的是X(x0x1xn-1C),然后计算F(x0 x1 xn-1 C)若F1,意味着收到的信息有错,例如(x0x1xn-1)中正巧有一位变“反”时就会出现这种情况。若F0,表明X字传送正确。奇偶校验可提供单个错误检测,但无法检测多个错误,更无法识别错误信息的位置。 31【例】 已知下表中左面一栏有5个字节的数据。请分别是用奇校验和偶校验进行编码,填在中间一栏和右面一栏。 解:假定最低一位为校验位,其余高8位为数据位,列表如下。从中看出,校验位的值取。还是取1,是由数据位中1的个数决定的。 数据偶校验编码奇校验编码101010100101
33、010101010101001010101000000000000000000001011111111011111110111111110111111111322 21 12 2 计算机中计算机中算术运算和逻辑运算算术运算和逻辑运算1 1二进制数的算术运算二进制数的算术运算(1 1) 定点数运算定点数运算 定点数加法减法运算定点数的加法和减法运算使用补码较为方便。对于定点小数的运算规则如下: 加法:XY补X补y补 mod 2 减法:XY补X补y补 mod 2当运算结果超过了定点数的表示范围时,则产生溢出(Overflow),常用的溢出检测机制主要有以下两种:进位判决法: 令Cn1表示次高位(最
34、高数值位)向最高位(符号位)的进位,Cn则表示符号位的进位,则结果是否溢出的判决表如表22所示,即CnCn11时溢出。这里,表示异或。 33表22 溢出的判决表 CnCn1OverflowCnCn100无溢出01溢出10溢出11无溢出34 【例.】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
35、补11001110 CnCn10,因此没有溢出。双符号位判决法: 采用两位二进制位来表示符号位:00正号,11负号,根据运算结果的符号位也可以判定其是否溢出,其判决表如表23所示。 35表23 双符号位判决表 运算结果的符号位Overflow运算结果的符号位Overflow00无溢出10溢出01溢出11无溢出36【例2.1】X(100)l0(01100100)2,Y(50)l0(00110010)2,求XY。解:X补001100100Y补000110010XY补X补y补010010110其符号位为01,说明结果溢出。定点数乘法运算在作定点数的乘法运算时采用原码比较方便。通常使用原码一位乘法来求
36、两个定点数的乘积。运算规则:乘积的符号位等于乘数和被乘数的符号位进行异或;乘积的值等于两数绝对值之积,即乘数和被乘数的绝对值进行移位相加。算法:(用绝对值进行运算) 令X表示被乘数,Y表示乘数,P表示部分积以存放中间结果,flag用作判别位,count用作计数。37令P0;count0;flag0;P和Y一起右移一位(P为高位部分,Y为低位部分),右移时P的最高位补0,P的最低位移入Y的最高位,Y的最低位移入到flag中;如果flag1同PPX,否则P不变;countcount1,如果count超过Y的位数则运算停止,否则转到上述第2步继续执行;P和Y的内容就是所求乘积的绝对值,其中P存放积的
37、高位,而Y存放积的低位。【例】X(10)l0(1010)2,Y(6)10(0110)2,求X,Y。解:X原1010,Y原0110乘积的符号位S 0 1 1。38表24 定点数乘法运算表执行动作部分积P乘数Y判别位Flagcounter初始化0000011000右移0000001101右移0000000112P+X1010右移0101000013P+X1111右移0111100004右移001111000539则所得乘积为(00111100)2(60)l0 定点数除法运算定点数的除法通常也常用原码进行。下面介绍常用的加减交替法求两个数X和Y 的商。运算规则:商的符号位同定点数原码乘法的处理方法,
38、由两数的符号位进行异或;两数的绝对值部分进行相除;算法:(求XY,设X、Y的数值部分长度为N) 令及RX,counter0; RRY;若R为正则商1,否则商0; R左移一位,countercounter1; 若上一次商为1则RRY,否则RRY; R为正则商1,否则商0; 若R0或者counterN则结束,否则转到上述第3步执行。 40 (2) 浮点数运算浮点数运算在进行浮点运算之前,应先对浮点数进行规格化。浮点数的加减运算设有浮点数XM2i,YN2j,求XY或XY,其运算过程如下:对阶:使两个数的阶码相同。令Kij,把阶码小的数的尾数右移K位,其阶码加上K。当右移尾数时,若尾数用补码表示则符号
39、位参加移位,符号位不变,如果是原码,则符号位不参加移位,尾数的最高位补0。尾数进行加、减运算: 规格化处理:若尾数所得结果不是规格化的数,则需对其进行规格化处理。当尾数溢出时,尾数向右规格化位,阶码加1;当尾数用补码表示,尾数的最高位与符号位相同时,应向左规格化,尾数每向左移一位,阶码减1,直到尾数最高位与符号位相反。41舍入操作:舍入的方法常用0舍1入,即当向右规格化时,若移掉的最高位为1,则在尾数末位加1,否则舍去。另一种则是“恒1”法,即不管移走的数据为何值,尾数最末位恒置1。溢出判断:以阶码为准。若阶码上溢,则结果溢出;若阶码下溢,则结果为0;否则结果正确无溢出。浮点数的乘除运算 浮点
40、数相乘,其积的阶码为两数阶码相加,积的尾数为两尾数相乘。浮点数相除,其商的阶码为两数阶码之差,商的尾数为两尾数相除。其结果都需要进行规格化处理,同时还需要判断其阶码是否溢出。2逻辑代数及逻辑运算 逻辑代数是1849年英国数学家乔治布尔提出的以代数的方式对逻辑变量进行描述和分析的数学工具,又称布尔代数。逻辑变量的取值只有“真”和“假”,通常以1和0表示。42(1) 基本的逻辑运算基本的逻辑运算 “与”(AND)运算 又称为逻辑乘运算,其运算符号通常用AND、或等表示。两个变量的“与”运算的运算规则如表24所示。即当A、B中任一变量取0值时,其运算结果为0。表25 “与”运算表 表26 “或”运算
41、表 ABZ=AB000010100111ABZ=A+B00001110111143“或”(OR)运算 又称为逻辑加运算,其运算符号为OR、U、V或等。两个变量的“或”运算规则如表25所示。即当A、B中任意一个取1值时,其运算结果为l。“非”(NOT)运算 又称为逻辑求反运算。常用表示对变量A进行求反。其运算规则很简单:0,。 “异或”运算 常用的还有“异或”运算,又称为半加运算,其运算符号为XOR或。异或运算是一种复合逻辑运算,可用上述基本逻辑运算表示如下:AB A BA B 4422 逻辑部件逻辑部件 221 寄存器寄存器 1寄存器组寄存器组(register block)概述概述CPU中的
42、寄存器通常可以分为两类:用户可见的寄存器(user-visibleregisters)和状态控制寄存器(controlandstatusregisters)。(1) 用户可见的寄存器用户可见的寄存器用户能够通过机器语言来访问这些寄存器。合理优化地使用这些寄存器可以减少对主存的访问次数,从而提高程序的执行速度。按其功能可以分为4类:通用寄存器(generalpurposeregister)通用寄存器的用途由程序员编程决定,例如可以用来存放操作数,也可以用作寻址寄存器。数据寄存器(dataregister)数据寄存器仅能用来存放数据而不能用来对操作数的地址进行计算。 45地址寄存器(address
43、register)地址寄存器用来存放操作数的地址,一般而言地址寄存器又可以分为段地址寄存器(segmentpointerregister)、间址寄存器(indexregister)和堆栈寄存器(stackpointerregister)。段地址寄存器用在采用段式内存管理的计算机中,存放着某一段内存区域的基地址。间址寄存器用在间接寻址(indexedaddressing)方式下。堆栈寄存器用以存放堆栈栈顶的地址,使得在使用堆栈操作(如push,pop)时无须显式地给出操作数的地址(即其地址是隐含的)。标志寄存器(flagconditioncodesregister)标志寄存器中的位是由CPU硬件
44、根据运算的结果而设立的一些指示位,以反映该次运算的某些特征:结果为正、负、零、溢出等等,并可以用作分支跳转的依据。一般而言,标志寄存器允许编程者进行读操作,但不允许对其直接进行写操作。 46(2)状态控制寄存器状态控制寄存器(CSR)这些寄存器被控制器(controlunit)用来控制CPU的操作。通常是程序员不可见的,但也有某些寄存器在某种特定的状态下可以由某些特权指令进行访问。常见的CSR有:程序计数器(programcounter,PC)、指令寄存器(instructionregister,IR)、存储器地址寄存器(memoryaddress,register,MAR)、存储器缓冲寄存器
45、(memorybufferregister,MBR)以及程序状态字(programstatusword,PSW)。PC中存放着下一条待取指令的地址。当程序顺序执行时,CPU在取回一条指令后,会自动修改PC中的值以使其指向下一条指令。而程序中的分支或跳转指令也是通过修改PC中的值来达到改变流程的目的。IR中存放着CPU刚取回的指令,以供指令译码使用。CPU和存储器之间的数据交换通过MAR和MBR来实现。MAR中存放着待访问的内存单元的地址而MBR则存放从内存中读人的数据或要写回内存单元的数据。这4个寄存器(PC、IR、MAR、MBR)用来实现在CPU和存储器(memory)之间的数据交换。另外C
46、PU内部,在ALU与MBR、用户可见的寄存器之间也可能存在用作输入/输出缓冲寄存器。 472寄存器逻辑组成寄存器逻辑组成 寄存器是计算机的一个重要部件,用于暂存数据、指令等。它由触发器和一些控制门组成。在寄存器中,常用的是正边沿触发D触发器和锁存器。 图23所示是由正沿触发的D触发器组成的四位寄存器。在CP正沿作用下,外部数据才能进入寄存器。D是复位端,CP是D触发器的脉冲端,CK是增加了个与逻辑门电路来取正沿脉冲的输入端。四D寄存器的功能见表27,其中代表正脉冲,也即正沿。 48图23四D寄存器 49表27四D寄存器功能表 控制和输入输出RDCK1D2D3D4D1Q2Q3Q4Q11D2D3D
47、4D1D2D3D4D0000050事实上,在计算机中常要求寄存器有移位功能。如在进行乘法时,要求将部分积右移;在将并行传送的数转换成串行数时也需移位。有移位功能的寄存器称为移位寄存器。222 计数器计数器计数器是计算机、数字仪表中常用的一种电路。计数器按时钟作用方式来分,有同步计数器和异步计数器两大类。在异步计数器中,由于高位触发器的时钟信号是由低一位触发器的输出来提供的,但是结构简单。同步计数器中各触发器的时钟信号是由同一脉冲来提供的,因此,各触发器是同时翻转的,它的工作频率比异步计数器高,但结构较复杂。计数器按计数顺序来分,有二进制、十进制两大类。在计算机中较少使用异步计数器,这里着重介绍
48、有并行输入数据功能的正向同步十进制计数器。图24是用主从JK触发器构成的同步十进制集成化计数器。同步计数器是采用快速进位方式来计数的,触发器及实现快速进位的逻辑电路是它的核心。 51图24十进制同步计数器 52“预置数”是集成化同步计数器的一个重要功能。一般设置控制端L,用来选择电路是执行计数还是执行预置数:当L1,执行同步计数;L0,执行预置数。由于JK触发器数据输入是双端的,所以要将单端的预置数AD经两级“与非”门变成互补信号,再加在J,K端。图24所示与非门411就是为此目的而设置的。当L1时,这些与非门被封锁,快速进位电路输出经或门1215进入触发器,电路执行计数;当L0,门411打开
49、,快速进位被封锁,电路执行置数。能够方便地扩展位数是集成化计数器的一个特点。下面介绍扩展方法。计数器扩展应满足以下条件。首先,要有标志计数器已计至最大数的进位输出端RC,对二进制、十进制计数器,RC分别为:二进制计数器:RCQAQBQCQD十进制计数器:RCQAQD53其次,计数器应有保持功能。图24计数器中设置了“计数允许”端P和T,用来控制计数器快速进位电路和RC形成门:当P,T均为“1”,快速进位电路才能打开(见表28),此时若L1,则电路处于计数状态;若P0,T1,则快速进位电路封锁,电路不能计数,此时若L1,预置数也被封锁,又由于T1时RC形成门不封锁,所以各触发器状态及RC均保持。
50、有了RC,P,T端,就可以方便地对计数器进行扩展。表28 同步计数器功能表54PTLRDCK功能1111计数01并行输入数据0111保持011触发器保持,RC=01异步清“0”55223 译码器译码器译码器有n个输入变量,2n个(或少于2n个)输出,每个输出对应于n个输入变量的一个最小项。当输入为某一组合时,对应的仅有一个输出为“1”(或为“0”),其余输出均为“0”(或为“1”)。译码器的用途是把输入代码译成相应的控制电位,以实现代码所要求的操作。图25给出了2输入4输出译码器的逻辑图。译码器中常设置“使能”控制端正,当该端为“1”时,译码器功能被禁止,此时所有输出均为“1”。使能端的一个主
51、要功能是用来扩充输人变量数。565723 控制部件控制部件 控制器(见图26)负责控制整个计算机系统的运行,读取指令寄存器、状态控制寄存器以及从外部来的控制信号(例如中断信号),发布外控制信号控制CPU与存储器、IO设备进行数据交换,发布内控制信号控制寄存器间的数据交换,控制ALU完成指定的运算功能,并且管理其他的CPU内部操作。231 控制器的基本功能控制器的基本功能 控制器的基本功能就是时序(sequencing)控制和执行(execution)控制。根据当前运行的程序,控制器使CPU按一定的时序关系执行一系列的微操作(micro-operation),从而完成程序规定的动作。 58控制器
52、的输入信号有:时钟信号、指令寄存器、标志位、控制总线上的控制信号。控制器的输出信号包括:CPU内的控制信号、发往控制总线的控制信号。 时钟信号时钟信号 控制器根据由时钟电路产生的时钟信号进行定时,以控制各种操作按指定的时序进行。计算机的基本功能是执行程序,而程序由一连串的指令组成;计算机的执行过程由一连串的指令周期组成,每一指令周期完成一条机器指令。这些指令周期又可进一步细分为更小的单元,直到微操作(microoperation)CPU完成的基本的原子操作。时钟电路由时钟脉冲发生器、分频电路及各种外围电路组成。时钟脉冲发生器的晶振频率称为机器的主频,它产生的时钟脉冲信号是整个机器的时间基准,其
53、周期T称为该计算机的时钟周期。执行一条机器指令所需的时间称为一个指令周期(instructioncycle),因为CPU机器指令的执行的时间通常互不相同,因而其指令周期也各不相同。为了便于控制和管理,把指令周期进行分解,细化为各种原子操作(微操作,op),每一op都与CPU的寄存器相关。完成一个微操作的时间就称为CPU周期(机器周期)。例如一条指令周期通常可分为取指子周期、执行子周期、保存结果子周期,而每一个子周期又由若干原子周期CPU周期组成。 592指令寄存器指令寄存器(R)控制器需要完成取指令、分析指令和执行指令的操作。控制器根据程序计数器PC中的内容(指令地址)从存储器中取出该指令;然
54、后对指令进行译码以确定所需执行的op;最后控制器根据分析的结果发出一系列的控制信号控制各相关部件(运算器、存储器、IO设备)完成规定的操作;同时产生下一条指令的地址。MAR(PC)MBRMemoryIR(MBR)PC(PC)13中断控制逻辑中断控制逻辑计算机系统通常都提供了中断机制,允许某一事件的发生(如由IO设备提出服务请求)可以中止CPU正在执行的程序,转去对该事件进行处理,然后再返回原程序被中止处继续执行。中断机制的主要作用就是提高CPU的处理效率;使CPU与IO设备并行工作,当进行IO操作时CPU可以处理其他事务;同时使CPU能够及时地响应各种预先不知的异常事件,并进行处理;还可以实现
55、分时操作等等。 60(1) 中断处理过程中断处理过程 如图27所示,如果系统允许响应中断请求,那么在每条指令执行完成后,控制器都要检查是否有中断发生,如果没有中断请求信号,控制器则转去取下一条指令,如果有中断事件发生,则暂停执行当前程序并保护其现场状态信息(如下一条指令的地址、相关寄存器的内容等等),然后转去执行中断服务程序。当完成中断服务后,再恢复以前保存的现场信息,从原程序被中止处(断点)继续执行。61 图27计算机的中断机制 62通常把CPU中断处理过程分为两个阶段:中断响应过程和中断服务过程。中断响应过程CPU接受中断请求后,就暂停执行当前程序,进人中断响应过程:关闭中断:为了使CPU
56、在中断服务后能够返回原程序断点处继续执行,在中断响应期间,保存断点信息之前,需要关闭中断允许,禁止CPU响应新的中断请求。保存断点信息:当CPU进入中断响应过程,关闭中断允许后,控制器要保护当前正在执行的程序的断点信息;把程序的断点即PC里的内容,以及PSW里的内容等推入系统堆栈。中断返回以后,再从堆栈中恢复现场信息,继续执行主程序。把中断服务程序的入口地址置人PC中:控制器保存完断点信息后,接着就把相应的中断服务程序入口地址置入程序计数器中去,CPU马上要执行的下一条指令就是中断服务程序的第一条指令。中断服务过程当PC中置入中断服务程序的入口地址之后,接着保留现场信息,CPU开放中断允许响应
57、新的中断请求,然后就转入中断服务程序,对中断事件进行处理。中断服务完成之后,CPU再次禁止中断,以恢复现场和断点信息,使之返回到原主程序断点处继续执行。 634总线控制逻辑总线控制逻辑计算机各个部件通过总线(BUS)相互连接起来,传递信息协调工作,共同完成操作。CPU内部各器件之间互连的总线称为内部总线,CPU与其他部件之间互连的总线称为外部总线(又称系统总线)。由于总线是共享的传输通道,任意一时刻只能由一个器件负责发送数据,所以需要由总线控制器采协调各部件申请使用总线。当发生多个设备争用总线时,仲裁电路会依据某种策略(如优先级)来决定使用总线的先后顺序。常用的仲裁方式主要有中央仲裁和分布式仲
58、裁两种。232控制器的实现控制器的实现(硬布线逻辑微程序控制硬布线逻辑微程序控制)控制器的作用就是根据输入的时钟信号、指令信息以及各种状态信号产生相应的控制信号去控制各个部件完成特定的操作。控制器的逻辑设计中包括时序逻辑(控制微操作的时序关系)、译码逻辑(对指令操作码进行译码分析)、执行逻辑(按一定的顺序执行微操作)和决策逻辑(根据ALU等部件的标志位来决定下一步的动作)。控制器的实现方法主要有两种:硬布线逻辑(hardwiredimplementation)和微程序控制(microprogrammedimplementation)。 641硬布线逻辑硬布线逻辑在这种机制下,控制器基本上由组合
59、电路实现,因此这种方法又称之为组合逻辑实现(图28)。(1)指令译码指令译码控制器分析每条待执行的指令,对不同的操作码产生不同的控制信号。为了简化设计,可以由一个译码器来完成操作码的识别功能,一个n位输入的译码器可以识别2n条不同的指令操作码,为每一条操作码产生不同的输出信号。(2)定时定时(一个指令所产生的输出控制信号是有时序关系的一个指令所产生的输出控制信号是有时序关系的)控制器利用输入的时钟信号作为产生各种控制信号的定时信号。因为控制器在一个指令周期内,需要在不同的时刻发出不同的控制信号,所以采用一个定时电路根据时钟信号依次产生定时信号如T1,T2,Tn。控制器就在T1,T2,Tn的作用
60、下,顺序产生各种控制信号。在指令周期的末尾,控制器要复位定时电路,以便在下一个指令周期开始时,定时电路又可以重新产生定时信号T1,T2,Tn。 65(3)控制逻辑控制逻辑我们已经讨论了硬布线逻辑控制器的定时逻辑和指令译码逻辑,接下来讨论其内部控制逻辑,控制逻辑的功能就是根据输入信号产生相应的输出控制信号,所以可以用一组布尔方程来描述控制器以及CPU的行为。随着计算机技术的发展,CPU的结构越来越复杂,用来描述控制器行为的布尔方程的数目随之急剧膨胀。用组合电路来实现控制器,满足所有的布尔方程,也越来越艰难了。用组合逻辑电路来设计控制器不仅复杂而且难以测试,并且也很不灵活,例如为了增加一条新的机器
61、指令,就需要对组合逻辑电路进行修改,通常这种修改是很难实现的。一种相比之下非常简单的方案微程序控制逐渐被用于控制器的设计和实现过程中。 图28硬布线逻辑控制器模型 66672微程序控制微程序控制(microprogrammed contro1) 微程序控制的思想最早是由MVWilkes在20世纪50年代初期提出的。因为受当时存储器技术的限制,并未真正得到应用。但随着半导体存储器技术的发展,今天微程序控制技术已经在许多领域里得到广泛应用,其中之一就是用来实现处理器中的控制单元。现代的CISC处理器大多采用微程序控制方式;而RISC处理器由于简化了指令系统,其结构也随之而简化,所以也可以使用硬布线
62、逻辑。(1) (1) 基本原理基本原理对于控制器而言,其功能就是产生一组控制信号。我们可以构造一个控制字(control word,CW),其每一位都对应着一根控制信号线,这样每一个微操作都可以由控制宇取不同的值来表示。同样,控制器执行的op序列也可以由对应的CW序列来表示。每一个CW都代表着一条微指令(microinstruction)。这些微指令的集合就叫微程序,每一条机器指令都对应着一段微程序。微程序存放在控制存储器中(控存)。微程序控制器的时序逻辑负责从控存中读取下一条微指令,而执行机构则根据当前的微指令产生所需的控制信号。 68(2) 流程流程 控存地址寄存器(CAR)中存放着下一条
63、微指令的地址;时序逻辑发出对控存的读命令,读取下一条微指令;控制器把由CAR指定的控制字读入控存数据寄存器(CBR);根据CBR中的内容产生控制信号;根据CBR中的内容以及ALU的标志位等状态信息,产生下一条微指令的地址,并将其置人CAR。(3)微指令格式微指令格式微指令由两部分组成:控制码和地址码。控制码部分用于产生控制信号,而地址码部分则参与形成下一条微指令地址。在Wilkes最初的设计里,微指令里每一位(bit)都直接产生一种控制信号或直接形成下一条指令地址的一位。但是由于整机所需的控制信号可能多达上百个,这样会使微指令的长度变得难以实现。对控制信号进行编码,可以有效地减少微指令的长度。
64、所以微指令主要可以分为两类:水平型和垂直型。 69水平型微指令体现了更多控制器硬件的具体细节,微程序员可以控制所有的控制信号。而垂直型微指令屏蔽了硬件低层细节,使微程序员面对一个相对高层的控制器硬件进行编程。对水平型微指令而言,几乎不需要译码电路;而对垂直型微指令来说,指令屏蔽的硬件细节越多,编码越详细,则其所需的译码电路也就越复杂。表29列出了两种微指令的主要特点。70表29两种微指令的主要特点表 水平型微指令垂直型微指令指令长度较长体现了更多的硬件细节难以编程并行度高控制逻辑简单执行速度快对性能优化指令长度较短屏蔽了一些低层细节容易编程并行度较底控制逻辑复杂执行速度较慢对编程优化71微程序
65、存放于ROM或EPROM存储器中,这种软硬一体的形式称为固件(firmware),它的特性介于软件(software)与硬件(hardware)之间。若控存允许改写,则微程序被称为是动态的,即允许对指令系统进行修改。 24 本章小结本章小结一个定点数由符号位和数值位组成。一个浮点数由符号位、尾数、阶码组成。数的真值变成机器码时有四种表示方法:原码、补码、反码、移码。汉字要进入计算机必须解决输入编码、汉字内码等问题。算术运算采用补码加减法、补码乘除法、原码乘除法。寄存器、运算器、控制器共同完成程序规定的动作。 72习题习题21下列各数的原码、反码、补码(8位二进制表示)(1)25(2)128(3)127(4)122将下列十进制数表示成浮点规格化数,补码表示3位阶码、补码表示9位尾数。 (1)25(2)14(3)65(4)2323有一个字长为32位的浮点数,阶码为10位,用移码表示;尾数22位,用补码表示;基数为2。写出:(1)最大的二进制表示 (2)最小的二进制表示 (3)规格化数所表示的数的范围24设阶码3位,尾数6位,按浮点运算方法完成x+y,x-y运算:(1) x=2-0110.100101 y=2-010(-0.011011)(2) x=2-101(-0.010010) y=2-1000.01101073