操作系统第二章+运算方法与运算器.ppt_第1页
操作系统第二章+运算方法与运算器.ppt_第2页
操作系统第二章+运算方法与运算器.ppt_第3页
操作系统第二章+运算方法与运算器.ppt_第4页
操作系统第二章+运算方法与运算器.ppt_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章 运算方法与运算器,2.1 数据信息的表示方法 2.1.1数值数据的表示,真值与机器数,采用正、负符号加上二进制的绝对值,则这种数值称为真值。 将正负号分别用一位数码0和1来代替,一般将这种符号位放在数的最高位。这种在机器中使用的连同数符一起数码化的数,称为机器数。,真值与机器数,例:设机器字为8b字长,数N1的真值为(+1001110)2,数N2的真值为(-1001110)2,则N1 、N2对应的机器数为: N1 0 1 0 0 1 1 1 0 N2 1 1 0 0 1 1 1 0 符号 数 值 部 分,数的转换 例2-1 将十进制数26.41转换成二进制数,八进制数、十六进制数。 解

2、: 转换成二进制数的过程如下, 整数除2取余 (余数) ( 整数 )小数乘2取整。 26 .41 13 0 0 .82 6 1 1 .64 3 0 1 .28 1 1 0 .56 0 1 1 .12 26.4110=1 1 0 1 0. 0 1 1 0 12,数的机器码表示 通常有原码、补码、反码和移码四种表示法。 原码表示法 其最高位作为符号位,用“0”表示正号,用“1”表示负号,有效值部分用二进制的绝对值表示。例如,若x1=+0.1011 x2=-0.1011, 字长为8b,则其原码分别为: x1原=0.1011000 x2原=1.1011000 原码有正零和负零两种形式: +0原=0.0

3、0 00 -0原=1.00 00,补码表示法,由于补码在作二进制加、减运算时较方便,所以在计算机中广泛采用补码表示二进制数。 补码运算中,可以用加法代替减法,节省元件,降低成本。,补的概念,时钟,逆时针,- 3,6,3,顺时针,可见 3 可用 + 9 代替,记作 3 + 9 (mod 12),同理 4 + 8 (mod 12),5 + 7 (mod 12),时钟以 12为模,减法 加法,称 + 9 是 3 以 12 为模的 补数,补码表示法,原码求补码方法:正数不变(相同)。负数符号位不变,数值位求反加1 例如,若x1=+0.1011,x2=-0.1011, 字长为8b,则其补码分别为 x1原

4、=0.1011000 x1补=0.1011000 x2原=1.1011000 x2补=1.0101000 补码的零只有一个即0.0000000。 1.000000表示负1, 反码表示法,对于正数来说,反码与原码、补码的表示形式相同。对于负数来说,符号位与原码、补码的符号位定义相同。而数值只是将原码的数值位按位变反就得到了该数的反码表示。 例如,若x1=+0.1011 x2=-0.1011, 字长为8b, x1反=0.1011000= x1原= x1补 x2原=1.1011000 x2反=1.0100111 x2补=1.0101000 反码的零有两个0.0000和1.11111, 移码,移码也叫

5、增码,它常以整数形式用在计算机浮点数的阶码(表示指数)中。若纯整数X为n位(包括符号位),则其移码定义为: x移=2n-1+x补 -2n-1X2n-1-1 补码将符号位求反可得移码。 设字长为8b,若x=+1000(2), x补=00001000 x移=10001000 若x=-1000(2), x补=11111000 x移= 01111000,四种机器数的小结,移码为将补码符号位求反,对于正数,原码 = 补码 = 反码,数的定点表示,计算机中小数的小数点并不是用某个数字来表示的,而是用隐含的小数点的位置来表示。根据小数点的位置是否固定,又可分为定点表示和浮点表示。其中定点表示形式又分为定点小

6、数表示形式和定点整数表示形式。,数的定点表示, 定点小数 将小数点固定在符号位d0之后,数值最高位d-1之前,这就是定点小数形式。其格式如下所示: d0 d-1 d-2 d-(n-1) 定点整数 将小数点固定在数的最低位之后,这就是定点整数形式。其格式如下所示: d0 d-1 d-2 . d-(n-1) ,定点小数的表示范围: 设字长为8b,用原码表示时,其表示范围如下: 最小负数 最大负数 最小正数 最大正数 1.1111111 1.0000001 0.0000001 0.1111111 -(1-2) -27 27 1-27 设字长为8b,用补码表示时,其表示范围如下: 最小负数 最大负数

7、最小正数 最大正数 1.0000000 1.1111111 0.0000001 0.1111111 -1 -27 27 1-27,定点整数的表示范围: 设字长为8b,用原码表示时,其表示范围如下: 最小负数 最大负数 最小正数 最大正数 11111111 10000001 00000001 01111111 -(27-1)=-127 -1 +1 27-1=127 设字长为8b,用补码表示时,其表示范围如下: 最小负数 最大负数 最小正数 最大正数 10000000 11111111 00000001 01111111 -27=-128 -1 +1 27-1=127,(1)综上所述,用原码表示时

