Presentation is loading. Please wait.

Presentation is loading. Please wait.

第二章 运算方法和运算器 2.1 数据与文字的表示方法 2.2 定点加法、减法运算 2.3 定点乘法运算

Similar presentations


Presentation on theme: "第二章 运算方法和运算器 2.1 数据与文字的表示方法 2.2 定点加法、减法运算 2.3 定点乘法运算"— Presentation transcript:

1 第二章 运算方法和运算器 2.1 数据与文字的表示方法 2.2 定点加法、减法运算 2.3 定点乘法运算
2.1 数据与文字的表示方法 2.2 定点加法、减法运算 2.3 定点乘法运算 2.4 定点除法运算 2.5 定点运算器的组成 2.6 浮点运算方法和浮点运算器

2 2.1 数据与文字的表示方法 数据格式 计算机中常用的数据表示格式有两种: 1 定点格式 2 浮点格式 一般来说,定点格式容许的数值范围有限,但要求的处理硬件比较简单。而浮点格式容许的数值范围很大,但要求的处理硬件比较复杂。

3 1. 定点数的表示方法 定点表示:约定机器中所有数据的小数点位置是固定不变的。由于约定在固定的位置,小数 点就不再使用记号“.”来表示。通常将数据表示成纯小数或纯整数。   定点数x=x0x1x2…xn 在定点机中表示如下(x0:符号位,0代表正号,1代表负号):

4 纯小数的表示范围为(x0x1x2…xn 各位均为0时最小;各位均为1时最大)
  目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。

5 2. 浮点数的表示方法   电子的质量(9×10-28克)和太阳的质量(2×1033克)相差甚远,在定点计算机中无法直接来表示这个数值范围.要使它们送入定点计算机进行某种运算,必须对它们分别取不同的比例因子,使其数值部分绝对值小于1,即:    9 × 10-28=0.9 × 10-27     2 × 1033=0.2 × 1034  这里的比例因子10-27 和 1034要分别存放在机器的某个存储单元中,以便以后对计算结果按这个比例增大。显然这要占用一定的存储空间和运算时间。因此得到浮点表示法如下:

6  浮点表示法:把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,这种把数的范围和精度分别表示的方法,相当于数的小数点位置随比例因子的不同而在一定范围内自由浮动,称为浮点表示法。
 任意一个十进制数N 可以写成     N=10E.M       (2.3)  同样在计算机中一个任意进制数N 可以写成      N=Re.M         (2.4) M :尾数,是一个纯小数。 e :比例因子的指数,称为浮点数的指数,是一个整数。 R :比例因子的基数,对于二进计数值的机器是一个常数,一般规定R 为2,8或16。

7   一个机器浮点数由阶码和尾数及其符号位组成(尾数:用定点小数表示,给出有效数字的位数决定了浮点数的表示精度;阶码:用整数形式表示,指明小数点在数据中的位置,决定了浮点数的表示范围。):

8 32位浮点数的IEEE754标准格式为: 64位浮点数的IEEE754标准格式为:

9 在IEEE754标准格式表示的32位浮点数中, S:浮点数的符号位,1 位, 0表示正数,1表示负数。 M:尾数,23位,用小数表示, 小数点放在尾数域的最前面。 E:阶码,8 位阶符采用隐含方式, 即采用移码方式来表示正负指数。 移码方法对两个指数大小的比较和对阶操作都比较方便,因为阶码域值大者其指数值也大。采用这种方式时,将浮点数的指数真值e 变成阶码E 时,应将指数 e 加上一个固定的偏移值127( ),即 E=e+127.

10 IEEE754 标准中,一个规格化的32位浮点数x的真值可表示为
x=(-1)s×(1.M)×2E-127  e=E-127 一个规格化的64位浮点数x的真值为 x=(-1)s×(1.M)×2E- e=E-1023   为提高数据的表示精度,当尾数的值不为 0 时,尾数域的最高有效位应为1,否则以修改 阶码同时左右移小数点的办法,使其变成这一表示形式,这称为浮点数的规格化表示。 当浮点数的尾数为 0,不论其阶码为何值,或者当阶码的值遇到比它能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成零值,称为机器零。  

11 当阶码E 为全0且尾数M 也为全0时,表示的真值x 为零,结合符号位S 为0或1,有正零和负零之分。当阶码E 为全1且尾数M 为全0时,表示的真值x 为无穷大,结合符号位S 为0或1,也有+∞和-∞之分。这样在32位浮点数表示中,要除去E 用全0和全1(255)10表示零和无穷大的特殊情况,指数的偏移值不选128( ),而选127( )。对于规格化浮点数,E 的范围变为1到254,真正的指数值e 则为-126到+127。因此32位浮点数表示的绝对值的范围是10-38~1038(以10的幂表示)。

12 浮点数所表示的范围远比定点数大。一台计算机中究竟采用定点表示还是浮点表示,要根据计算机的使用条件来确定。一般在高档微机以上的计算机中同时采用定点、浮点表示,由使用者进行选择,而单片机中多采用定点表示。
[例1] 若浮点数x的754标准存储格式为 ( )16,求其浮点数的十进制数值。 [例2] 将( )10转换成754标准的32位浮点 数的二进制存储格式。

13 [例1] 若浮点数x的754标准存储格式为 (41360000)16,求其浮点数的十进制数值。
[例1] 若浮点数x的754标准存储格式为 ( )16,求其浮点数的十进制数值。 [解:]   将十六进制数展开后,可得二进制数格式为  指数e=阶码-127= - = =(3)10  包括隐藏位1的尾数 1.M= = 于是有    x=(-1)s×1.M×2e       =+( )×23=+ =(11.375)10

14 [例2] 将(20.59375)10转换成754标准的32位浮点 数的二进制存储格式。 [解:] 首先分别将整数和分数部分转换成二进制数:
[解:] 首先分别将整数和分数部分转换成二进制数:    然后移动小数点,使其在第1,2位之间    = ×24     e=4   于是得到: S=0,    E=4+127=131,     M=   最后得到32位浮点数的二进制存储格式为: =(41A4C000)16

15 3. 十进制数串的表示方法 目前,大多数通用性较强的计算机都能直接处理十进制形式表示的数据。十进制数串在计算机内主要有两种表示形式: (1) 字符串形式:一个字节存放一个十进制的数位或符号位。为了指明这样一个数,需要给出该数在主存中的起始地址和位数(串的长度)。 (2) 压缩的十进制数串形式:一个字节存放两个十进制的数位。它比前一种形式节省存储空间,又便于直接完成十进制数的算术运算,是广泛采用的较为理想的方法。

16 4. 自定义数据表示   在传统的计算机体系结构中,用指令本身来说明操作数据的类型。如定点加法表示操作数是纯小数或纯整数;浮点加法表示操作数是浮点数;十进制加法表示操作数是BCD数。由于操作数据类型不同,要设三种不同的指令(操作码)来加以区分。  自定义数据表示则用数据本身来说明数据类型。表示形式有两种,即标志符数据表示和描述符数据表示。  

17 标志符数据表示要求对每一个数据都附加标志符。其指明后面的数据所具有的类型,如整数、浮点数、BCD数、字符串等,其格式如下: 标识符 数据
描述符数据表示主要用来描述多维结构的数据类型,如向量、矩阵、记录等。描述符标志位部分指明这是一个数据描述符;特征标记部分指明数据的各种特征;长度部分指明数组中元素个数;起始地址部分指明数据块的首地址。 其格式为: 描述符标志位 特征标记 数据块长度 数据块起始地址

18 2.1.2 数的机器码表示 在计算机中对数据进行运算操作时,为了妥善的处理好符号位问题,就产生了把符号位和数字位一起编码来表示相应的数的各种表示方法,如原码、补码、反码、移码等。为了区别一般书写表示的数和机器中这些编码表示的数,通常将前者称为真值,后者称为机器数或机器码。 常用的机器码表示法: 1. 原码表示法 2. 补码表示法 3. 反码表示法 4. 移码表示法

