2009年 7月 27日 8时 35分 1年 月 日 时 分
§ 2.2 定点加法、减法运算一、补码的加减法运算
1、加法任意两个数的补码之和,等于该两数和的补码。
[X+Y]补 = [X]补 +[Y]补 (mod 2)
两个数不管正负,均用补码表示,
符号位应当做数值参加运算,符号位相加所产生的进位要丢掉,结果为补码。
2009年 7月 27日 8时 35分 2年 月 日 时 分可以证明:
[X+Y]补 = [X]补 +[Y]补
[X-Y]补 = [X]补 +[-Y]补
[-Y]补 的求法:将 [Y]补 连同符号位求反加 1。
例,X= 1001 Y= 0101,求 X+Y=?
解,[X]补 =01001
[Y]补 =00101
[X+Y]补 =[X]补 +[Y]补 =01001+00101 =01110 x+y=1110
例,X= 1001 Y= -0101,求 X+Y=?
解,[X]补 =01001
[Y]补 =11011
[X+Y]补 =[X]补 +[Y]补 =01001+11011 =00110 x+y=
即,[-y]补 =¬ [y]补 + 2-n 其中,2-n表示末位加 1
2009年 7月 27日 8时 35分 3年 月 日 时 分定点运算器 —— 定点加减法
例,X= 0.1011 Y= -0.0101,求 X+Y=?
解,
[X]补 =0,1 0 1 1
[Y]补 =1,1 0 1 1+
011010.
丢到
1
[X]补 +[Y]补 =0.0110
X+Y=0.0110
2009年 7月 27日 8时 35分 4年 月 日 时 分定点运算器 —— 定点加减法
例,X= -11001,Y= -00011,求 X+Y=?
解,
[X]补 =1 0 0 1 1 1
[Y]补 =1 1 1 1 0 1+
00101 1
丢到
[X]补 +[Y]补 =100100
X+Y=-11100
0
由以上两例看到,补码加法的特点,
一是符号位要作为数的一部分一起参加运算。
二是要在模 2的意义下相加,即超过
2的进位要丢掉 !
2009年 7月 27日 8时 35分 5年 月 日 时 分定点运算器 —— 定点加减法
补码的减法:
[X]补 - [Y]补 =[X+( -Y) ]补 =[X]补 +[-Y]补
( -Y)的补码称为 [Y]补 的机器负数,由 [Y]补求 [-Y]补 的过程称为将 [Y]补,变补,或对 [Y]补 求补,由 [Y]补 求 [-Y]补 的方法是,不管 Y的真值为正或为负,都是将 [Y]补 的各位连同符号位在内全变反后,最低位加 1。
即,[-y]补 =¬ [y]补 + 2-n 其中,2-n表示末位加 1
2009年 7月 27日 8时 35分 6年 月 日 时 分定点运算器 —— 定点加减法
例,X= -0.1011 Y= -0.0110,求 X- Y=?
解,
[X]补 =1,0 1 0 1
[-Y]补 =0,0 1 1 0+
11011.
[X- Y]补 = 1.1011
X- Y=-0.0101
2009年 7月 27日 8时 35分 7年 月 日 时 分二、溢出及其判别方法:
在计算机中,由于机器码的尾数通常是给定的(如 16位字长,32位字长),
因此,在计算机中数的表示范围是有限的,若两数进行加减运算的结果超出了给定的取值范围,就称为 溢出 。一旦出现溢出,必须及时处理,否则会出现错误。
2009年 7月 27日 8时 35分 8年 月 日 时 分
1、溢出例 1,X=1010 Y=1001 求 X+Y
解,[X]补 = 0 1 0 1 0
+ [Y]补 = 0 1 0 0 1
1 0 0 1 1
例 2,X=-1010 Y=-1011 求 X+Y
解,[X]补 = 1 0 1 1 0
+ [Y]补 = 1 0 1 0 1
0 1 0 1 1
较大正数相加产生进位,影响符号位较大的负数对应较小的正数补码相加无进位,
符号位自己相加
2009年 7月 27日 8时 35分 9年 月 日 时 分
2、溢出原因:
1)两个正数太大,产生进位而改变了符号位;
2)两个负数绝对值太大,对应的补码太小,不能向符号位产生进位,使符号位相加后,向前产生进位。
1,两异号数相加或两同号数相减是否会产生溢出?
2、仅当两同号数相加或两异号数相减时才有可能产生溢出?
问题:
决不会产生溢出正确
2009年 7月 27日 8时 35分 10年 月 日 时 分
例,X= -0.100 Y= -0.101,求 X+Y=?
解,
[X]补 =1,1 0 0
[Y]补 =1,0 1 1+
11110.
丢到
1
两负数相加,结果应为负数,但运算结果为正数,表明有溢出发生 。 数据向前无进位,符号位向前有进位
3、溢出的判断
1) 采用 单符号位 的判断方法
2009年 7月 27日 8时 35分 11年 月 日 时 分
例,X= 100,Y= -110,求 X-Y=?
解,[X]补 =0 1 0 0
[-Y]补 =0 1 1 0+
011
一个正数减去一个负数,结果为正数,但计算结果为负数,表明有溢出发生,出错数据向前有进位,符号位向前无进位
0
溢出逻辑表达式为,V=Cf⊕ C0
(其中 Cf为符号位产生的进位,C0为最高有效位产生的进位)
2009年 7月 27日 8时 35分 12年 月 日 时 分
溢出的原因:
之所以发生错误,是因为运算结果产生了溢出。两个正数相加,结果大于机器所能表示的最大正数,称为 上溢 。而两个负数相加,结果小于机器所能表示的最小负数,称为 下溢 。
为了判断,溢出,是否发生,可采用两种检测的方法。第一种方法是采用双符号位法,
这称为,变形补码,或,模 4补码,。从而可使模 2补码所能表示的数的范围扩大一倍。
2009年 7月 27日 8时 35分 13年 月 日 时 分定点运算器 —— 定点加减法
采用双符号位的判断方法每个操作数的补码符号用两个二进制数表示,
称为交形补码,用,00”表示正数,,11”表示负数,左边第一位叫第一符号位,右边第一位称为第二符号位,两个符号位同时参加运算,如果运算结果两符号位相同,则没有溢出发生。如果运算结果两符号位不同,则表明产生了溢出。,10”
表示负溢出(下溢出),说明运算结果为负数,
,01”表示正溢出(上溢出),说明运算结果为正数。
2009年 7月 27日 8时 35分 14年 月 日 时 分定点运算器 —— 定点加减法采用双符号位的判断方法高符号位 低符号位 结果
0 0 正
0 1 上溢
1 0 下溢
1 1 负
2009年 7月 27日 8时 35分 15年 月 日 时 分定点运算器 —— 定点加减法
利用进位值的判断方法两补码数进行加减运算时,若最高数值位产生向符号的进位而符号位不产生进位时,发生正溢出,若最高数值位无进位而符号位有进位时,发生负溢出 。
2009年 7月 27日 8时 35分 16年 月 日 时 分
例,X= +0.1100 Y= +0.1000,求 X+Y=?
解,
[X]补 =00,1100
[Y]补 =00,1000+
01.0100
正数太大了,向前有进位,而符号位向前无进位;两个符号位,01,表示溢出
2009年 7月 27日 8时 35分 17年 月 日 时 分
例,X= -0.1100 Y= -0.1000,求 X+Y=?
解,[X]补 =11,0100
[Y]补 =11,1000+
10.1100
负数绝对值太大了对应的补码小,向前无进位,而符号位向前有进位;
两个符号位,10,表示溢出溢出逻辑表达式为,V=Sf1⊕ Sf2
(其中 Sf1为最高符号位,Sf2为第二符号位)
2009年 7月 27日 8时 35分 18年 月 日 时 分
由此可以得出如下结论:
1,当以模 4补码运算,运算结果的二符号位相异时,
表示溢出;相同时,表示未溢出。
2,模 4补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号。
2009年 7月 27日 8时 35分 19年 月 日 时 分三、基本的加法 /减法器
1、一位全加器
FA
Ai Bi
CiCi+1
Si
向高位进位本位输出结果输入 输出
Ai Bi Ci Si Ci+1
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.2 一位全加器真值表两个输出端的逻辑表达式:
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ CiAi
2009年 7月 27日 8时 35分 20年 月 日 时 分
Si= Ai⊕ Bi⊕ Ci
Ci+ 1= AiBi+ BiCi+ CiAi
按此表达式组成的一位全加器示图:
Ci+1=(Ai ⊕ Bi)Ci AiBi
2009年 7月 27日 8时 35分 21年 月 日 时 分
n个 1位的全加器 (FA)可级联成一个 n位的行波进位加减器。
M为方式控制输入线,
当 M= 0时,作加法 (A+ B)运算;当 M= 1时,作减法 (A- B)
运算,在后一种情况下,A- B运算转化成 [A]补 + [- B]补 运算
,求补过程由 B+ 1来实现。
2009年 7月 27日 8时 35分 22年 月 日 时 分单符号位判溢出 双符号正溢出
0.1001 00.1001
+ 0.1100 00.1100
1.0101 01.0101
负溢出
1.0111 11.0111
+ 1.0011 + 11.0011
10.1010 10.1010
2009年 7月 27日 8时 35分 23年 月 日 时 分十进制加法器
N位数字的行波进位 BCD加法器
一位 BCD加法器单元的逻辑结构
2009年 7月 27日 8时 35分 24年 月 日 时 分
2009年 7月 27日 8时 35分 25年 月 日 时 分定点运算器 —— 定点乘法
定点原码一位乘法设被乘数 [X]原 =Xf.Xn-1Xn-2…… X1X0
乘 数 [Y]原 =Yf.Yn-1Yn-2… Y1Y0
乘 积 [Z]原 =Zf.Z2n-1Z2n-2…… Z1Z0
=(Xf⊕Y f)+ (0.Xn- 1… X1X0)(0.Yn- 1… Y1Y0)
运算原则:同号相乘为正,异号相乘为负,
符号可按:异或运算得到,数值部分的运算方法与普通的十进制乘数相类似 。
2009年 7月 27日 8时 35分 26年 月 日 时 分定点运算器 —— 定点乘法
手工算法
0,1 1 0 1
0,1 0 1 1×
1 1 0 1
1 1 0 1
0 0 0 0
1 1 0 1+
1 0 0 0 1 1 1 10.
l 两个 n位数相乘,其积为 2n位,
则需要 2n位长的加法器,这不适用于定点机的形式。
l 机器一次只能进行两个数的相加,不能进行多个数据的加法。
l 手工计算中,乘数的每一位是 0
还是 1都可直接看见,而在计算机中,采用放乘数的寄存器的每一位直接决定本次相加数是被乘数还是 0是很不方便的,若采用该寄存器的最低一位来执行这种判断就简便了。
2009年 7月 27日 8时 35分 27年 月 日 时 分定点运算器 —— 定点乘法
运算法则,
计算机中执行乘法时,积的符号位由被乘数和乘数的符号位通过一个半加器实现。
数值部分的运算规则是:从最低位 Y0开始,
当乘数 Yi为 1时,将上次部分积加上被乘数的绝对值,然后右移一位,得到新的部分积;当 Yi为
0时,则写下全 0。然后再对乘数 Y的高一位进行类似乘法运算。重复,加 — 右移,操作 N次,可得到最后的乘积。
2009年 7月 27日 8时 35分 28年 月 日 时 分定点运算器 —— 定点乘法
例,X=0.1101,Y=0.1011,求 X*Y=?
解,|X|=00.1101 |Y|=00.1011
部分积 乘数 说明0 0,0 0 0 0
0 0,1 1 0 1+ Yf 1 0 1 1
0 0,1 1 0 10 0,0 1 1 0
0 0,1 1 0 1
→+
0 1,0 0 1 10 0,1 0 0 1
0 0,0 0 0 0+
0 0,1 0 0 10 0,0 1 0 0
0 0,1 1 0 1
0 1,0 0 0 10 0,1 0 0 0