8、,由于真值零占用了两个编码,因此n位二进制只能表示2n-1个原码。原码表示的优点是:数的真值与它的原码之间的对应关系简单、直观、转换容易,但用原码实现加减运算很不方便。 (2)在补码系统中,由于零有唯一的编码,因此,n位二进制能表示2n个补码,采用补码表示比用原码表示可多表示一个数。补码在机器中常用于作加、减运算。,计算机中 r 取 2、4、8、16 等,当 r = 2,N = 11.0101,= 0.110101210,= 1.1010121,= 1101.012-10,= 0.001101012100,计算机中 S 小数、可正可负,j 整数、可正可负,规格化数,数的浮点表示法,数的浮点表示

9、法, 浮点数的表示格式 浮点表示法把字长分成阶码(表示指数)和尾数(表示数值)两部分。其格式如下(第一种浮点格式): J Em-1E1 S D-1D-(n-1) 阶符 阶码值 数符 尾数值 补码表示 补码表示 阶码部分共分为m位,其中J为阶符(即指数部分的符号位),Ei为阶码值(表示幂次);基数R是隐含约定的,通常取2;尾数部分共分为n位,其中S是尾数部分的符号位,D-1D-(n-1)为尾数值部分。假设阶码为E,尾数为D,基数为2,则这种格式存储的数X可表示为X=D2E。,实际应用中,阶码通常采用补码或移码定点整数形式,尾数通常用补码定点小数形式。浮点表示法还有另一种(即第二种浮点格式)表示格

10、式,将数符放在最高位,即 S J Em-1E1 D-1D-(n-1) 数符 阶符 阶码值 尾数值 移码表示 补码表示, 浮点数的规格化,为了使浮点表示法有尽可能高的精度,措施之一是增加位数或者是在字长一定的情况下,将阶码和尾数所占的位数协调好;措施之二是采用浮点数规格化表示。那么什么是浮点数规格化呢?这就是通过调整阶码,使其尾数D满足下面形式的数: 原码规格化后 正数为 0.1的形式。 负数为 1.1的形式。 补码规格化后 正数为 0.1的形式。 负数为 1.0的形式。, 浮点数的表示举例,某机用32b表示一个数,阶码部分占8b(含一位符号位),尾数部分占24b(含一位符号位)。设x1=-25

11、6.5 ,x2=127/256,试写出x1和x2的两种浮点数表示格式。 解: x1=-256.5= -(100000000.1)2 =-290.1000000001 阶码的补码为(+9)补=00001001 阶码的移码为(+9)移=10001001 尾数=1.01111111110000000000000 (规格化补码) 第一种浮点表示的格式为 00001001,1.01111111110000000000000 第二种浮点表示的格式为 1,10001001,01111111110000000000000, 浮点数的表示举例,某机用32b表示一个数,阶码部分占8b(含一位符号位),尾数部分占2

12、4b(含一位符号位)。设x1=-256.5 ,x2=127/256,试写出x1和x2的两种浮点数表示格式。 解 x2=127/256= (1111111)22-8=2-10.1111111 阶码的补码为(-1)补=11111111 阶码的移码为(-1)移=01111111 尾数=0.11111110000000000000000(规格化补码) 第一种浮点表示的格式为 11111111,0.11111110000000000000000 第二种浮点表示的格式为 0,01111111,11111110000000000000000, 浮点数的表示范围,设阶码和尾数各为4b(各包含一个符号位),则其

13、浮点数的表示表示范围分别为: 阶码范围 最小负数 最大负数 最小正数 最大正数 1000 1111 0001 0111 -23=-8 -1 +1 23-1=7 规格化尾数表示范围 最小负数 最大负数 最小正数 最大正数 1.000 1.011 0.100 0.111 -1 -(23+21 ) 21 1-23,规格化浮点数表示范围,最小负数 最大负数 最小正数 最大正数 201111.000 210001.011 210000.100 201110.111 211111.000 200001.011 200000.100 211110.111 -271 -2-8(23+21 ) 2-821 27

14、(1-23) 注意:这里规格化尾数的最大负数的补码是1.011的形式,而不是1.100的形式,是因为 1.100不是规格化数,所以规格化尾数的最大负数应是 : -(0.100 + 0.001)= - 0.1001 , 而- 0.101补=1.011 ,即 -(2(n-1)+21 ),(5) 溢出问题,定点形式判断溢出的办法是对数值本身进行判断,而浮点数是对规格化后的阶码进行判断。当一个浮点数阶码大于机器的最大阶码,称为上溢;而小于最小阶码时,称为下溢。机器产生上溢时,不能再继续运算,一般要进行中断处理。出现下溢时,一般规定把浮点数各位强迫为零(当做零处理),机器仍可继续进行运算。,数的浮点表示