19 {x 2n>x≥0 { x 1>x≥0 1. 原码表示法 若定点小数的原码形式为x0 .x1x2…xn ,则原码表示的定义是:
{ x  >x≥0 [x]原= -x=1+|x| ≥x>-1 式中[x]原是机器数,x是真值 若定点整数的原码形式为x0 x1x2…xn ,则原码表示的定义是 {x  n>x≥0 [x]原= n-x=2n+|x| ≥x>-2n

20 对于0,原码机器中往往有“+0”、“-0”之分,故有两种形式:
    [+0]原 =    [ -0]原 = 采用原码表示法简单易懂,但它的最大缺点是加法运算复杂。这是因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。为了解决这些矛盾,人们找到了补码表示法。

21 2. 补码表示法  我们先以钟表对时为例说明补码的概念。假设现在的标准时间为4点正; 而有一只表已经7点了,为了校准时间,可以采用两种方法:一是将时针退 7-4=3 格;一是将时针向前拨12-3=9格。这两种方法都能对准到4点,由此可以看出,减3和加9是等价的,就是说9是(-3)对12的补码,可以用数学公式表示:        -3= (mod12)   mod12的意思就是12模数,这个“模”表示被丢掉的数值。上式在数学上称为同余式。 

22   上例中其所以7-3和7+9(mod12)等价,原因就是表指针超过12时,将12自动丢掉,最后得到16-12=4。从这里可以得到一个启示,就是负数用补码表示时,可以把减法转化为加法。这样,在计算机中实现起来就比较方便。 7 – 3 = 4 7 + 9 = 以12取模数(mod12)   = (mod12) 采用补码表示法进行减法运算就比原码方便得多了。因为不论数是正还是负,机器总是做加法,减法运算可变为加法运算。关键是我们需要换算出两个操作数的补码表示。

23 { x 2n>x≥0 { x 1>x≥0 [x]补= 2n+1+x=2n+1-|x| 0≥x≥-2n
{ x  >x≥0 [x]补= +x=2-|x|  ≥x≥-1 (mod 2) 若定点整数补码形式为x0 x1x2…xn ,则补码表示的定义是: { x          2n>x≥0 [x]补= n+1+x=2n+1-|x|  0≥x≥-2n (mod 2n+1) 根据补码定义,求负数的补码要从2减去|x|。为了用加法代替减法,结果还得在求补码时作一次减法,这显然是不方便的。下面介绍的反码表示法可以解决负数的求补问题。

24 3. 反码表示法    所谓反码,就是二进制的各位数码0变为1,1变为0。也就是说,若Xi=1,则反码为xi=0;若xi=0,则反码xi=1。数值上面的一横表示反码的意思。在计算机中用触发器寄存数码,若触发器Q端输出表示原码,则其Q端输出就是反码。由此可知,反码是容易得到的。

25 {x 2n>x≥0 {x 1>x≥0 若定点小数反码形式为x0 .x1x2…xn ,则反码表示的定义是:
{x  >x≥0 [x]反= (2-2-n)+x  ≥x>-1 一般情况下,对正数和负数的x值, x=+0.x1x2…xn,则[x]反=0.x1x2…xn x=-0.x1x2…xn,则[x]反=1.x1x2…xn 若定点整数反码形式为x0 x1x2…xn ,则反码表示的定义是: {x  n>x≥0 [x]反= (2n+1-1)+x  ≥x>-2n

26 我们比较反码与补码的公式,对于负数有: 定点小数 [x]反=(2-2-n)+x [x]补=2+x 可得到 [x]补=[x]反+2-n 定点整数 [x]反= (2n+1-1)+x   [x]补= 2n+1+x 可得到 [x]补=[x]反+1 这就是通过反码求补码的重要公式。这个公式告诉我们,若要一个负数变补码,其方法是符号位置1,其余各位0变1,1变0,然后在最末位(2-n)上加1。

27 4. 移码表示法   移码通常用于表示浮点数的阶码。由于阶码是个n位的整数,假定定点整数移码形式 为 x0x1x2…xn时,对定点整数移码的传统定义是: [x]移=2n+x   2n>x≥-2n 若阶码数值部分为5位,以x表示真值, 则:  [x]移=25+x      25>x≥- 25

28 小结:上面的数据四种机器表示法中,移码表示法主要用于表示浮点数的阶码。由于补码表示对加减法运算十分方便,因此目前机器中广泛采用补码表示法。在这类机器中,数用补码表示,补码存储,补码运算。也有些机器,数用原码进行存储和传送,运算时改用补码。还有些机器在做加减法时用补码运算,在做乘除法时用原码运算。

29 [例5]设机器字长16位,定点表示,尾数15位,数符1位,问: (1)定点原码整数表示时,最大正数是多少. 最小负数是多少
[例5]设机器字长16位,定点表示,尾数15位,数符1位,问: (1)定点原码整数表示时,最大正数是多少?最小负数是多少? (2)定点原码小数表示时,最大正数是多少?最小负数是多少?; [解:]  (1)定点原码整数表示    最大正数值=(215-1)10=(+32767)   最小负数值=-(215-1)10=(-32767)10 (2)定点原码小数表示 最大正数值=(1-2-15)10=(+ )2 最小负数值=-(1-2-15)10=(- )2 1

30 [例6]假设由S,E,M三个域组成的一个32位二进制数所表示的非零规格化浮点数x,真值表示为: x=(-1)s×(1.M)×2E-128
问:它所表示的规格化的最大正数、最小正数、最大负数、最小负数是多少? [解:] (1)最大正数 x=[1+(1-2-23)]×2127 (2)最小正数 x=1.0×2-128 (3)最小负数 x=-[1+(1-2-23)]×2127 (4)最大负数 x=-1.0×2-128 1 1

31 [例7] 若机器使用8位表示定点数,将数 x=+100/-100,y=+0.59375/-0.59375分别转换为各种机器码形式。
[解:] 已知数据位数为8位,最高位为符号位,数据表示范围可用7位,那么 定点整数的范围是: 0≤|x|≤ ( 27-1) 定点小数的范围是: 0≤|x|≤ (1-2-7 ) (100)10 = ( )2 ( )10 = ( )2 [ ]原 = [ ]原 = [ ]反 = [ ]反 = [ ]补 = [ ]补 = [ ]原 = [ ]原 = [ ]反 = [ ]反 = [ ]补 = [ ]补 =

32 2.1.3 字符与字符串的表示方法 1. 字符的表示方法   现代计算机不仅处理数值领域的问题,而且处理大量非数值领域的问题。这样一来,必然要引入文字、字母以及某些专用符号,以便表示文字语言、逻辑语言等信息。   目前国际上普遍采用的字符系统是七单位的ASCII码(美国国家信息交换标准字符码),它包括10个十进制数码,26个英文字母和一定数量的专用符号,如$, %, +, =等,共128个元素,因此二进制编码需7位,加一位偶校验位,共8位一个字节。参见书中表2.1的ASCII码字符编码表。

33 2. 字符串    字符串是指连续的一串字符,通常方式下,它们占用主存中连续的多个字节,每个字节存一个字符。当主存字由2个或4个字节组成时,在同一个主存字中,既可按从低位字节向高位字节的顺序存放字符串的内容,也可按从高位字节向低位字节的次序顺序存放字符串的内容。 [例] 将下面字符串从高位字节到低位字节依次存在主存中。    IF└┘A>B└┘THEN└┘READ(C)

34 1. 汉字的输入编码 当前采用的方法主要有以下三类:
2.1.4 汉字的表示方法 1. 汉字的输入编码 当前采用的方法主要有以下三类:   数字编码 常用的是国标区位码,用数字串代表一个汉字输入。区位码是将国家标准局公布的6763个两级汉字分为94个区,每个区分94位,实际上把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。区码和位码各两位十进制数字,因此输入一个汉字需按键四次。   数字编码输入的优点是无重码,且输入码与内部编码的转换比较方便,缺点是代码难以记忆。   拼音码 拼音码是以汉字拼音为基础的输入方法。使用简单方便,但汉字同音字太多,输入重码率很高,同音字选择影响了输入速度。   字形编码 字形编码是用汉字的形状来进行的编码。把汉字的笔划部件用字母或数字进行编码,按笔划的顺序依次输入,就能表示一个汉字。

35 2.汉字内码   汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。英文字符的机内代码是七位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。   注意:有些系统中字节的最高位用于奇偶校验位,这种情况下用三个字节表示汉字内码。

36 字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。字模点阵只能用来构成汉字库,用于汉字的显示输出或打印输出。
3. 汉字字模码  字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。字模点阵只能用来构成汉字库,用于汉字的显示输出或打印输出。 图2.1 汉字的字模点阵及编码 注意,汉字的输入编码、汉字内码、字模码是计算机中用于输入、内部处理、输出三种不同 用途的编码,不要混为一谈。

37 2.1.5 校验码   元件故障/噪声干扰等各种因素常导致计算机在处理信息过程中出现错误。为了防止错误 可将信号采用专门的逻辑线路进行编码以检测错误,甚至校正错误。通常的方法是在每个字上添加一些校验位,用来确定字中出现错误的位置。   最简单且应用广泛的检错码是采用一位校验位的奇校验或偶校验。 设x=(x0x1…xn-1)是一个n位字, 则奇校验位C定义为 C=x0⊕x1⊕…⊕xn-1 同理偶校验位C定义为

38 2.2 定点加法、减法运算 补码加法 负数用补码表示后,可以和正数一样来处理。这样,运算器里只需要一个加法器就可以了,不必为了负数的加法运算,再配一个减法器。补码加法的公式是 [x]补+[y]补=[x+y]补 (mod 2) 现分四种情况来证明。假设采用定点小数表示,因此证明的先决条件是 ︱x︱﹤1, ︱y︱﹤1, ︱x+y︱﹤1。

39 (1)x﹥0,y﹥0,则x+y﹥0。   相加两数都是正数,故其和也一定是正数。正数的补码和原码是一样的,可得: [x]补+[y]补=x+y=[x+y]补   (mod 2) (2)x﹥0,y﹤0,则x+y>0或x+y<0。   相加的两数一个为正,一个为负,因此相加结果有正、负两种可能。根据补码定义,  ∵ [x]补=x,   [y]补=2+y  ∴ [x]补+[y]补=x+2+y=2+(x+y)   当x+y>0时,2 + (x+y) > 2,进位2必丢失,又因(x+y)>0,  故 [x]补+[y]补=x+y=[x+y]补   (mod 2)  当x+y<0时,2 + (x+y) < 2,又因(x+y)<0,  故 [x]补+[y]补=2+(x+y)=[x+y]补 (mod 2)

40 (3)x<0,y>0,则x+y>0或 x+y<0。
  这种情况等同于第2种情况。 (4)x<0,y<0,则x+y<0。   相加两数都是负数,则其和也一定是负数。  ∵ [x]补=2+x,   [y]补=2+y  ∴ [x]补+[y]补=2+x+2+y=2+(2+x+y)   上式右边分为”2”和(2+x+y)两部分.既然(x+y)是负数,而其绝对值又小于1,那么(2+x+y)就一定是小于2而大于1的数,进位”2”必丢失.又因(x+y)<0, 所以 [x]补+[y]补=2+(x+y)=[x+y]补   (mod 2)   至此我们证明了,在模2意义下,任意两数的补码之和等于该两数之和的补码.这是补码加法的理论基础,其结论也适用于定点整数。

41 [例8] x=0.1001,y=0.0101, 用补码求x+y[解:] [x]补=0.1001, [y]补=0.0101
[x]补   0.1001 +[y]补   0.0101  [x+y]补  0.1110  所以x+y=+0.1110

42 [例9]x=+0.1011,y=-0.0101, 用补码求x+y。 [解:] [x]补=0.1011,  [y]补=1.1011 [x]补   0.1011 +[y]补   1.1011  [x+y]补    所以 x+y=0.0110   由以上两例看到,补码加法的特点,一是符号位要作为数的一部分一起参加运算,二是要在模2的意义下相加,即超过2的进位要丢掉。

43 [x-y]补=[x]补-[y]补=[x]补+[-y]补 只要证明[-y]补=-[y]补,上式即得证。
2.2.2 补码减法   负数的减法运算也要设法化为加法来做,其所以使用这种方法而不使用直接减法,是因为它可以和常规的加法运算使用同一加法器电路,从而简化了计算机的设计。   数用补码表示时,减法运算的公式为 [x-y]补=[x]补-[y]补=[x]补+[-y]补 只要证明[-y]补=-[y]补,上式即得证。

44 ∵ [x+y]补=[x]补+[y]补 (mod 2)
现证明如下:  ∵ [x+y]补=[x]补+[y]补    (mod 2)  ∴ [y]补 =[x+y]补-[x]补    (2.19a)  ∵ [x-y]补=[x+(-y)]补=[x]补+[-y]补  ∴ [-y]补 =[x-y]补-[x]补  (2.19a) 将式(2.19a)与(2.19b)相加,得 [-y]补+[y]补=[x+y]补+[x-y]补-[x]补-[x]补        =[x+y+x-y]补-[x]补-[x]补        =[x+x]补-[x]补-[x]补=0  故 [-y]补=-[y]补 (mod 2)

45 从[y]补求[-y]补的法则是:对[y]补包括符号位“求反且最末位加1”,即可得到[-y]补。写成运算表达式,则为
  从[y]补求[-y]补的法则是:对[y]补包括符号位“求反且最末位加1”,即可得到[-y]补。写成运算表达式,则为 [-y]补=﹁[y]补+2-n (2.21)   其中符号﹁表示对[y]补作包括符号位在内的求反操作,2-n表示最末位的1

46 [例10] 已知x1=-0.1110,x2=+0.1101, 求:[x1]补,[-x1]补,[x2]补,[-x2]补。 [解:]    [x1]补 =   [-x1]补 = -[x1]补+2-4 = +0.0001=0.1110    [x2]补 =   [-x2]补 = -[x2]补+2-4 = +0.0001=1.0011

47 [例11] x=+0.1101,y=+0.0110,求x-y。 [解:]     [x]补=0.1101     [y]补=0.0110  [-y]补=1.1010 [x]补     0.1101 +[-y]补    1.1010  [x-y]补   所以 x-y=+0.0111

48 在定点小数机器中,数的表示范围为|x|<1. 在运算过程中如出现大于1的现象,称为“溢出”。在定点机中,正常情况下溢出是不允许的。
2.2.3 溢出概念与检测方法   在定点小数机器中,数的表示范围为|x|<1. 在运算过程中如出现大于1的现象,称为“溢出”。在定点机中,正常情况下溢出是不允许的。 机器定点小数表示 两个正数相加,结果大于机器所能表示的最大正数,称为上溢。而两个负数相加,结果小于机器所能表示的最小负数,称为下溢。

49 [例12] x=+0.1011,y=+0.1001,求x+y。 [例13] x=-0.1101,y=-0.1011,求x+y。
[解:]   [x]补= [y]补=0.1001 [x]补   0.1011 + [y]补   0.1001 [x+y]补  1.0100 两个正数相加的结果成为负数,这显然是错误的。 [例13] x=-0.1101,y=-0.1011,求x+y。 [解:]   [x]补= [y]补=1.0101 [x]补   1.0011 +  [y]补   1.0101 [x+y]补  0.1000 两个负数相加的结果成为正数,这同样是错误的。

50 在定点机中当运算结果发生溢出时,机器通过逻辑电路自动检查出溢出,并进行中断处理。
  为了判断“溢出”是否发生,可采用两种检测的方法。第一种方法是采用双符号位法,这称为“变形补码”或“模4补码”,从而可使模2补码所能表示的数的范围扩大一倍。   第二种溢出检测方法是采用单符号位法。从上例中看到,当最高有效位产生进位而符号位无进位时,产生上溢;当最高有效位无进位而符号位有进位时,产生下溢。 在定点机中当运算结果发生溢出时,机器通过逻辑电路自动检查出溢出,并进行中断处理。

51 2.2.4 基本的二进制加法/减法器 首先我们来讨论最简单的一位全加器的结构,设定两个二进制数字Ai,Bi和一个进位输入Ci 相加,产生一个和输出Si ,以及一个进位输出Ci+1。 Ai + Bi Ci Ci+1 Si 下表列出一位全加器进行加法运算的输入输出真值表。

52 表2.2 一位全加器真值表 输入 输出 Ai Bi Ci Si Ci+1 1

53 根据表2.2所示的真值表,三个输入端和两个输入端可按如下逻辑方程进行联系:
Si = Ai⊕Bi⊕Ci Ci+1= AiBi+BiCi+CiAi 按此表达式组成的一位全加器下图示2.2(a)。

54

55 由上图看到,n个1位的全加器(FA)可级联成一个n位的行波进位加减器。M为方式控制输入线,当M=0时,作加法(A+B)运算;当M=1时,作减法(A-B)运算,在后一种情况下,A-B运算转化成[A]补+[-B]补运算,求补过程由B+1来实现。因此图中最右边的全加器的起始进位输入端被连接到功能方式线M上,作减法时M=1,相当于在加法器的最低位上加1。另外图中左边还表示出单符号位法的溢出检测逻辑;当Cn=Cn-1时,运算无溢出;而当Cn≠Cn-1时,运算有溢出,经异或门产生溢出信号。

56 对一位全加器(FA)来说,Si的时间延迟为6T(每级异或门延迟3T),Ci+1的时间延迟为5T,其中T被定义为相应于单级逻辑电路的单位门延迟。T通常采用一个“与非”门或一个“或非”门的时间延迟来作为度量单位。   现在我们计算一个n位的行波进位加法器的时间延迟。假如采用图2.2(a)所示的一位全加器并考虑溢出检测,那么n位行波进位加法器的延迟时间ta为 ta=n·2T+9T=(2n+9)T 9T为最低位上的两极“异或”门再加上溢出“异或”门的总时间,2T为每级进位链的延迟时间。

57 当不考虑溢出检测时,有      ta=(n-1)·2T+9T     ta意味着加法器的输入端输入加数和被加数后,在最坏情况下加法器输出端得到稳定的求和输出所需的最长时间。显然这个时间越小越好。注意,加数、被加数、进位与和数都是用电平来表示的,因此,所谓稳定的求和输出,就是指稳定的电平输出。 注意:第一种情况下,是最低的两个异或门加上溢出的异或门共3*3T;第二种情况下,是最低的两个异或门加上最后一个FA的输出异或门共3*3T。

58 2.2.5 十进制加法器   十进制加法器可由BCD码(二——十进制码)来设计,它可以在二进制加法器的基础上加上适当的 校正 逻辑来实现,该校正逻辑可将二进制的 和 改变成所要求的十进制格式。   n位BCD码行波式进位加法器的一般结构如下图2.3(a)所示,它由n级组成,每一级将一对4位的BCD数字相加,并通过一位进位线与其相邻级连接。而每一位十进制数字的BCD加法器单元的逻辑结构示于图2.3(b)。

59

60 在十进制运算时,当相加二数之和大于9时,便产生进位。可是用BCD码完成十进制数运算时,当和数大于9时,必须对和数进行加6修正。这是因为,采用BCD码后,在二数相加的和数小于等于9时,十进制运算的结果是正确的;而当相加的和数大于9时,结果不正确,必须加6修正后才能得出正确的结果。

61 2.3 定点乘法运算 2.3.1 原码乘法 1. 人工算法与机器算法的同异性
2.3 定点乘法运算 原码乘法 1. 人工算法与机器算法的同异性  设x=0.1101, y= 下面让我们先用习惯方法求其乘积,其过程如下:

62 上述的运算过程与十进制乘法相似:从乘数y的最低位开始,若这一位为“1”,则将被乘数x写下;若这一位为“0”,则写下全0。然后在对乘数y的次高位进行乘法运算,其规则同上,不过这一位乘数的权与最低位乘数的权不一样,因此被乘数x要左移一位。以此类推直到乘数个位乘完为止,最后将它们统统加起来便得到最后乘积z。同理,如果被乘数和乘数用定点整数表示,我们也会得到同样的结果。 数值部分的运算方法与普通的十进制小数乘法类似,不过对于用二进制表达式的数来说,其乘法规则更为简单一些。

63  在定点计算机中,两个原码表示的数相乘的运算规则是: 乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。
设n位被乘数和乘数用定点小数表示 被乘数  [x]原=xf .xn-1…x1x0 乘数  [y]原=yf .yn-1…y1y0 则两数的乘积 [z]原=(xf⊕yf)+ (0.xn-1…x1x0)(0.yn-1…y1y0) 式中,xf为被乘数符号,yf为乘数符号。

64 人们习惯的算法对机器并不完全适用。原因之一,机器通常只有n位长,两个n位数相乘,乘积可能为2n位。原因之二,只有两个操作数相加的加法器难以胜任将n各位积一次相加起来的运算。早期计算机中为了简化硬件结构,采用串行的1位乘法方案,即多次执行“加法—移位”操作来实现。这种方法并不需要很多器件。然而串行方法毕竟太慢,自从大规模集成电路问世以来,出现了各种形式的流水式阵列乘法器,它们属于并行乘法器。

65 2. 不带符号的阵列乘法器 设有两个不带符号的二进制整数: A=am-1…a1a0 B=bn-1…b1b0 它们的数值分别为a和b,即 m-1     n- a =∑ai2i   b =∑bj2j i=0       j=0 在二进制乘法中,被乘数A与乘数B相乘,产生m+n位乘积P: P=pm+n-1…p1p0 乘积P 的数值为 

66 实现这个乘法过程所需要的操作和人们的习惯方法非常类似:

67 阵。每一个部分乘积项(位积)aibj叫做一个被加数。这 m×n 个被加数 { aibj| 0≤i≤m-1 和 0≤j≤n-1 }

68

69

70 从上图可知,最坏情况下延迟途径,即是沿着矩阵最右边的对角线和最下面的一行。因而得n位×n位不带符号的阵列乘法器总的乘法时间为:
  这种乘法器要实现n位×n位时,需要n(n-1)个全加器和n2个“与”门。该乘法器的总的乘法时间可以估算如下:令Ta为“与门”的传输延迟时间,Tf为全加器(FA)的进位传输延迟时间,假定用2级“与非”逻辑来实现FA的进位链功能,那么我们就有: Ta = Tf = 2T  从上图可知,最坏情况下延迟途径,即是沿着矩阵最右边的对角线和最下面的一行。因而得n位×n位不带符号的阵列乘法器总的乘法时间为: tm=Ta+(n-1)×6T+( n-1)×Tf =2T+(n-1)×6T+(n-1)×2T =(8n-6)T

71 [例16] 已知两个不带符号的二进制整数A = 11011,B = 10101,求每一部分乘积项aibj的值与p9p8……p0的值。
[解:] a4b0=1 a3b0=1 a2b0=0 a1b0=1 a0b0=1 a4b1=0 a3b1=0 a2b1=0 a1b1=0 a0b1=0 a4b2=1 a3b2=1 a2b2=0 a1b2=1 a0b2=0 a4b3=0 a3b3=0 a2b3=0 a1b3=0 a0b3=0 a4b4=1 a3b4=1 a2b4=0 a1b4=1 a0b4=1 P=p9p8p7p6p5p4p3p2p1p0= (56710)

72 3. 带符号的阵列乘法器 (1) 对2求补器电路   我们先来看看算术运算部件设计中经常用到的求补电路。下图示出一个具有使能控制的二进制对2求补器电路,其逻辑表达式如下: C-1=0,  Ci=ai+Ci-1 ai*=ai⊕ECi-1,   0≤i≤n

73

74 在对2求补时,要采用按位扫描技术来执行所需要的求补操作。令A=an…a1a0是给定的(n+1)为带符号的数,要求确定它的补码形式。进行求补的方法就是从数的最右端a0开始,由右向左,直到找出第一个“1”,例如 ai=1,0≤i≤n。这样,ai以左的每一个输入位都求反,即1变0,0变1。最右端的起始链式输入C-1必须永远置成“0”。当控制信号线E为“1”时,启动对2求补的操作。当控制信号线E为“0”时,输出将和输入相等。显然,我们可以利用符号位来作为控制信号。

75 例如,在一个4位的对2求补器中,如果输入数为1010,那么输出数应是0110,其中从右算起的第2位,就是所遇到的第一个“1”的位置。
用这种对2求补器来转换一个(n+1)位带符号的数,所需的总时间延迟为     tTC=n·2T+5T=(2n+5)T              其中每个扫描级需2T延迟,而5T则是由于“与”门和“异或”门引起的。

76 (2) 带符号的阵列乘法器   下图是(n+1)×(n+1)位带求补器的阵列乘法器逻辑方框图。   通常,把包括这些求补级的乘法器又称为符号求补的阵列乘法器。在这种逻辑结构中,共使用三个求补器。其中两个算前求补器的作用是:将两个操作数A和B在被不带符号的乘法阵列(核心部件)相乘以前,先变成正整数。而算后求补器的作用则是:当两个输入操作数的符号不一致时,把运算结果变成带符号的数。

77

78 上面所示的带求补级的阵列乘法器既适用于原码乘法,也适用于间接的补码乘法。不过在原码乘法中,算前求补和算后求补都不需要,因为输入数据都是立即可用的。而间接的补码阵列乘法却需要增加三个硬件求补器。为了完成所必需的求与乘法操作,时间大约比原码阵列乘法增加1倍。 实际上我们可以看到带符号的阵列乘法器其内部仍是一个基本的源码阵列乘法器,只是对输入的补码数据在乘前进行了值还原,同时在乘后再次将乘积数转换为补码形式输出。

79 例17] 设x=+15,y=-13,用带求补器的原码阵列乘法器求出乘积x·y=?
[解:]  设最高位为符号位,则输入数据为    [x]补 = [y]补 =10011   符号位单独考虑,经过算前求补级后 |x|=1111, |y|=1101

80 算后经求补级输出并加上乘积符号位1, 乘积的补码值为 。 则原码乘积值为 。 换算成二进制数真值是 x·y=( - )2=(-195)10 十进制数验证: x×y = 15× (-13) = -195相等。

81 2.3.2 补码乘法 1. 补码与真值的转换公式 补码乘法因符号位参与运算,可以完成补码数的“直接”乘法,而不需要求补级。这种直接的方法排除了较慢的对2求补操作,因而大大加速了乘法过程。   首先说明与直接的补码乘法相联系数学特征。对于计算补码数的数值来说,一种较好的表示方法是使补码的位置数由一个带负权的符号和带正权的系数。今考虑一个定点补码整数[N]补=an-1an-2…a1a0,这里an-1是符号位。根据[N]补的符号,补码数[N]补和真值N的关系可以表示成:

82 an-1上,那么就可以把上述方程组中的两个位置表达式合并成下面的统一形式:
 n- +∑ai2i    当an-1 = 0 ([N]补为正) N= i=0  n- -[1+∑(1-ai)2i]  当an-1 = 1 ([N]补为负)      i=0    如果我们把负权因数-2n-1强加到符号位 an-1上,那么就可以把上述方程组中的两个位置表达式合并成下面的统一形式:                        n-2     N = -an-12n-1+∑ai2i                                     i=0                                                n-2     -N = -(1-an-1)2n-1+∑(1-ai)2i +1                                               i=0         

83 2. 一般化的全加器形式   常规的一位全加器可假定它的3个输入和2个输出都是正权。这种加法器通过把正权或 负权加到输入/输出端,可以归纳出四类加法单元。如下表,0类全加器没有负权输入;1类全加器有1个负权输入和2个正权输入;依次类推。对0类、3类全加器而言有: 对1类、2类全加器,则有

84 表2.3 四类一般化全加器的名称和逻辑符号

85    注意,0类和3类全加器是用同一对逻辑方程来表征的,它和普通的一位全加器(0类)是一致的。这是因为3类全加器可以简单地把0类全加器的所有输入输出值全部反向来得到,反之亦然。1类和2类全加器之间也能建立类似的关系。由于逻辑表达式具有两级与-或形式,可以用“与或非”门来实现,延迟时间为2T。

86 3. 直接补码阵列乘法器 利用混合型的全加器就可以构成直接补码数阵列乘法器。设被乘数A和乘数B是两个5位的二进制补码数,即 A=(a4)a3a2a1a0 B=(b4)a3a2a1a0   它们具有带负权的符号位a4和b4,并用括号标注。如果我们用括号来标注负的被加项,例如(aibJ),那么A和B相乘过程中所包含的操作步骤如下面矩阵所示:

87 A =  (a4)  a3  a2 a1  a0   B = ×   (b4)  b3  b2  b1  b0  ——————————————————————
          (a4b0) a3b0 a1b0 a1b0 a0b0       (a4b1) a3b1 a2b1 a1b1 a0b    (a4b2) a3b2  a2b2  a1b2 a0b (a4b3) a3b3 a2b3  a1b3 a0b3 +) a4b4 (a3b4) (a2b4) (a1b4) (a0b4)       P = p9 p p p p5  p4    p p p p0

88

89 上图所示是5位乘5位的直接补码阵列乘法器逻辑原理,其中使用不同的逻辑符号来代表0类、1类、2类、3类全加器。2类和1类全加器具有同样的结构,但是使用不同的逻辑符号可使乘法阵列的线路图容易理解。
  该实现方式称为三段阵列乘法器,其中右上角的三角形中只用0类全加器,左上角的三角形只用1类全加器,阵列的最后两行只用2类全加器。  

90

91   其中使用不同的逻辑符号来代表0类、1类、2类、3类全加器。2类和1类全加器具有同样的结构,但是使用不同的逻辑符号可使乘法阵列的线路图容易理解。
  在n位乘n位的一般情况下,该乘法器需要(n-2)2个0类全加器,(n-2)个1类全加器,(2n-3)个2类全加器,1个3类全加器,总共是n(n-1)个全加器。 故所需的总乘法时间是: tp=Ta+2(n-1)Tf=2T+(2n-2)2T=(4n-2)T (2.31)

92 [例20] 设[A]补=(01101)2, [B]补=(11011)2, 求[A×B]补=?
[解:]         (0) 1  1  0  1 = +   ×)     (1) 1  0  1  1 = - 5             (0) 1  1  0         (0) 1  1  0     (0) 0  0  0    (0) 1  1  0  (1) (1) (0) (1)                    (1) 0  1  1  1  1  1  1     (1)   1  1  1  1  1  1 = - 65 扩展符号位 符号位 验证: -1×27+0×26+1×25+1×24+1×23+1×22+1×21+1×20 =-128+(32+16+8+4+2+1) =-65      (13)×(-5)=-65

93 设有n位定点小数(定点整数也同样适用): 被除数x, 其原码为 [x]原=xf .xn-1…x1x0
2.4 定点除法运算 原码除法运算原理    两个原码表示的数相除时,商的符号由两数的符号按位相加求得,商的数值部分由两数的数值部分相除求得。   设有n位定点小数(定点整数也同样适用): 被除数x, 其原码为 [x]原=xf .xn-1…x1x0 除数y, 其原码为 [y]原=yf .yn-1…y1y0  则有商q=x/y,其原码为 [q]原=(xf⊕yf)+(0.xn-1…x1x0/0.yn-1…y1y0)

94 下面仅讨论数值部分的运算。设被除数x=0.1001,除数y=0.1011,模仿十进制除法运算,以手算方法求x÷y的过程如下:
   商的符号运算qf=xf⊕yf与原码乘法一样,用模2求和得到。商的数值部分的运算,实质上是两个正数求商的运算。根据我们所熟知的十进制除法运算方法,很容易得到二进制数的除法运算方法,所不同的只是在二进制中,商的每一位不是“1”就是“0”,其运算法则更简单一些。   下面仅讨论数值部分的运算。设被除数x=0.1001,除数y=0.1011,模仿十进制除法运算,以手算方法求x÷y的过程如下:

95 得x÷y的商q=0.1101,余数为r= 。

96 上面的笔算过程可叙述如下: 1. 判断x是否小于y?现在x<y, 故商的整 数位商“0”, x的低位补0, 得余数r0。 2. 比较r0和2-1y, 因r0>2-1y, 表示够减, 小数 点后第一位商“1”, 作r0-2-1y, 得余数r1。 3. 比较r1和2-2y, 因r1>2-2y, 表示够减, 小 数点后第二位商“1”, 作r1-2-2y, 得余数r2。 4. 比较r2和2-3y, 因r2<2-3y, 不够减, 小数 点后第三位商“0”, 不作减法, 得余数r3(=r2)。 5. 比较r3和2-4y, 因r3>2-4y, 表示够减, 小数 点后第四2位商“1”, 作r3-2-4y, 得余数r4, 共求四位商, 至此除法完毕。

97   在计算机中小数点是固定的,不能简单地采用手算的办法。为便于机器操作,使“除数右移”和“右移上商”的操作统一起来。
  事实上机器与人运算过程不同,人会心算一看就知道够不够减。但机器却必须先作减法,若余数为正才知道够减;若余数为负才知道不够减。不够减时必须恢复原来的余数以便再继续往下运算。这种方法称为恢复余数法。要恢复原来的余数,只要当前的余数加上除数即可。但由于要恢复余数,使除法进行过程的步数不固定,因此控制比较复杂。实际中常用不恢复余数法又称加减交替法。其特点是运算过程中如出现不够减则不必恢复余数,根据余数符号,可以继续往下运算,因此步数固定,控制简单。   早期计算机中,为了简化结构,硬件除法器的设计采用串行的1位除法方案。即多次执行“减法—移位”操作来实现,并使用计数器来控制移位次数。由于串行除法器速度太慢,目前已被淘汰。

98 不恢复余数除法即加减交替法的实现方式:  设被除数为:x 除数为:y [x – y]补 = [x ]补 + [-y]补 若:x – y >0 则商数为1,并进行第二步减, 即: [x – y]补 - ( 2-1 y) 若:x – y <0 则商数为0,还原减法操作,在进行第二步减, 即: [ x - ( 2-1 y) ]补= [x ]补 + [- ( 2-1 y) ]补 上面过程也就是: [x – y + y - ( 2-1 y) ]补 =[x – y ]补+ [y - ( 2-1 y) ]补 =[x – y ]补+ [( 2-1 y) ]补 步骤2同理,从而用加减交替法实现除法操作。

99 阵列除法器有多种多样形式,如不恢复余数阵列除法器,补码阵列除法器等等。
2.4.2 并行除法器 1. 可控加法/减法(CAS)单元    和阵列乘法器非常相似,阵列式除法器也是一种并行运算部件,采用大规模集成电路制造。与早期的串行除法器相比,阵列除法器不仅所需的控制线路少,而且能提供令人满意的高速运算速度。   阵列除法器有多种多样形式,如不恢复余数阵列除法器,补码阵列除法器等等。 先介绍可控加法/减法(CAS)单元,它将用于并行除法流水逻辑阵列中,它有四个输出端和四个输入端。当输入线P=0时,CAS作加法运算;当P=1时,CAS作减法运算。逻辑结构图:

100

101   CAS单元的输入与输出的关系可用如下一组逻辑方程来表示:
   Si=Ai⊕(Bi⊕P)⊕Ci Ci+1=(Ai+Ci)·(Bi⊕P)+AiCi (2.32) 当P=0时,方程式(2.32)就等于我们前面学习的一位全加器(FA)的公式:     Si=Ai⊕Bi⊕Ci    Ci+1=AiBi+BiCi+AiCi 当P=1时,则得求差公式: Ci+1=AiBi+BiCi+AiCi (2.33)   其中Bi=Bi⊕1。

102 为说明CAS单元的实际内部电路实现,将方程式(2.32)加以变换,可得如下形式:
  在减法情况下,输入Ci称为借位输入,而Ci+1称为借位输出。   为说明CAS单元的实际内部电路实现,将方程式(2.32)加以变换,可得如下形式: Si = Ai⊕(Bi⊕P)⊕Ci = AiBiCiP+AiBiCiP+AiBiCiP+AiBiCiP+ AiBiCiP+AiBiCiP+AiBiCiP+AiBiCiP   Ci+1 = (Ai+Ci)(Bi⊕P)+AiCi     = AiBiP+AiBiP+BiCiP+BiCiP+AiCi   在这两个表达式中,每一个都能用一个三级组合逻辑电路(包括反向器)来实现。因此每一个基本的CAS单元的延迟时间为3T单元。

103 2. 不恢复余数的阵列除法器   先假定所有被处理的数都是正的小数。   不恢复余数的除法也就是加减交替法。在不恢复余数的除法阵列中,每一行所执行的操作究竟是加法还是减法,取决于前一行输出的符号与被除数的符号是否一致。当出现不够减时,部分余数相对于被除数来说要改变符号。这时应该产生一个商位“0”,除数首先沿对角线右移,然后加到下一行的部分余数上。当部分余数不改变它的符号时,即产生商位“1”,下一行的操作应该是减法。下图是4位除4位的不恢复余数阵列除法器的逻辑原理图。

104

105 其中  被除数 x=0.x1x2x3x4x5x6 (双倍长)   除数 y=0.y1y2y3   商数 q=0.q1q2q3   余数 r=0.00r3r4r5r6   字长  n+1=4   由上图看出,该阵列除法器是用一个可控加法/减法(CAS)单元所组成的流水阵列来实现的。推广到一般情况,一个(n+1)位除(n+1)位的加减交替除法阵列由(n+1)2个CAS单元组成,其中两个操作数(被除数与除数)都是正的。

106    最上面一行所执行的初始操作经常是减法。因此最上面一行的控制线P固定置成“1”。减法是用2的补码运算来实现的,这时右端各CAS单元上的反馈线用作初始的进位输入。每一行最左边的单元的进位输出决定着商的数值。将当前的商反馈到下一行,我们就能确定下一行的操作。由于进位输出信号指示出当前的部分余数的符号,因此,它将决定下一行的操作将进行加法还是减法。  

107   对不恢复余数阵列除法器来说,在进行运算时,沿着每一行都有进位(或借位)传播,同时所有行在它们的进位链上都是串行连接。而每个CAS单元的延迟时间为3T单元,因此,对一个2n位除以n位的不恢复余数阵列除法器来说,单元的数量为(n+1)2,考虑最大情况下的信号延迟,其除法执行时间为    td=3(n+1)2T   其中n为尾数位数。

108 [例20] x= , y=0.111, 求x÷y。 [解:]  [-y]补=1.001         被除数x            减y                            余数为负  <0   q0=0         余数左移            加y                     余数为正    >0   q1=1         余数左移            减y                     余数为负     <0   q2=0         余数左移            加y                     余数为正      >0   q3=1 故得       商 q = q0.q1q2q3 =      余数 r = (0.00r3r4r5r6) =

109 2.5 定点运算器的组成 逻辑运算   计算机中除了进行加、减、乘、除等基本算术运算外,还可对两个或一个逻辑数进行逻辑运算。所谓逻辑数,是指不带符号的二进制数。利用逻辑运算可以进行两个数的比较,或者从某个数中选取某几位等操作。计算机中的逻辑运算,主要是指逻辑非、逻辑加、逻辑乘、逻辑异四种基本运算。

110 1. 逻辑非运算   逻辑非也称求反。对某数进行逻辑非运算,就是按位求它的反,常用变量上方加一横来表示。 2. 逻辑加运算  两数进行逻辑加,就是按位求它们的“或”,所以逻辑加又称逻辑或,常用记号“V”或 “+”来表示。 3. 逻辑乘运算  两数逻辑乘,就是按位求它们的“与”,所以逻辑乘又称“逻辑与”,常用记号“∧”或“·”来表示。 4. 逻辑异运算  对两数进行异或就是按位求它们的模2和,所以逻辑异又称“按位加”,常用记号“⊕”表示。

111 2.5.2 多功能算术/逻辑运算单元(ALU)   由一位全加器(FA)构成的行波进位加法器,它可以实现补码数的加法或减法运算。但是这种加法/减法器存在两个问题:一是由于串行进位它的运算时间很长。假如加法器由n位全加器构成,每一位的进位延迟时间为20ns,那么最坏情况下,进位信号从最低位传递到最高位而最后输出稳定至少需要n*20ns,这在高速计算中显然是不利的。二是就行波进位加法器本身来说,它只能完成加法或减法两种操作而不能完成逻辑操作。 本节我们介绍的多功能算术/逻辑运算单元(ALU)不仅具有多种算术运算和逻辑运算的功能,而且具有先行进位逻辑,从而能实现高速运算。

112 图2.10 ALU的逻辑结构原理框图

113 1. 基本思想 一位全加器(FA)的逻辑表达式为 Fi= Ai⊕Bi⊕Ci Ci+1= AiBi+BiCi+CiAi 我们将Ai和Bi先组合成由控制参数S0, S1, S2, S3控制的组合函数Xi和Yi,然后再将Xi, Yi和下一位进位数通过全加器进行全加。这样,不同的控制参数可以得到不同的组合函数,因而能够实现多种算术运算和逻辑运算。

114 一位算术/逻辑运算单元的逻辑表达式为: Fi = Xi⊕Yi⊕Cn+I Cn+i+1 = XiYi+YiCn+i+Cn+iXi 上式中进位下标用n+i代替原来一位全加器中的i,i代表集成在一片电路上的ALU的二进制位数。对于4位一片的ALU,i=0, 1, 2, 3。n代表若干片ALU组成更大字长的运算器时每片电路的进位输入,例如当4片组成16位字长的运算器时,n=0, 4, 8, 12。

115 2. 逻辑表达式 S0 S1 Yi S2 S3 Xi 0 0 0 1 1 0 1 1 Ai Ai Bi Ai Bi 0
2. 逻辑表达式    控制参数S0, S1, S2, S3分别控制输入Ai和Bi,产生Y和X的函数。其中Yi是受S0, S1控制的Ai和Bi的组合函数,而Xi是受S2,S3控制的Ai和Bi组合函数,其函数关系如下表2.4所示。 S0 S1 Yi S2 S3 Xi 0 0 0 1 1 0 1 1 Ai Ai Bi Ai Bi 0 1 Ai+Bi Ai+Bi Ai 表2.4 Xi,Yi与控制参数和输入量的关系

116 进一步化简并代入前面的求和与进位表达式,可得ALU的某一位逻辑表达式如下
   根据上面所列的函数关系,即可列出Xi和Yi的逻辑表达式 Xi=S2S3+S2S3(Ai+Bi)+S2S3(Ai+Bi)+S2S3Ai Yi=S0S1Ai+S0S1AiBi+S0S1AiBi   进一步化简并代入前面的求和与进位表达式,可得ALU的某一位逻辑表达式如下 (2.36)

117 Cn+1=Y0+X0Cn 其中Cn是向第0位(末位)的进位。 第1位向第2位的进位公式为
  4位之间采用先行进位公式,根据上式(2.36),每一位的进位公式可递推如下: 第0位向第1位的进位公式为 Cn+1=Y0+X0Cn 其中Cn是向第0位(末位)的进位。 第1位向第2位的进位公式为 Cn+2=Y1+X1Cn+1=Y1+Y0X1+X0X1Cn  第2位向第3位的进位公式为 Cn+3=Y2+X2Cn+2=Y2+Y1X2+Y0X1X2+X0X1X2Cn 第3位的进位输出(即整个4位运算进位输出)公式为 Cn+4=Y3+X3Cn+3=Y3+Y2X3+Y1X2X3+ Y0X1X2X3+X0X1X2X3Cn  设 G=Y3+Y2X3+Y1X2X3+Y0X1X2X3     P=X0X1X2X3 则 Cn+4=G+PCn (2.37)

118   这样对一片ALU来说,可有三个进位输出。其中G称为进位发生输出,P称为进位传送输出。
在电路中多加这两个进位输出的目的,是为了便于实现多片(组)ALU之间的先行进位,为此还需一个配合电路称之为先行进位发生器(CLA)。   Cn+4是本片(组)的最后进位输出。逻辑表达式表明,这是一个先行进位逻辑。换句话说第0位的进位输入Cn可以直接传送到最高位上去,因而可以实现高速运算。   用正逻辑表示的4位算术/逻辑运算单元(ALU)的逻辑电路图如下,它是根据上面的原始推导公式用TTL电路实现的。这个期间的商业标号为74181ALU。

119

120 3. 算术逻辑运算的实现   上图示中除了S0-S3四个控制端外,还有一个控制端M,它是用来控制ALU是进行算术运算还是进行逻辑运算的。   当M=0时,M对进位信号没有任何影响。此时F 不仅与本位的被操作数Y和操作数X 有关,而且与本位的进位输出,即C 有关,因此M=0时进行算术操作。   当M=1时,封锁了各位的进位输出,即C =0,因此各位的运算结果F 仅与Y 和X 有关,故 M=1时进行逻辑操作。

121 下图示出了工作于负逻辑和正逻辑操作数方式的74181ALU方框图。由书第55页的功能表可看出,这个器件执行的正逻辑输入/输出方式的一组算术运算和逻辑操作与负逻辑输入/输出方式的一组算术运算和逻辑操作是等效的。 图2.11  74181ALU的逻辑电路图和方框图

122 参见书中第55页的表2.5列出了74181ALU的运算功能表,它有两种工作方式。对正逻辑操作数来说,算术运算称高电平操作,逻辑运算称正逻辑操作(即高电平为“1”,低电平为“0”)。对于负逻辑操作数来说,正好相反。由于S0~S3有16种状态组合,因此对正逻辑输入与输出而言,有16种算术运算功能和16种逻辑运算功能。同样对于负逻辑输入与输出而言,也有16种算术运算功能和16种逻辑运算功能。

123 4. 两级先行进位的ALU   前面说过,74181ALU设置了P和G两个本组先行进位输出端。如果将四片74181的P,G输出端送入到74182先行进位部件(CLA),又可实现第二级的先行进位,即组与组之间的先行进位。   假设4片(组)74181的先行进位输出依次为P0,G0,G1,P1,P2,G2,P3,G3,那么参考式(2.37)的进位逻辑表达式,先行进位部件74182CLA所提供的进位逻辑关系如下:

124 Cn+y=G1+P1Cn+x=G1+G0P1+P0P1Cn Cn+z=G2+P2Cn+y=G2+G1P2+G0P1P2+P0P1P2Cn
=G3+G2P3+G1P1P2+G0P1P2P3+P0P1P2P3Cn    =G*+P*Cn 其中 P*=P0P1P2P3 G*=G3+G2P3+G1P1P2+G0P1P2P3   根据以上表达式,用TTL器件实现的成组先行进位部件74182的逻辑电路图如下,其中G*称为成组进位发生输出,P*称为成组进位传送输出。 

125

126   下图示出了用两个16位全先行进位部件级联组成的32位ALU逻辑方框图。在这个电路中使用了八个74181ALU和两个74182CLA器件。很显然对一个16位来说,CLA部件构成了第二级的先行进位逻辑,即实现四个小组(位片)之间的先行进位,从而使全字长ALU的运算时间大大缩短。 图2.13 用两个16位全先行进位部件级联组成的32位ALU

127 2.5.3 内部总线 由于计算机内部的主要工作过程是信息传送和加工的过程,因此在机器内部各部件之间的数据传送非常频繁。为了减少内部的传送线并便于控制,通常将一些寄存器之间数据传送的通路加以归并,组成总线结构,使不同来源的信息在此传输线上分时传送。   根据总线所在位置,总线分为内部总线和外部总线两类。内部总线是指CPU内各部件的连线,而外部总线是指系统总线,即CPU与存储器、I/O系统之间的连线。 本节只讨论内部总线。 

128    按总线的逻辑结构来说,总线可分为单向传送总线和双向传送总线。所谓单向总线就是信息只能向一个方向传送。所谓双向总线就是信息可以分两个方向传送,既可以发送数据,也可以接收数据。
  下图 2.14(a) 是带有缓冲驱动器的4位双向数据总线。其中所用的基本电路就是三态逻辑电路。当“发送”信号有效时,数据从左向右传送。反之当“接收”信号有效时,数据从右向左传送。这种类型的缓冲器通常根据它们如何使用而叫作总线扩展器、总线驱动器、总线接收器等等。

129 图2.14 由三态门组成的双向数据总线

130    上图2.14(b)中所示的是带有锁存器的4位双向数据总线。它主要由一个DE触发器和一个三态缓冲器组成。DE触发器是在一个普通D触发器上另加一个E输入端(允许端)而构成的。此处E输入端用以控制D的输入。若E=0,即使D为“1”,也不能输入。当接收数据时,E=1三态门被禁止,因而数据总线上的数据被接收到锁存器。当发送数据时,E=0,三态门被允许,因而锁存器的数据发送至数据总线上。

131 2.5.4 定点运算器的基本结构 运算器包括ALU\阵列乘除器\寄存器\多路开关\三态缓冲器\数据总线等逻辑部件。   运算器的设计,主要是围绕ALU和寄存器同数据总线之间如何传送操作数和运算结果进行的。   在决定方案时,需要考虑数据传送的方便性和操作速度,在微型机和单片机中还要考虑在硅片上制作总线的工艺。计算机的运算器大体有如下三种结构形式:

132 1. 单总线结构的运算器 总线结构的运算器如下图所示。由于所有部件都接到同一总线上,所以数据可以在任何两个寄存器之间,或者在任一个寄存器和ALU之间传送。如果具有阵列乘法器或除法器,那么它们所处的位置应与ALU相当。对这种结构的运算器来说,在同一时间内,只能有一个操作数放在单总线上。为了把两个操作数输入到ALU,需要分两次来做,而且还需要A, B两个缓冲寄存器。这种结构的主要缺点是操作速度较慢,但是由于它只控制一条总线,故控制电路比较简单。

133

134 2. 双总线结构的运算器    双总线结构的运算器如下图所示。在该结构中,两个操作数同时加到ALU进行运算,只需一次操作控制,而且马上就可以得到运算结果。图中两条总线各自把其数据送至ALU的输入端。特殊寄存器分为两组,它们分别与一条总线交换数据。这样通用寄存器中的数就可进入到任一组特殊寄存器中去,从而使数据传送更为灵活。ALU的输出不能直接加到总线上去。这是因为当形成操作结果的输出时,两条总线都被输入数占据,因而必须在ALU输出端设置缓冲寄存器。为此操作的控制要分两步完成:

135 第一步: 在ALU的两个输入端输入操作数,形成结果并送入缓冲寄存器;
第二步: 把结果送入目的寄存器。假如在总线1, 2和ALU输入端之间再各加一个输入缓冲寄存器,并把两个输入数先放至这两个缓冲寄存器,那么ALU输出端就可以直接把操作结果送至总线1或总线2上去。

136

137 3. 三总线结构的运算器 三总线结构的运算器如下图所示。在三总线结构中,ALU的两个输入端分别由两条总线供给,而ALU的输出则与第三条总线相连。这样算术逻辑操作就可以在一步控制之内完成。由于ALU本身有时间延迟,所以打入输出结果的选通脉冲必须考虑到包括这个延迟。另外设置了一个总线旁路器。如果一个操作数不需要修改而直接从总线2传送到总线3,那么可以通过控制总线旁路器把数据传出;如果一个操作数传送时需要修改那么就借助于ALU。很显然三总线结构的运算器的特点是操作时间快。

138

139 2.6 浮点运算方法和浮点运算器 2.6.1 浮点加法、减法运算
2.6 浮点运算方法和浮点运算器 浮点加法、减法运算 设有两个浮点数x和y,它们分别为 x= 2Ex·Mx y= 2Ey·My 其中Ex和Ey分别为数x和y的阶码,Mx和My为数x和y的尾数。  两浮点数进行加法和减法的运算规则是 z =x±y=(Mx2Ex-Ey±My)2Ey,   Ex<=Ey (2.39)

140 完成浮点加减运算的操作过程大体分为四步:
   (1). 0 操作数的检查;    (2). 比较阶码大小并完成对阶;    (3). 尾数进行加或减运算;    (4). 结果规格化并进行舍入处理。

141 (1) 0 操作数检查 浮点加减运算过程比定点运算过程复杂。如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。 (2) 比较阶码大小并完成对阶 两浮点数进行加减,首先要看两数的阶码是否相同。若二数阶码相同表示小数点是对齐的,可以进行尾数的加减运算;若二数阶码不同表示小数点位置没有对齐,此时必须使二数阶码相同这个过程叫作对阶。在对阶时总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移) ,每右移一位其阶码加1,直到阶码相等。

142 (3) 尾数求和运算 对阶结束后,即可进行尾数的求和运算。不论加法运算还是减法运算,都按加法进行操作,其方法与定点加减法运算完全一样。 (4) 结果规格化 在浮点加减运算时,尾数求和的结果也可以得到01.ф…ф或10.ф…ф,即两符号位不等,这在定点加减法运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。此时将运算结果右移以实现规格化表示称为向右规格化。规则是:尾数右移1位阶码加1。当尾数不是1.M时需向左规格化。

143 (5) 舍入处理 在对阶或向右规格化时尾数要向右移位,这样被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。简单的舍入方法有两种:一种是"0舍1入"法。另一种是"恒置一"法。 在IEEE754标准中,舍入处理提供四种可选方法: 就近舍入 其实质就是通常所说的“四舍五入”。 朝0舍入 即朝数轴原点方向舍入,就是简单的截尾。这种方法容易导致误差积累。 朝+∞舍入 对正数来说,只要多余位不全为0则向最低有效位进1;对负数来说则是简单的截尾。 朝-∞舍入 处理方法正好与 朝+∞舍入情况相反。对正数来说,只要多余位不全为0则简单截尾;对负数来说,向最低有效位进1。

144 下图表示了浮点机器数在数轴上的分布情况。
(6) 浮点数的溢出 下图表示了浮点机器数在数轴上的分布情况。 机器浮点数表示 当机器浮点数值大于最大正数A值,或小于最小负数B值时,称为上溢,这两种情况意味着阶码运算值超出了它所表示的范围,机器必须做中断处理。 当机器浮点数值小于最小正数a值,或大于最大负数b值时,称为下溢。下溢不是一个严重问题,通常看作为机器零。

145 2.6.2 浮点乘法、除法运算   1. 浮点乘法、除法运算规则 设有两个浮点数x和y:    x=2Ex·Mx y=2Ey·My 浮点乘法运算的规则是 x×y=2(Ex+Ey)·(Mx×My) (2.40) 即乘积的尾数是相乘两数的尾数之积,乘积的阶码是相乘两数的阶码之和。 浮点除法运算的规则是 x÷y=2(Ex-Ey)·(Mx÷My) (2.41) 商的尾数是相除两数的尾数之商,商的阶码是相除两数的阶码之差。当然这里也有规格化与舍入等步骤。

146 浮点数的溢出是以其阶码溢出表现出来的。在加\减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应处理。另外对尾数的溢出也需要处理。
阶码上溢 超过了阶码可能表示的最大值的正指数值,一般将其认为是+∞和-∞。 阶码下溢 超过了阶码可能表示的最小值的负指数值,一般将其认为是0。 尾数上溢 两个同符号尾数相加产生了最高位向上的进位,将尾数右移阶码增1来重新对齐。 尾数下溢 在将尾数右移时,尾数的最低有效位从尾数域右端流出,要进行舍入处理。

147 2. 浮点乘、除法运算步骤 浮点数的乘除运算大体分为四步:   第一步,0 操作数检查; 第二步,阶码加/减操作; 第三步,尾数乘/除操作; 第四步,结果规格化及舍入处理。 (1) 浮点数的阶码运算   对阶码的运算有+1、-1、两阶码求和、两阶码求差四种,运算时还必须检查结果是否溢出。在计算机中阶码通常用补码或移码形式表示。补码运算规则和判定溢出的方法,前面已经讲过。这里只对移码的运算规则和判定溢出的方法进行讲解。

148 移码的定义为    [x]移=2n+x   2n>x≥-2n
按此定义,则有    [x]移+[y]移= 2n+x+2n+y          = 2n+(2n+(x+y))          =2n+[x+y]移   即直接用移码实现求阶码之和时,结果的最高位多加了个1,要得到正确的移码形式结果,必须对结果的符号再执行一次求反。

149  当混合使用移码和补码时,考虑到移码和补码的关系:对同一个数值其数值位完全相同,而符号位正好完全相反。而[y]补的定义为    [y]补=2n+1+y
则求阶码和用如下方式完成:   [x]移+[y]补=2n+x+2n+1+y          =2n+1+(2n+(x+y))          =2n+1+[x+y]移 [x+y]移=[x]移+[y]补   (mod 2n+1) 同理 [x-y]移=[x]移+[-y]补

150   上二式表明执行阶码加减时,对加数或减数y来说应送移码符号位正常值的反码。
  如果阶码运算的结果溢出,上述条件则不成立。此时使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位恒用 0 参加加减运算,则溢出条件是阶码的最高符号位为1。此时当两位符号位为 10时表明上溢,为11时表明下溢。当最高符号位为0时表明没有溢出;两位符号位为01时结果为正;为 00 时结果为负。

151 [例26] x=+011,y=+110, 求[x+y]移 和 [x-y]移, 并判断是否溢出。 [解:] [x]移=01 011, [y]补=00 110, [-y]补=11 010  [x+y]移=[x]移+[y]补=10 001, 结果上溢。 [x-y]移=[x]移+[-y]补=00 101, 结果正确, 为-3。

152 2.6.3 浮点运算流水线 1. 流水线原理   计算机的流水处理过程同工厂中的流水装配线类似。为了实现流水,首先必须把输入的任务分割为一系列的子任务,使各子任务能在流水线的各个阶段并发地执行。将任务连续不断地输入流水线,从而实现了子任务的并行。因此流水处理大幅度地改善了计算机的系统性能,是在计算机上实现时间并行性的一种非常经济的方法。 

153   在流水线中,原则上要求各个阶段的处理时间都相同。若某一阶段的处理时间较长,势必造成其他阶段的空转等待。因此对子任务的划分,是决定流水线性能的一个关键因素,它取决于操作部分的效率、所期望的处理速度,以及成本价格等等。 假定作业 T 被分成 k 个子任务,可表达为 T={T1,T2,···,Tk}   各个子任务之间有一定的优先关系:若i<j,则必须在 Ti 完成以后,Tj才能开始工作。具有这种线性优先关系的流水线称为线性流水线。线性流水线处理的硬件基本结构如下图所示。

154

155 2. 流水线浮点加法器   从前述可以得到,浮点数加减法由0操作数检查、对阶操作、尾数操作、结果规格化及舍入处理共4步完成,因此流水线浮点加法器可由4个过程段组成。下图2.18仅示出了除0操作数检查之外的3段流水线浮点加法器框图。

156

157 2.6.4 浮点运算器实例 1. CPU之外的浮点运算器   80×87是美国Intel公司为处理浮点数等数据的算术运算和多种函数计算而设计生产的专用算术运算处理器。由于它们的算术运算是配合80×86CPU进行的,所以又称为协处理器。   下面以80×87浮点运算器为例,说明其特点和内部结构。

158 (1)以异步方式与80386并行工作,80×87相当于386的一个I/O部件,本身有它自己的指令,但不能单独使用,它只能作为386主CPU的协处理器才能运算。
(2)可处理包括二进制浮点数、二进制整数、和压缩十进制数串三大类7种数据,其中浮点数的格式符合IEEE754标准。7种数据类型在寄存器中表示如下:   短整数(32位整数)   长整数(64位整数)  短实数(32位浮点数)  长实数(64位浮点数)  临时实数(80位浮点数)  十进数串(十进制18位)

159 图 ×87浮点计算器逻辑框图

160 2. CPU之内的浮点运算器   奔腾CPU将浮点运算器包含在芯片内。浮点运算部件采用流水线设计。   指令执行过程分为8段流水线。前4 段为指令预取(DF)、指令译码(D1)、地址生成(D2)、取操作数(EX),在U、V流水线中完成;后4段为执行1(X1)、执行2(X2)、结果写回寄存器堆(WF)、错误报告(ER),在浮点运算器中完成。一般情况下,由U流水线完成一条浮点数操作指令。   浮点部件内有浮点专用加法器、乘法器和除法器,有8个80位寄存器组成的寄存器堆,内部的数据总线为80位宽。因此浮点部件可支持IEEE754标准的单精度和双精度格式的浮点数。另外还使用一种称为临时实数的80位浮点数。对于浮点数的取数、加法、乘法等操作,采用了新的算法,其执行速度是80486的10倍多。

161 第二章小结 一个定点数由符号位和数值域两部分组成。按小数点位置不同,定点数有纯小数和纯正数两种表示方法。      按 IEEE754标准,一个浮点数由符号位S、阶码E、尾数M三个域组成。其中阶码E的值等于指数的真值e加上一个固定偏移值。      为了计算机能直接处理十进制形式的数据,采用两种表示形式:⑴字符串形式,主要用在非数值计算的应用领域;⑵压缩的十进制数串形式,用于直接完成十进制数的算术运算。

162 数的真值变成机器码时有四种表示方法:原码表示法,反码表示法,补码表示法,移码表示码。其中移码主要用于表示浮点数的阶码E,以利于比较两个指数的大小和对阶操作。
     字符信息属于符号数据,是处理非数值领域的问题。国际上采用的字符系统是七单位的ASCII码。   直接采用西文标准键盘输入汉字,进行处理,并显示打印汉字,是一项重大成就。为此要解决汉字的输入编码、汉字内码、字膜码等三种不同用途的编码。

163 为运算器构造的简单性,运算方法中算术运算通常采用补码加、减法,原码乘除法或补码乘除法。
为了运算器的高速性和控制的简单性,采用了先行进位、阵列乘除法、流水线等并行技术措施。      定点运算器和浮点运算器的结构复杂程度有所不同。早期微型机中浮点运算器放在CPU芯片外,随着高密度集成电路技术的发展,现已移至CPU内部。

164 作业: 第二章: 作业:1、3、4、5、6、 7(1)、8(1)、9(1)、10(1)、 11、12 练习:13、14、15、16


Download ppt "第二章 运算方法和运算器 2.1 数据与文字的表示方法 2.2 定点加法、减法运算 2.3 定点乘法运算"

Similar presentations


Ads by Google