→+

1 Yf 1 0 1
1 1 Yf 1 0
1 1 1 Yf 1
1 1 1 1 Yf
Z0=0Y
0=1,+X
Y1=1,+X
Y2=0,+0
Y3=1,+X
右移,得 Z1
右移,得 Z2
右移,得 Z3
右移,得 Z4=X*Y
2009年 7月 27日 8时 35分 29年 月 日 时 分定点运算器 —— 定点乘法
结果:
计算,X=-0.1101 Y=0.0110,用原码阵列乘法器求 X*Y?
X*Y=0.10001111
X*Y=1,01001110
2009年 7月 27日 8时 35分 30年 月 日 时 分原码并行乘法
不带符号的阵列乘法器 P38
2009年 7月 27日 8时 35分 31年 月 日 时 分设有两个不带符号的二进制整数:
A= am- 1…a1a0
B= bn- 1…b1b0
它们的数值分别为 a和 b,即在二进制乘法中,被乘数 A与乘数 B相乘,产生 m+ n位乘积 P:
P= pm+ n- 1…p1p0
乘积 P 的数值为
m- 1 n- 1
a = ∑ai2i b = ∑bj2j
i= 0 j= 0
2009年 7月 27日 8时 35分 32年 月 日 时 分实现这个乘法过程所需要的操作和人们的习惯方法非常类似:
2009年 7月 27日 8时 35分 33年 月 日 时 分
2009年 7月 27日 8时 35分 34年 月 日 时 分原码并行乘法
带符号的阵列乘法器 P40
( 1)对 2求补电路
2009年 7月 27日 8时 35分 35年 月 日 时 分
(2) 带符号的阵列乘法器
2009年 7月 27日 8时 35分 36年 月 日 时 分设 A=anan-1…a1a0和 B=bnbn-1…b1b0均为用定点表示的 (n+ 1)
位带符号整数。在必要的求补操作以后,A和 B的码值输送给 n× n位不带符号的阵列乘法器,并由此产生 2n位真值乘积,
A·B= P= p2n- 1… p1p0
p2n= an⊕ bn
其中 P2n为符号位。
原码乘法:算前、算后求补器 不做 求补操作。
补码乘法:算前、算后求补器 做 求补操作例 17 P41
例 18 P42
2009年 7月 27日 8时 35分 37年 月 日 时 分直接补码并行乘法
补码与真值的转换公式
[N]补 = an- 1an- 2…a1a0 其中 an- 1为符号位,则补码数 [N]补 和真值 N的关系可以表示成:
n- 2+ ∑a
i2i 当 an- 1 = 0([N]补 为正 )时i= 0
n- 2- [1+ ∑(1- a
i)2i] 当 an- 1 = 1([N]补 为负 )时i= 0
可化为,n- 2
N = - an- 12n- 1+ ∑ai2i
i=0
N=
(2.29)
2009年 7月 27日 8时 35分 38年 月 日 时 分补码与真值的转换公式又 [-N]补 = an-1an-2…a1a0+1,其中,ai=1-ai
所以 [-N]补 可以表示为:
n- 2
- N = - (1-an- 1)2n- 1+ ∑(1-ai)2i +1
i= 0
(2.30)
[例 19] 已知,[N]补 = 01101,[- N]补 = 10011,求 [N]补,[- N]补 具有的数值。
2009年 7月 27日 8时 35分 39年 月 日 时 分类型 逻辑符号 操作
0类加法器
X
Y
+ ) Z
CS
1类加法器
X
Y
+ )- Z
C(- S)
2类加法器
- X
- Y
+ ) Z
(- C)S
3类加法器
- X
- Y
+ ) - Z
(- C)(- S)
2009年 7月 27日 8时 35分 40年 月 日 时 分
对 0类,3类全加器而言有:
S= XYZ+ XYZ+ XYZ+ XYZ
C= XY+ YZ+ ZX
对 1类,2类全加器,则有
S= XYZ+ XYZ+ XYZ+ XYZ
C= XY+ XZ+ YZ
2009年 7月 27日 8时 35分 41年 月 日 时 分直接补码阵列乘法器
利用混合型的全加器就可以构成直接补码数阵列乘法器。设被乘数 A和乘数 B是两个 5位的二进制补码数,即其
A= (a4)a3a2a1a0
B= (b4)a3a2a1a0
它们具有带负权的符号位 a4和 b4,并用括号标注。
2009年 7月 27日 8时 35分 42年 月 日 时 分直接补码阵列乘法器
(a4) a3 a2 a1 a0 = A
× ) (b4) b3 b2 b1 b0 = B
(a4b0) a3b0 a1b0 a1b0 a0b0
(a4b1) a3b1 a2b1 a1b1 a0b1
(a4b2) a3b2 a2b2 a1b2 a0b2
(a4b3) a3b3 a2b3 a1b3 a0b3
+ ) a4b4 (a3b4) (a2b4) (a1b4) (a0b4)
p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 = P
2009年 7月 27日 8时 35分 43年 月 日 时 分
2009年 7月 27日 8时 35分 44年 月 日 时 分定点运算器 —— 定点除法
定点 原码 一位除法在定点计算机中,完成两个原码表示的数相除时,
商的符号由两数的符号位和原码乘法运算方法一样,
用模 2求和得到,而商的数值部分则是两个正数相除得到 。
设被除数 [X]原 =Xf.X1X2… Xn
除 数 [Y]原 =Yf.Y1Y2… Yn
则商 [Q]原 =( Xf + Yf),( X1X2… Xn/Y1Y2… Yn)
2009年 7月 27日 8时 35分 45年 月 日 时 分定点运算器 —— 定点除法计算机中执行除法时,商的符号位由被除数和除数的符号位通过一个半加器实现;
对于数值部分,由于定点小数的绝对值小于 1,
如果被除数大于或等于除数,则商就大于或等于 1,
因而会产生溢出,这是不允许的。
因此在执行除法以前,先要判别是否溢出,不溢出时才执行除法运算。判别溢出的方法是被除数减去除数,若差为正,就表示溢出。
2009年 7月 27日 8时 35分 46年 月 日 时 分定点运算器 —— 定点除法
手工计算除法的方法:
设被除数为 X=0.1001,Y=0.1011,求 X/Y=?
2009年 7月 27日 8时 35分 47年 月 日 时 分定点运算器 —— 定点除法
0.1 1 0 1
1101 1 0 1 1 0
1 1 0 1
1 0 0 1 0
1 1 0 1
1 0 1 0 0
1 1 0 1
0 1 1 1
X/Y=0.1101
余数 =0.0111*2-4
2009年 7月 27日 8时 35分 48年 月 日 时 分恢复余数法
恢复余数法的运算规则,
计算机中进行除法时,是模仿十进制除法笔算的过程,但又不能完全照搬 。
在机器中判断是否够减,必须先做减法,若余数为正,表示够减;若余数为负,表示不够减,不够减时,必须恢复原来的余数,以便再继续往下运算,这种方法称为 恢复余数法 。
要恢复原来的余数,只要当前的余数加上除数即可 。
2009年 7月 27日 8时 35分 49年 月 日 时 分定点运算器 — 定点除法
例,X=0.1001,Y=0.1011,用恢复余数法求 X/Y=?
解,[X]原 =[X]补 =0.1001
[Y]补 =0.1011
[-Y]补 =1.0101
2009年 7月 27日 8时 35分 50年 月 日 时 分
解,被除数 /余数 商数 q 说明商 0移入 q,r0’ 左移商 1移入 q,r1 左移商 1移入 q,r2左移商 0移入 q,r3’ 左移
0 0,1 0 0 1
1 1,0 1 0 1
1 1,1 1 1 0
0 0,1 0 1 1
0 0,1 0 0 1
0 0,0 1 1 1
0 1,0 0 1 0
1 1,0 1 0 1
0 0,1 1 1 0
1 1,0 1 0 1
0 0,0 0 1 1
0 0,0 1 1 0
1 1,0 1 0 1
1 1,1 0 1 1
0 0,1 0 1 1
0 0,0 1 1 0
0 0,1 1 0 0
1 1,0 1 0 1
0 0,0 0 0 1
0 0,0 0 0 1
+[-Y]补
+[Y]补
+[-Y]补
+[-Y]补
+[-Y]补
+[Y]补
+[-Y]补