15、法, 浮点数的表示格式 浮点表示法把字长分成阶码(表示指数)和尾数(表示数值)两部分。其格式如下(第一种浮点格式): J Em-1E1 S D-1D-(n-1) 阶符 阶码值 数符 尾数值 补码表示 补码表示 浮点表示法还有另一种(即第二种浮点格式,IEEE 754标准)表示格式,将数符放在最高位,即 S J Em-1E1 D-1D-(n-1) 数符 阶符 阶码值 尾数值 移码表示 补码表示, 浮点数的规格化,原码规格化后 正数为 0.1的形式。 负数为 1.1的形式。 补码规格化后 正数为 0.1的形式。 负数为 1.0的形式。,2.1.2 非数值数据的表示字符的表示,ASCII码(Amer

16、ican Standard Code For Information Interchange,美国国家信息交换标准字符码) 。ASCII共有128个字符,其中95个编码(包括大小写各26个英文字母,(09)10个数字符,标点符号等)对应着计算机终端能敲入并可以显示这95个字符,打印机也可打印出这95个字符。另外的33个字符是被用做控制码,控制计算机某些外围设备的工作特性和某些计算机软件运行情况。,ASCII码,在计算机中,用1B(一个字节)表示一个ASCII码,其最高一位(b7位)填0,余下的7b可以给出128个编码,表示128个不同的字符和控制码。但当进行奇偶校验时,也可以用最高位(b7)作

17、为校验位。 如A的ASCII码为: 1000001=01000001=(41)16=65 如a的ASCII码为: 1100001=01100001=(61)16=97,汉字的表示,(1)汉字的输入 输入码是为使输入设备能将汉字输入到计算机而专门编制的一种代码。目前已出现了数百种汉字输入方案,常见的有国标码、区位码、拼音码和五笔字型等。 (2)汉字在机内的表示 机内码是指机器内部处理和存储汉字的一种代码。目前国内还没有制定统一的汉字机内码,常用的一种汉字机内码是用2B表示一个汉字的。它是在国标码的基础上,在每个字节的最高位置“1”作为汉字标记而组成的。 机内码与国标之间的转换关系为:机内码(十六

18、进制)国标码(十六进制)8080H。例如, “京”字的国标码为3E29H,其机内码为BEA9H。,(3)汉字的输出与汉字字库,显示器是采用图形方式(即汉字是由点阵组成)来显示汉字的。但由于汉字字形复杂,用显示西文字符的88点阵已无法显示一些常用的汉字,每个汉字至少需要1616的点阵才能显示。图2.1所示的是用1616点阵显示一个汉字的例子。 对于这种1616点阵码,每个汉字要用32B的容量,它是最简单的汉字点阵。若要获得更美观的字形,需采用2424,3232,4848等点阵来表示。一个实用的汉字系统大约占几十万到上百万个存储单元。,一般常用的汉字输出有打印输出和显示输出两种形式。输出汉字的过程

19、为:输入码转换为机内码,然后用机码检索字库,找到其字形点阵码,再输出汉字,,键盘 输入码处理 汉字机内码 字形 汉字字形点阵 显示 转换程序 2B 检索程序 32B 驱动程序 码表 汉字 CRT 字模库 显示器,2.2 定点加减法运算2.2.1 定点补码加、减法与溢出概念,在计算机中,常将数值转换成补码后再进行加减运算。其优点是,可将减法运算转化为加法运算,这样可以简化机器内部硬件电路的结构。补码运算的特点是,符号位和数值位一起参加运算。,补码加减运算规则,(1)补码的加法运算 其公式为:x补y补xy补 (2)补码的减法运算 其公式为x 补 - y 补= x - y 补= x +(- y) 补

20、 = x 补 + -y 补,只要能通过y 补求得-y 补,就可以将补码减法运算化为补码加法运算。已知y 补,求-y 补的法则是:对y 补各位(包括符号位)取反,然后在末位加上1。 例如,已知y 补=11010 则-y 补=00110 又如,已知y 补=01110 则-y 补=10010,加减法运算规则 参加运算的数都用补码表示。 数据的符号与数据一样参加运算。 求差时将减数求补,用求和代替求差。 运算结果为补码。如果符号位为0,表明运算结果为正;如果符号位为1,则表明运算结果为负。 符号位的进位为模值,应该丢掉。,2.补码加减运算举例,例1:已知机器字长 n=8b,x=44, y=53, 求x

21、+y=? 解: x=00101100 , y=00110101 x 补=00101100 ,y 补=00110101 x 补= 00101100 + y 补= 00110101 x+y 补= 01100001 ( x+y)2= +1100001 x+y = 97,2.补码加减运算举例,例2 已知机器字长 n=8b,x=-44, y=-53, 求x-y=? 解: x=-00101100,y=-00110101 x 补=11010100,y 补=11001011 -y 补=00110101 x 补= 11010100 + -y 补= 00110101 x-y 补= 1 00001001 已超出模值

22、,丢掉 ( x-y)2= +0001001 x-y = +9,3.溢出判断法,例如: 已知机器字长 n=8b,x=120, y=10, 求x+y=? 解: x=+1111000 y=+00001010 x 补=01111000 y 补=00001010 x 补= 01111000 + y 补= 00001010 x+y 补= 10000010 运算结果符号与被加数符号相反,故产生了溢出。 判断溢出的方法是:两个符号相同的数相加,其运算结果的符号应与被加数符号、加数符号相同,如相反就产生了溢出现象;两个符号相异的数相减,其运算结果的符号应与被减数的符号相同,如相反则有溢出发生。,(1)双符号法(

23、变形补码法),用两个相同的符号位表示一个数的符号。左边第一位为第一符号位Sf1,相邻的为第二符号位Sf2。 双符号位的含义为:00表示正号;01表示产生正向溢出;11表示负号;10表示产生负向溢出。 双符号位可用逻辑异或来判断溢出情况:V=Sf1Sf2, 若V=0,则无溢出;V=1,则有溢出。 即:运算结果的两个符号位相同,则没有溢出发生; 运算结果的两个符号位不同,则发生了溢出,第一符号位永远是结果的真正符号位。,例1:已知 x=0.1011 , y=0.0111, 求x+y=? 解:x 补=00.1011,y 补=00.0111 x 补= 00.1011 + y 补= 00.0111 x+

24、y 补= 01.0010 两符号位为01,表示出现正向溢出。 例2:已知 x=-0.1011 , y=0.0111, 求x-y=? 解:x 补=11.0101,-y 补=11.1001 x 补= 11.0101 + -y 补= 11.1001 x-y 补= 1 10.1110 已超出模值,丢掉 两符号位为10,表示出现负向溢出。,进位判断法,当两个单符号位的补码进行加减运算时,若最高数值位向符号位的进位值C与符号位产生的进位输出值S 相同,则没有溢出发生。如果两个进位值不同,则有溢出发生。其判断溢出表达式如下:V=SC 例如: x 补= 1.0101 + y 补= 1.1001 x+y 补=

25、1 0.1110 最高有效位没有进位,即C=0,符号位有进位,即S=1,故V=10=1,有溢出发生。 x 补= 1.1101 + y 补= 0.1001 x+y 补= 1 0.0110 最高有效位有进位,即C=1,符号位有进位,即S=1,故V=11=0,无溢出发生, x+y= + 0.0110 。,2.2.2 基本的二进制加、减法器,2.3.1 原码一位乘法,1. 人工计算乘法 例:求A=0.1101 B=0.1011两数乘积 0.1101 0.1011 1101 A20 不移位 1101 A21 左移1位 0000 A22 左移2位 1101 A23 左移3位 0.10001111,2.计算

26、机实现乘法运算,AB= A(0.1011) =0.1A+0.00A+0.001A+0.0001A =0.1A+0.00A+0.001(A+0.1A) = 0.1A+0.010A+0.1(A+0.1A) = 0.1A+0.10A+0.1(A+0.1A) =2-1A+ 2-10A+ 2-1(A+ 2-1A) = 2-1A+ 2-10A+ 2-1(A+ 2-1(A+0) 将乘法变成加法和右移的结合。,3原码一位乘法的运算规则,设 xxf.xx x n , yyf.yy y n ,乘积为P,乘积的符号位为Pf ,则有 Pf= xfyf ,|P|=|x|.|y| 求|P|的运算规则为: (1)被乘数和乘

27、数均取绝对值参加运算,符号位单独考虑。 (2)被乘数取双符号,部分积的长度与被乘数的长度相同,初值为0。 (3)从乘数的最低位的yn位开始对乘数进行判断, 若yn=1,则部分积加上被乘数|x|,然后右移一位; 若yn=0,则部分积加上0,然后右移一位。 (4)重复(3)判断n次。,例1 x= -0.1101,y=-0.1011,求:xy原=? 解: |x|=00.1101 (用双符号表示) |y|= 0.1011 (用单符号表示) 部分积 乘数 yn 说 明 00.0000 0.1011 + 00.1101 yn=1,加|x| 00.1101 00.01101 0.101 右移一位得 P1 +

28、 00.1101 yn=1 ,加|x| 01.00111 00.100111 0.10 右移一位得 P2 + 00.0000 yn=0,加0 00.100111 00.0100111 0.1 右移一位得 P3 + 00.1101 yn=1,加 |x| 01.0001111 00.10001111 0 右移一位得 P4 由于 Pf= xfyf =11=0,|P|=|x|.|y| =0.10001111 所以 xy原=0.10001111,2.3.2 补码一位乘法,1.补码一位乘法的运算规则 1)符号位参与运算,运算的数均以补码表示。 2)被乘数一般取双符号位参加运算,部分积初值为0。 3)乘数可