0
0.1
0.11
0.110
0.1101
X减 Y
余数 r0<0,商,0”
恢复余数
r0’
减 Y
余数 r1>0,商,1”
减 Y
余数 r4>0,商,1”
减 Y
余数 r3<0,商,0”
恢复余数
r3’=2r2
减 Y
商 1移入 q,r4不左移余数 r2> 0,商,1”
2009年 7月 27日 8时 35分 51年 月 日 时 分定点运算器 — 定点除法
[Q]原 =0.1101
[R]原 =0.0001,R=2-4*0.0001
结果,
2009年 7月 27日 8时 35分 52年 月 日 时 分定点运算器 — 定点除法
恢复余数法的缺点,
当某一次 -Y的差值为负时,要多一次
+Y恢复余数的操作,降低了执行速度,又使控制线路变得复杂,因此在计算机中很少采用。
2009年 7月 27日 8时 35分 53年 月 日 时 分定点运算器 — 定点除法
在恢复余数除法中,若第 i-1次求商的余数为 +Ri-1时,
下一次求商用的方法是
Ri=2Ri-1-Y
当 Ri< 0时,第 i位的商上 0,而恢复余数的操作结果应为 Ri+Y,下一次,即第 i+1次求商的减法操作是
Ri+1=2( Ri +Y) -Y=2 Ri +Y
上述公式表明,当某一次求商,其减得的差值为负,
即 Ri < 0时,本次上商为 0,继续求下一位商时,可以不必恢复余数,而是直接将负的差值左移一位后(得 2
Ri ),再采用加上除数的方法来完成。
2009年 7月 27日 8时 35分 54年 月 日 时 分定点运算器 — 定点除法加减交替法的规则:
首先作 X-Y,余数为正,表明产生溢出,应终止除法运算;余数为负,上商为 0(作为商的符号位),然后重复下述操作 n次,可得商的 n位数值
a,余数左移一位。
b,余数为正时,减除数;余数为负时,加除数。
c,所得的新余数为正时,上商为 1;为负时,上商为 0。
由于运算中余数共左移了 n次,相当于乘 2n,故最后得余数应乘上 2-n才是真正的正确余数。
2009年 7月 27日 8时 35分 55年 月 日 时 分定点运算器 — 定点除法
例,X=0.1001,Y=0.1011,求 X/Y
解,
[X]补 =0.1001
[Y]补 =0.1011
[-Y]补 =1.0101
2009年 7月 27日 8时 35分 56年 月 日 时 分
解,[X]原 =[X]补 =X=0.1001,[Y]补 =0.1011,[-Y]补 =1.0101
被除数 X/余数 r 商数 q 说明
+[-Y]补
0 0,1 0 0 11 1,0 1 0 1
1 1,1 1 1 01 1,1 1 0 0
0 0,1 0 1 1
0 0,0 1 1 10 0,1 1 1 0
1 1,0 1 0 1
0 0,0 0 1 10 0,0 1 1 0
1 1,0 1 0 1
1 1,1 0 1 11 1,0 1 1 0
0 0,1 0 1 1
0 0,0 0 0 1
+[-Y]补
+[Y]补
+[-Y]补
+[Y]补