29、取单符号位,以决定最后一步是否需要校正,即是否要加-x补。 4)乘数末位增设附加位y n+1,且初值为0。 (5)按表2.2所示进行操作。 (6)按照上述算法进行n+1步操作,但第n+1步不再移位,仅根据y0与y1的比较结果作相应的运算即可。,表22 补码一位乘法算法 yn(高位)yn+1(低位) 操 作 0 0 部分积右移一位 0 1 部分积加 x补,右移一位 1 0 部分积加-x补,右移一位 1 1 部分积右移一位,例2 x= -0.1101,y=0.1011,求:xy补=? 解: x补=11.0011,-x补=00.1101 (用双符号表示) y补=0.1011 (用单符号表示) 部分积

30、 乘数ynyn+1 说 明 00.0000 0.10110 + 00.1101 ynyn+1=10,加-x补 00.1101 00.01101 0.1011 右移一位得 P1 00.001101 0.101 ynyn+1=11,右移一位得 P2 + 11.0011 ynyn+1=01,加x补 11.011001 11.1011001 0.10 右移一位得 P3 + 00.1101 ynyn+1=10 加-x补 00.1000001 00.01000001 0.1 右移一位得 P4 + 11.0011 ynyn+1=01, 加x补 11.01110001 最后一步不移位 即xy补=1.01110

31、001,2.3.3 原码两位乘法,为了提高乘法的执行速度,可以考虑每次对乘数的两位进行判断以确定相应的操作,这就是两位乘法。 原码两位乘法的运算规则为: (1)符号位不参加运算,最后的符号Pf= xfyf 。 (2)部分积与被乘数均采用三位符号,乘数末位增加一位C,其初值为0。 (3)按表2.3所示的操作。 (4)若尾数n为偶数,则乘数用双符号,最后一步不移位。 若尾数n为奇数,则乘数用单符号,最后一步移一位。,2.3.3 原码两位乘法,从乘数的最低位开始,每次用乘数的两位与被乘数相乘。 在二进制乘法中,二位乘数有四种可能的组合,每种组合对应以下操作: 00 Pi+1=2-2 (Pi+0) 0

32、1 Pi+1=2-2 (Pi+x) 10 Pi+1=2-2 (Pi+2x) 11 Pi+1=2-2 (Pi+3x) 因为 2-2(Pi+3x)= 2-2(Pi-x)+4x= 2-2(Pi-x)+x 所以 +3x变为本次运算先-x,+4x变为右移后的+x。,表23 原码两位乘法算法,Yn-1 yn C 操 作 0 0 0 加0 , 右移两位 , 0C 0 0 1 加x , 右移两位 , 0C 0 1 0 加x , 右移两位 , 0C 0 1 1 加2x , 右移两位 , 0C 1 0 0 加2x , 右移两位 , 0C 1 0 1 减x , 右移两位 , 1C 1 1 0 减x , 右移两位 ,

33、 1C 1 1 1 加0 , 右移两位 , 1C,例4 x= -0.1101,y=0.0110,求xy原=? 解: |x|=000.1101 2|x|=001.1010 (用三符号表示) |y|=00.0110 (用双符号表示) 部分积 乘数 C 说 明 000.0000 00.0110 0 + 001.1010 yn-1ynC=100,加2|x| 001.1010 000.011010 00.01 0 右移两位 0C + 000.1101 yn-1ynC=010,加2|x| 001.001110 000.01001110 00.0 右移两位 0C yn-1ynC=000,最后一步不移位 故x

34、y原=1.01001110,2.4 定点除法运算2.4.1 原码一位除法,两个用原码表示的数相除时,商的符号通过两个数的符号异或求得,而商的数值部分通过两个数的数值部分按正数求商得到。 设被除数x原xf.xx x n , 除数y 原yf.yy y n ,则 商的符号: Qf= xfyf 商的数值: |Q|=|x|/|y|,求|Q|的加减交替法(不恢复余数法)运算规则为:,(1)符号位不参加运算,并要求|x|y| (2)先用被除数减去除数, 当余数为正时,商上1,余数左移一位,再减去除数。 当余数为负时,商上0,余数左移一位,再加上除数。 (3)当第n+1步余数为负时需加上|y|得到第n+1步正

35、确的余数,最后余数为rn2-n(余数与被除数同号)。 原码不恢复余数法算法流程图如图28所示。,例1 x= -0.1001,y=-0.1011,求x/y原=? 解: |x|=00.1001,|y|=00.1011 -|y|补= 11.0101 被除数x/余数r 商数q 说 明 001001 +-|y|补 11. 0101 减去除数 111110 0 余数为负,商上0 111100 0 r和q左移一位 +|y|补 00. 1011 加上除数 000111 0.1 余数为正,商上1 001110 0.1 r和q左移一位 +-|y|补 11. 0101 减去除数 000011 0.11 余数为正,商

36、上1 000110 0.11 r和q左移一位 +-|y|补 11. 0101 减去除数 111011 0.110 余数为负,商上0 110110 0.110 r和q左移一位 +|y|补 00. 1011 加上除数 000001 0.1101 余数为正,商上1,Qf= xf + yf=1 + 1=0,x/y原=0.1101, 余数r原=1.00012-4(余数与被除数同号)。,2.4.2 补码一位除法,1. 补码不恢复余数法的算法规则如下: 符号位参加运算,除数与被除数均用双符号补码表示。 被除数与除数同号时,被除数减去除数。被除数与除数异号时,被除数加上除数。商符号位的取值见第步。 余数与除数

37、同号时,商上1,余数左移一位减去除数;余数与除数异号时,商上0,余数左移一位加上除数。 注意:余数左移加上或减去除数后就得到了新余数。 采用校正法包括符号位在内,应重复规则(n1)次。,商的校正原则:,当刚好能除尽 (即运算过程中任一步余数为0) 时,如果除数为正,则商不必校正;若除数为负,则商需要校正,即加2-n进行修正。 当不能除尽时,如果商为正,则不必校正;若商为负, 则商需要加2-n进行修正。 求得n位商后,得到的余数往往是不正确的。 正确的余数常需要根据具体情况作适当的处理才能获得,处理方法一般如下:,余数的处理,若商为正,则当余数与被除数异号时,应将余数加上除数进行修正才能获得正确

38、的余数。 若商为负,则当余数与被除数异号时,余数需要减去除数进行校正。 余数之所以需校正,是因为在补码不恢复余数除法运算过程中先比较后上商的缘故。可见,如果要保存余数必须根据具体情况对余数作相应处理,否则余数不一定正确。,例3 x= 0.1001,y= -0.1001,求x/y补=? 解:x补=0.1001,y补=11.0111 ,-y补= 00.1001 (用双符号表示) 被除数x/余数r 商数q 说 明 001001 +y补 11. 0111 x和y异号,x补+ y补 000000 0 余数与 y异号,商上0 000000 0 r和q左移一位 +y补 11. 0111 加上除数 11011

39、1 0.1 余数与 y同号,商上1 101110 0.1 r和q左移一位 +-y补 00. 1001 减去除数 110111 0.11 余数与 y同号,商上1 101110 0.11 r和q左移一位 +-y补 00. 1001 减去除数 110111 0.111 余数与 y同号,商上1 101110 0.111 r和q左移一位 +-y补 00. 1001 减去除数 110111 01111 余数与 y同号,商上1,中间有一步余数为零表示能除尽,除数为负,需校正, x/y补= 11111+ 00001= 10000 余数与被除数异号,需校正, 余数r补=(110111+ 00. 1001)2-4

40、 =0. 00002-4。,例3 x= -0.1001,y= 0.1011,求x/y补=? 解:x补=11.0111 y补=00.1011 ,-y补= 11.0101 (用双符号表示) 被除数x/余数r 商数q 说 明 110111 +y补 00. 1011 x和y异号,x补+y补 000010 1 余数与 y同号,商上1 000100 1 r和q左移一位 +-y补 11. 0101 减去除数 111001 1.0 余数与 y异号,商上0 110010 1.0 r和q左移一位 +y补 00. 1011 加上除数 111101 1.00 余数与 y异号,商上0 111010 1.00 r和q左移

41、一位 +y补 00. 1011 加上除数 000101 1.001 余数与 y同号,商上1 001010 1.001 r和q左移一位 +-y补 11. 0101 减去除数 111111 1.0010 余数与 y异号,商上0,不能除尽,商为负,需校正, x/y补= 10010+ 00001= 10011 余数与被除数同号不需校正, 余数r补=111112-4(余数与被除数同号)。,2.5 定点运算器的组成与结构,ALU(Arithmetic Logic Unit) 运算器是对数据进行加工处理的部件,它的具体任务是实现数据的算术运算和逻辑运算,所以它又称为算术逻辑运算部件,简记为ALU(Arith

42、metic Logic Unit)。,2.5.1 多功能算术逻辑运算单元(ALU),(1)一位全加器 设x和y两个操作数分别为 xxf.xxx n , yyf.yyYn 表25 一位全加器真值表 Xi yi Ci-1 Si Ci 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1,2.并行加法器及其进位链 并行加法器使用的全加器的位数与操作数的位数相同,它能够同时对操作数的各位进行相加,所以,称为并行加法器。这里将进位信号的产生与传递的逻辑结构称为进位链。 (1)串行进位的并行加法器 当