0
0.1
0.11
0.110
0.1101
X减 Y
余数 r0为负余数 r1为正余数 r2为正余数 r3为负余数 r4为正商 0,r和 q左移一位商 1,r和 q左移一位商 1,r和 q左移一位商 0,r和 q左移一位加 Y
减 Y
减 Y
加 Y
商 1,仅 q左移一位
2009年 7月 27日 8时 35分 57年 月 日 时 分
Q=0.1101
R=2-4*0.0001
结果,
2009年 7月 27日 8时 35分 58年 月 日 时 分并行除法器
1.可控加法 /减法 (CAS)单元可控加法 /减法 (CAS)单元,它将用于并行除法流水逻辑阵列中,它有四个输出端和四个输入端。
当输入线 P= 0时,CAS作加法运算;当 P= 1
时,CAS作减法运算
2009年 7月 27日 8时 35分 59年 月 日 时 分可控加法 /减法 (CAS)单元
CAS单元的输入与输出的关系
Si= Ai⊕ (Bi⊕ P)⊕ Ci
Ci+ 1= (Ai+ Ci)·(Bi⊕ P)+ AiCi
2009年 7月 27日 8时 35分 60年 月 日 时 分
2009年 7月 27日 8时 35分 61年 月 日 时 分
2009年 7月 27日 8时 35分 62年 月 日 时 分不恢复余数的阵列除法器被除数 x = 0.x 1x 2x 3x 4x 5x 6 (双倍长 )
除数 y = 0.y 1y 2y 3
商数 q = 0.q1q2q3
余数 r = 0.00r3r4r5r6
字长 n+ 1= 4
2009年 7月 27日 8时 35分 63年 月 日 时 分
例 20 x = 0.101001,y = 0.111,求 x ÷ y 。
解,[-y ]补 = 1.001
被除数 x 0.1 0 1 0 0 1
+[- y] 1.0 0 1
余数为负 1.1 1 0 0 0 1 < 0 q0= 0
+[ y]补 - -> 0.0 1 1 1
余数为正 0.0 0 1 1 0 1 > 0 q1= 1
+[- y]补 - -> 1.1 1 0 0 1
余数为负 1.1 1 1 1 1 1 < 0 q2= 0
+[ y]补 - -> 0.0 0 0 1 1 1
余数为正 0.0 0 0 1 1 0 > 0 q3= 1
故得商 q= q0.q1q2q3= 0.101
余数 r= (0.00r3r4r5r6)= 0.000110
2009年 7月 27日 8时 35分 64年 月 日 时 分
2.5.1 逻辑运算计算机中除了进行加、减、乘、除等基本算术运算外,还可对两个或一个逻辑数进行逻辑运算。
所谓逻辑数,是指不带符号的二进制数。利用逻辑运算可以进行两个数的比较,或者从某个数中选取某几位等操作。
计算机中的逻辑运算,主要是指 逻辑非,逻辑加,逻辑乘,逻辑异 四种基本运算。
2009年 7月 27日 8时 35分 65年 月 日 时 分
1.逻辑非运算 逻辑非也称 求反 。如:
x 1= 01001011,x 2= 11110000,求 x 1,x 2。
x 1= 10110100
x 2= 00001111
2.逻辑加运算 按位求它们的“或”
x= 10100001,y= 10011011,求x ∨ y。
1 0 1 0 0 0 0 1 x
∨ 1 0 0 1 1 0 1 1 y
1 0 1 1 1 0 1 1 z
3.逻辑乘运算 按位求它们的“与”
x= 10111001,y= 11110011,求x ∧ y。
1 0 1 1 1 0 0 1 x
∧ 1 1 1 1 0 0 1 1 y
1 0 1 1 0 0 0 1 z
2009年 7月 27日 8时 35分 66年 月 日 时 分
4.逻辑异运算 按位求它们的模 2和
x = 10101011,y = 11001100,求 x ⊕ y 。
[解,]
1 0 1 0 1 0 1 1 x
⊕ 1 1 0 0 1 1 0 0 y
0 1 1 0 0 1 1 1 z
即 x ⊕ y = 01100111
2009年 7月 27日 8时 35分 67年 月 日 时 分定点运算器的组成
运算器主要由算术逻辑部件,通用寄存器和状态寄存器组成。
算术逻辑部件 ALU( Arithmetic and Logic Unit),
主要完成对二进制信息的定点运算,如:加、减、乘、除、
与、或、非、异或、逻辑移位、算术移位等。
通用寄存器,主要用来保存参加运算的操作数和运算的结果。
状态寄存器,用来记录算术、逻辑运算或测试操作的状态结果。一般有零标志位,负标志位,溢出标志位、进位或借位标志位等。
2009年 7月 27日 8时 35分 68年 月 日 时 分定点运算器的组成 —— 多功能算术 /逻辑运算单元
基本思想一位全加器( FA)的逻辑表达式为:
Fi=Ai⊕ Bi⊕ Ci
Ci+1=AiBi+BiCi+CiAi
为了将全加器的功能进行扩展以完成多种算术逻辑运算,先不将输入 Ai和 Bi和下一位的进位 Ci直接进行全加,
而是将 Ai和 Bi先组合由 S0,S1,S2,S3控制的组合函数 Xi
和 Yi,然后再将 Xi,Yi和下一位进位数通过全加器进行全加,这样,不同的控制参数可以得到不同的组合函数,
以能够实现多种算术运算和逻辑运算。
2009年 7月 27日 8时 35分 69年 月 日 时 分定点运算器的组成 —— 多功能算术 /逻辑运算单元
S1
全加器函数发生器
Fi
C n+i+1 C
n+i
Xi Yi
Ai Bi
S0
S2
S3
S0 S1 Yi S2 S3 Xi
0 0 Ai 0 0 1
0 1 AiBi 0 1 Ai+Bi
1 0 AiBi 1 0 Ai+Bi
1 1 0 1 1 Ai
Xi,Yi与控制参数和输入量的关系
2009年 7月 27日 8时 35分 70年 月 日 时 分定点运算器的组成 —— 多功能算术 /逻辑运算单元
ALU的某一位逻辑表达式如下:
Xi=S3AiBi+S2AiBi
Yi=Ai+S0Bi+S1Bi
Fi=Yi+Xi+Cn+i
Cn+i+1=Yi+XiCn+i
ALU四位之间采用先行进位
2009年 7月 27日 8时 35分 71年 月 日 时 分定点运算器的组成 —— 多功能算术 /逻辑运算单元
每一位的进位公式可递推如下:
C n+1=Y0+X0Cn
C n+2=Y1+X1Cn+1= Y1+ Y0X1+X0X1Cn
C n+3=Y2+X2Cn+2 =Y2 +X2 Y1+ Y0X1 X2 +X0X1 X2 Cn
C n+4=Y3+X3Cn+3
=Y3+X3 Y2 +X2 X3 Y1+ Y0X1 X2 X3 +X0X1 X2 X3 Cn
2009年 7月 27日 8时 35分 72年 月 日 时 分定点运算器的组成 —— 多功能算术 /逻辑运算单元
设,
该式表明,第 0位的进位输入可以直接传送到最高进位位上去,因而可以实现高速运算。
G= Y3+X3 Y2 +X2 X3 Y1+ Y0X1 X2 X3
P= X0X1 X2 X3
则:
C n+4=G+PCn
其中,G称为进位发生输出
P称为进位传送输出
用负逻辑表示的 4位算术 /逻辑运算单元 (ALU)的逻辑电路图如下,它是根据上面的原始推导公式用 TTL电路实现的。这个期间的商业标号为 74181ALU。
2009年 7月 27日 8时 35分 74年 月 日 时 分
2009年 7月 27日 8时 35分 75年 月 日 时 分两级先行进位
如何实现 16位 ALU?
片间串行进位,片内先行进位如何改进??
2009年 7月 27日 8时 35分 76年 月 日 时 分两级先行进位
74181ALU设置了 P和 G两个本组先行进位输出端。
如果将四片 74181的 P,G输出端送入到 74182先行进位部件( CLA),又可实现第二级的先行进位,
即组与组之间的先行进位。
2009年 7月 27日 8时 35分 77年 月 日 时 分先行进位部件 74182CLA所提供的进位逻辑关系如下:
Cn+ x = G0+ P0Cn
Cn+ y = G1+ P1Cn+ x = G1+ G0P1+ P0P1Cn
Cn+ z = G2+ P2Cn+ y = G2+ G1P2+ G0P1P2+ P0P1P2Cn
Cn+ 4 = G3+ P3Cn+ z = G3+ G2P3+ G1P1P2+ G0P1P2P3+ P0P1P2P3Cn
= G*+ P*Cn
其中
P*= P0P1P2P3
G*= G3+ G2P3+ G1P1P2+ G0P1P2P3
其中 G*称为 成组进位发生输出,P*称为 成组进位传送输出 。
2009年 7月 27日 8时 35分 78年 月 日 时 分
2009年 7月 27日 8时 35分 79年 月 日 时 分
并行进位 74182
2009年 7月 27日 8时 35分 80年 月 日 时 分
74181 74181 74181 74181
74182
C0
C4C8C12
C16
74181 ------ 4片
74182 ------ 1片
16位二级并行进位 ALU
2009年 7月 27日 8时 35分 81年 月 日 时 分
32位 ALU
2009年 7月 27日 8时 35分 82年 月 日 时 分
64位 3级先行进位 ALU
74181-----16片 74182---------5片
C0
181 181
74182 74182
74182
C64
2009年 7月 27日 8时 35分 83年 月 日 时 分定点运算器的 基本结构
运算器包括 ALU、阵列乘除器、寄存器、
多路开关、三态缓冲器、数据总线等逻辑部件。
计算机的运算器的结构一般有三种。
2009年 7月 27日 8时 35分 84年 月 日 时 分定点运算器的基本结构
A B
ALU
通 用寄存器特 殊寄存器
单总线结构的运算器 输入数据和操作结构需要三次串行的选通操作,但它并不会对每种指令都增加很多执行时间。
由于只控制一条总线,所以控制电路比较简单。
通 用寄存器特 殊寄存器特 殊寄存器
ALU 缓冲器总线 1
总线 2
两个操作数同时加到 ALU进行运算,只需要一次操作控制,而且马上得到运算结果。
ALU的输出不能直接加到总线上去,
这是因为,当形成操作结构的输出时,
两条总线都被输入数据占据,因而必须在 ALU的输出端设置缓冲器。
双总线结构的运算器定点运算器的基本结构
2009年 7月 27日 8时 35分 86年 月 日 时 分定点运算器的基本结构通 用寄存器
ALU 特 殊寄存器总 线旁路器总线 1
总线 2
总线 3
ALU的两个输入端分别由总线提供,而 ALU的输出则与第三条总线相连。这样,算术逻辑操作就可以在一步的控制之内完成。
设置一个总线旁路器,如果一个操作数不需要修改,而直接从总线 2传送到总线 3,那么可以通过控制总线旁路器把数据传出。
2009年 7月 27日 8时 35分 87年 月 日 时 分
2.6 浮点运算器 —— 浮点运算方法
浮点数的加法、减法运算设有两个浮点数的分别为 X=Mx*2Ex,Y=My*2Ey,实现浮点加减法算的基本步骤分为四步完成:
⑴ 0操作数检查,用来判断两个操作数中是否有一个为 0.
⑵ 对阶操作,即比较两个浮点数的阶码值的大小,求 E=Ex-Ey,
然后将小阶对大阶。
⑶ 尾数进行加或减运算,实现尾数的加减运算,执行两个完成对阶后的浮点数的求和(差)的过程
⑷ 规格化,若得到的结果不满足规格化规则,就必须把它变成规格化的数。
(5)舍入处理,在执行对阶或右规操作时,会使位数低位上的一位或若干位的数值被移掉,使数值精度受到影响,可以把移掉的几个高位的值保存起来供舍入使用 。
(6)溢出处理,阶码上溢、阶码下溢、尾数上溢、尾数下溢
2009年 7月 27日 8时 35分 88年 月 日 时 分浮点运算器 —— 浮点运算方法取指定位数舍入处理阶码减 1
尾数左移 1位尾数加法
(带符号)
小阶加 1
尾数右移 1位加法 减法
Y变符号
X=0?
Y=0?
z← y z← x z← 另一数 z← 0 报告上溢 报告下溢阶码相同?
尾数 =0? 尾数 =0?
阶码加 1
尾数右移 1位阶码上溢 阶码下溢尾数上溢 已是 1.M
0操作检查 对阶操作 尾数加减 结果规格化结束是是是是 是 是 是是否 否否否否 否否否
2009年 7月 27日 8时 35分 89年 月 日 时 分浮点运算器 —— 浮点运算方法
例,设 X=2010*0.11011011,Y=2100*( -0.
10101100),求 X+Y。 (假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位,)
2009年 7月 27日 8时 35分 90年 月 日 时 分浮点运算器 —— 浮点运算方法解,浮点表示为,
[X]浮 = 00 010,0,11011011
[Y]浮 = 00 100,1,01010100
( 1 ) 对阶
E=Ex-Ey=00010+11100=11110即 △ E为 -2,X
的阶码小,应使 Mx右移两位,Ex加 2,得,
[X]浮 =00100,0.00110110(11)
2009年 7月 27日 8时 35分 91年 月 日 时 分浮点运算器 —— 浮点运算方法
+
(2).尾数求和
0.00110110(11)
1.01010100
1.10001010(11)
2009年 7月 27日 8时 35分 92年 月 日 时 分浮点运算器 —— 浮点运算方法
(3).规格化结果的符号位与最高符号数值位相同,应执行左规处理,所谓左规格化的规则,就是尾数左移 1位,阶码减 1,
所以结果为 1.00010101(10),阶码为 00 011
(4)舍入处理采用 0舍 1入法处理,则有
1,0 0 0 1 0 1 0 1
+ 1
1,0 0 0 1 0 1 1 0
2009年 7月 27日 8时 35分 93年 月 日 时 分浮点运算器 —— 浮点运算方法
(5).判溢出阶码的符号位为 00,不溢出 。 所以最终的结果为
X+Y=2011*( -0.11101010)
2009年 7月 27日 8时 35分 94年 月 日 时 分浮点运算器 —— 浮点运算方法
例,设 X=2001*( -0.111),Y=2010*0,101,
求 X-Y.(假设两数均以补码表示,阶码采用
3位,尾数采用 4位,均包括符号位,)
2009年 7月 27日 8时 35分 95年 月 日 时 分浮点运算器 —— 浮点运算方法解,浮点表示为,
[X]浮 =001,1,001
[Y]浮 =010,0,101
( 1 ) 对阶
[△ E]补 =[Ex]补 -[Ey]补 =001+110=111
即 △ E为 -1,X的阶码小,应使 Mx右移 1位,Ex
加 1,得,
[X]浮 =010,1.100( 1)
2009年 7月 27日 8时 35分 96年 月 日 时 分浮点运算器 —— 浮点运算方法
+
(2).尾数求差,[-Y]补 =1.011
1 1,1 0 0 ( 1)
1 1,0 1 1
1 0,1 1 1 (1)
丢失
1
符号位为 10,说明产生了下溢但是在浮点数的运算中,只有当阶码产生溢出时,
才是溢出。此时只是说明尾数的结果为不规格化数,应进行右规。(建议采用变形补码运算)
2009年 7月 27日 8时 35分 97年 月 日 时 分浮点运算器 —— 浮点运算方法
(3).规格化由于结果产生了溢出,应执行右规处理,所谓右规格化的规则,就是尾数右移 1位,阶码加 1,所以结果为
1.011(1),阶码为 011
(4)舍入处理采用恒舍法处理,则有尾数为 1.011
2009年 7月 27日 8时 35分 98年 月 日 时 分浮点运算器 —— 浮点运算方法
(5).判溢出阶码不溢出 。 所以最终的结果为
X+Y=2011*( -0.101)
2009年 7月 27日 8时 35分 99年 月 日 时 分浮点运算器 —— 浮点运算法
浮点数的乘除法:
设有两个浮点数的分别为 X=Mx*2Ex,Y=My*2Ey,
则浮点数乘法运算规则:
X*Y=2( EX+EY) *( MX*MY)
设有两个浮点数的分别为 X=Mx*2Ex,Y=My*2Ey,
则浮点除法运算规则:
X/Y=2( EX-EY) *( MX÷ MY)
2009年 7月 27日 8时 35分 100年 月 日 时 分浮点运算器 —— 浮点运算法
浮点乘、除法的运算步骤:
1) 0操作数检查,若是除法操作还应当做尾数调整,使 |mx|<|my|
2) 阶码做加 /减操作
3) 尾数做乘 /除操作
4) 结果规格化及舍入处理
2009年 7月 27日 8时 35分 101年 月 日 时 分浮点运算器 —— 浮点运算法
1,浮点数的阶码运算阶码通常用补码和移码形式表示。对于移码来说:
[X+Y]移 =[X]移 +[Y]补
[X-Y]移 =[X]移 +[-Y]补双符号位移码:正数,01 上溢,10
负数,00 下溢,11
在用双符号位移码进行计算时,判断溢出的条件是当结果的最高符号位为 1时,则产生了溢出。
2009年 7月 27日 8时 35分 102年 月 日 时 分浮点运算器 —— 浮点运算方法
例 26,x=+011,y=+110,求 [x+y]移 和 [x-
y]移,并判断是否溢出。
2009年 7月 27日 8时 35分 103年 月 日 时 分浮点运算器 —— 浮点运算法
2,浮点数的尾数处理第一种方法:无条件地丢掉正常尾数最低位之后的全部数值,这种方法称为截断处理。
第二种方法:运算过程中保留右移中移出的若干高位的值,最后按某种规则用这些位上的值修正尾数,这种处理称为舍入处理。
2009年 7月 27日 8时 35分 104年 月 日 时 分舍入处理:
原码:
– 0舍 1入法:
– 置 1法:
补码
00…0,不舍入
100..0或 0xxxx( xxxx不全为 0),舍弃
1xxxx( xxxx不全为 0 ),尾数最低位+ 1
2009年 7月 27日 8时 35分 105年 月 日 时 分
例 27:设 [x1]补 =11.01100000
[x1]补 =11.01100001
[x1]补 =11.01101000
[x1]补 =11.01111001
求:执行只保留小数点后 4位有效数字的舍入操作值。
2009年 7月 27日 8时 35分 106年 月 日 时 分
例 28:设有浮点数 x=2-5× 0.0110011,
y=23× (-0.1110010),阶码用 4位移码表示,
尾数(含符号位)用 8位补码表示,求
[x× y]浮 。要求用补码完成尾数乘法运算,
运算结果尾数保留高 8位(含符号位),
并用尾数低位字长的值处理舍入操作。
2009年 7月 27日 8时 35分 107年 月 日 时 分浮点运算流水线流水线原理,假定作业 T 被分成 k 个子任务,
可表达为
T= {T1,T2,··,Tk}
2009年 7月 27日 8时 35分 108年 月 日 时 分时空图
2009年 7月 27日 8时 35分 109年 月 日 时 分
设过程段 Si所需的时间为 τ i,缓冲寄存器的延时为 τ l,线性流水线的时钟周期定义为
τ= max{τi}+ τl= τm+ τl
k 级过程段的流水线处理 n 个任务需要的时钟周期数为,Tk= k+ (n- 1)
如果用非流水线的硬件来处理这 n个任务,时间上只能串行进行,则所需时钟周期数为 TL= n·k
我们将 TL和 Tk的比值定义为 k级线性流水线的加速比,Ck= TL/ Tk=n*k/(k+(n-1))
当 n>>k 时,Ck- >k
2009年 7月 27日 8时 35分 110年 月 日 时 分
例 29:假设有一个 4级流水浮点 加法器每个过程段所需的时间为,0操作数检查 τ1= 70ns,对阶 τ2= 60ns,
相加 τ3= 90ns,规格化 τ4= 80ns,缓冲寄存器 L的延时为 tl= 10ns,( 1)求 4 级流水线加法器的加速比为多少? (2)如果每个过程段的时间相同,即都为
75ns,(包括缓冲寄存器时间 ),加速比是多少? (3)画出时空图。
2009年 7月 27日 8时 35分 111年 月 日 时 分
[解,]
(1)加法器的流水线时钟周期至少为
τ= 90ns+ 10ns= 100ns
如果采用同样的逻辑电路,但不是流水线方式,
则浮点加法所需的时间为
τ1+ τ2+ τ3+ τ4 = 300ns
因此,4级流水线加法器的加速比为
Ck= TL/ Tk=300*n/(400+(n-1)*100) =300/ τ
=300/100= 3 (n>>4)
(2) 当每个过程段的时间都是 75ns时,加速比为
Ck= 300/75= 4
2009年 7月 27日 8时 35分 112年 月 日 时 分作业题教材,