43、操作数为n1位长时,需要用n1位全加器构成加法器, 如图2.13所示。 真正的结果依赖于进位信号的逐位产生。加法器求和的时间是进位信号的产生和传递所占用的时间。,人们把xiyi称为进位传递函数或进位传递条件,并以Pi表示。而将xiyi称为进位产生函数或本地进位,并以Gi表示。所以,进位表达式又常表示为 Ci= xiyi + (xiyi) Ci-1 = Gi + Pi Ci-1 串行进位链的表达式为: C1= x1y1 + (x1y1) C0 = G1 + P1 C0 C2= x2y2 + (x2y2) C1 = G2 + P2 C1 C3= x3y3 + (x3y3) C2 = G3 + P3

44、 C2 Cn-1= xn-1y n-1 + (x n-1y n-1) C n-2 = G n-1 + P n-1 C n-2 Cn= xny n + (x ny n) C n-1 = G n + P n C n-1 从这组表达式中可以明显地看到,某位的进位信号的产生,依赖于低位进位信号的产生。要提高加法器的运算速度,就必须解决进位信号的产生和传递问题。,(2)并行进位的并行加法器 上式可以改写成如下形式: C1= G1 + P1 C0 C2= G2 + P2 C1= G2 + P2(G1 + P1C0) = G2 + P2G1 + P2P1C0 C3= G3 + P3 C2= G3 + P3(

45、G2 + P2C1) = G3 + P3G2 + P3P2G1 + P3P2P1C0 以此类推, C4= G4 + P4 C3= G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0 Cn-1= G n-1 + P n-1G n-2 + P n-1P n-2G n-3 + P n-1P n-2P n-3P4P3P2G1 + P n-1P n-2P n-3P4P3P2P1C0 Cn= G n + P nG n-1 + P nP n-1G n-2+ + P nP n-1P n-2P4P3P2G1 + P nP n-1P n-2P4P3P2P1C0 各进位信号的产生不

46、再与低位的进位信号有关,而只与两个参加运算的数和C0有关。,组内并行、组间串行的进位链 这种进位链也称为单重分组跳跃进位。以16b加法器为例,一般可分作4 个小组,每小级4位,每组内部采用并行进位结构,组间采用串行进位传递结构。 这里以最低4b(第4b第1b)这一小组为例进行讨论。它们各位的进位表达式为 C1= G1 + P1 C0 C2= G2 + P2G1 + P2P1C0 C3= G3 + P3G2 + P3P2G1 + P3P2P1C0 C4= G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0 在这个小组里,来自低位的进位信号只有C0 ,由它送到高位

47、小组的进位信号只需送出C4即可。从这组表达式可得,这个小组组内的并行进位14)。线路(见图2.14) 图中用虚线围起来的部分可看成是一个逻辑网络,如图2.15所示。,组内并行、组间并行的进位链 这种进位链又称为多重分组跳跃进位链。仿照分析每一位进位信号的方法,将每个小组最高位的进位信号分成进位传送函数和进位生成函数两个部分: C4= G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0 其中P4P3P2P1为小组的传送函数,记作Pi*。而前面4项与C0无关, 只与本小组内的Gi、Pi有关,所以称它们为第一小组的进位生成函数,记作Gi*,即 G1*= G4 + P

48、4G3 + P4P3G2 + P4P3P2G1 P1*= P4P3P2P1 因此 C4= G1*+ P1* C0 同理 C8= G2*+ P2* C4 C12= G3*+ P3* C8 C16= G4*+ P4* C12,这是一组递推表达式,可将其展开为 C4= G1*+ P1*C0 C8= G2*+ P2*G1*+ P2*P1*C0 C12= G3*+ P3* G2*+ P3*P2*G1*+ P3*P2*P1*C0 C16= G4*+ P4* G3*+ P4*P3* G2*+ P4*P3*P2*G1*+ P4*P3*P2*P1*C0 用逻辑电路实现展开后的表达式,就可以构成组间并行的进位线路

49、,即第二重分组并行进位线路。 组内采用并行进位,组间也采用并行进位时,每个小组应产生本小组的进位生成函数Gi*和本小组的进位传递函数Pi*,以作为组间并行进位网络的输入变量,所以,小组内的并行进位线路应作适当的修改,即: 第一小组应产生G1*、 P1*、C1、C2、C3,而不在小组内产生C4。 第二小组应产生G2*、 P2*、C5、C6、C7,而不在小组内产生C8。 第三小组应产生G3*、 P3*、C9、C10、C11,而不在小组内产生C12。 第四小组应产生G4*、 P4*、C13、C14、C15,而不在小组内产生C16,各小组的进位生成函数和进位传递函数的逻辑表达式为 G1*= G4 +

50、P4G3 + P4P3G2 + P4P3P2G1 G2*= G8 + P8G7 + P8P7G6 + P8P7P6G5 G3*= G12 + P12G11 + P12P11G10 + P12P11P10G9 G4*= G16 + P16G15 + P16P15G14 + P16P15P14G13 P1*= P4P3P2P1 P2*= P8P7P6P5 P3*= P12P11P10P9 P4*= P16P15P14P13 作如上修改后,仍以第一小组为例,组内的逻辑电路如图2.17所示。,3.用集成电路构成ALU的原理,常见的产品有SN74181,它是4b片形的芯片,即一片能完成4 b数的算术运算

51、和逻辑运算。还有8b、16b片的ALU芯片。下面先介绍SN74181芯片, 然后讨论如何用它构成ALU。 (1)SN74181芯片 SN74181是一种具有并行进位的多功能ALU芯片,每片4b,构成一组,组内是并行进位,其芯片方框图如图2.19所示。,(2)利用SN74181芯片构成16b ALU的原理,SN74181的结构很适合于将它们连成不同位数的ALU,每片SN74181芯片作为一个4b的小组,由于芯片给出了Cn+4、Pi*和Gi*,所以用该芯片既可构成组间串行进位的ALU,也可以构成组间并行的ALU。 组间串行进位的16b ALU的构成, 组间并行进位的16b ALU的构成,需增加一片

52、SN74182芯片。 SN74182与SN74181 配套的产品,是一个产生并行进位信号的部件。由于SN74181 提供了小组的进位传递函数Pi*和进位生成函数Gi*,SN74182可以利用它们作输入参数,以并行的方式给出每个小组(芯片)的最高位进位信号。SN74182在这里的用途是作为第2级并行进位系统。SN74182的逻辑框图如图2.21所示。,例:用SN74181和SN74182设计如下的32b ALU。 行波进位方式, 两重进位方式, 三重进位方式。 解:行波进位方式的32b ALU如图2.23所示。 两重进位方式的32b ALU如图2.24所示。 三重进位方式的32b ALU如图2.

53、25所示。,2.5.2 定点运算器,1.定点运算器的基本结构 各种计算机中的运算器的结构虽然有区别,但它都必须包含如下几个基本部分:加法器、通用寄存器、输入数据选择电路和输出数据控制电路等。 运算器的基本结构如图2.26所示。 其工作过程为:加法器输入选择电路将选择的总线(BUS)或寄存器组中的数据送往加法器进行运算处理, 再将加法器的运算结果送入输出数据控制电路处理,处理结果根据要求或送往BUS 或送往寄存器暂存。,运算器组成实例,(1)小型计算机的运算器 图2.27所示的是国产某小型机的运算器逻辑方框图,它是一个可以实现加、减、乘、除四则运算的并行定点运算器,其所执行的基本算术/逻辑运算有

54、:、求补、求反、传送、增1、加反,并可完成左移、右移、 B交换与结果判零等。,(2)位片式运算器,图2.28所示的是4b双极型位片式运算器AM2901的逻辑结构示意图,它将ALU、通用寄存器组、多路开关、移位器等逻辑构件集成在一个芯片内。 例如采用四片AM2901连接,可构成16b字长的定点运算器,如图2.29所示。,2.6 浮点运算方法和浮点运算器2.6.1 浮点算术运算,浮点加法和减法 设有两个浮点数x和y,它们分别为 x2mMx y2nMy 其中m和n分别为数x和y的阶码,Mx和My为数x和y的尾数。 完成浮点加法或减法运算,需要进行对阶、求和、规格化、舍入、判溢出等工作。,()对阶 要

55、对阶,首先应求出两数的阶码m和n之差,即 Emn 若0,则表示两数的阶码相等,即m=n;若0,则表示mn;若0,则表示mn。 当mn时,要通过尾数的移位以改变m或n,使之相等,在对阶时,总是使小阶向大阶看齐。 若mn,则将操作数y的尾数右移一位,y的阶码n加1,直到mn为止。 若mn,则将操作数x的尾数右移一位,x的阶码m加1,直到mn为止。,(2)尾数相加 使两个数的阶码相等后,就完成了小数点对准的工作,这时可以执行尾数相加操作。尾数相加与定点数的加、减法相同。 (3)结果规格化 结果规格化就是使运算结果成为规格化数。为了运算处理方便,可让尾数的符号位扩展为两位,当运算结果的尾数部分不是11.0或00.1的形式时,就可进行规格化处理。根据运算结果的不同,可能需要左规( 尾数左移成规格化数),也可能需要右规(尾数右移成规格化数)。,当尾数符号位0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论