Download presentation
Presentation is loading. Please wait.
1
computer organization principle
计 算 机 组 成 原 理 computer organization principle 主讲教师 丁纪凯
2
第3章 数值的机器运算
3
第3章—数值的机器运算 本章要点 本章论述计算机中运算器的主要功能及其实现, 重点介绍定点数加、减法和乘、除法的运算方法与
实现电路以及浮点数运算方法和浮点数运算器的实 现。其中难点是乘、除法运算与实现。
4
第3章 数值的机器运算 3.1 逻辑运算 3.2 定点数的加、减法运算和加、减法电路的实现 3.3 定点数的乘、除法运算和乘、除法电路的实现
第3章 数值的机器运算 3.1 逻辑运算 3.2 定点数的加、减法运算和加、减法电路的实现 3.3 定点数的乘、除法运算和乘、除法电路的实现 3.4 定点运算器的基本结构与工作原理 3.5 浮点数运算和浮点数运算器的实现
5
3.1 逻辑运算 种生产过程的运行,能够处理许多繁琐的情报资料等等,也就是 它能替代人的部分脑力劳动,其关键在于它具有逻辑判断能力,
3.1 逻辑运算 电子计算机能够进行各种复杂的数学问题的运算,能够控制各 种生产过程的运行,能够处理许多繁琐的情报资料等等,也就是 它能替代人的部分脑力劳动,其关键在于它具有逻辑判断能力, 逻辑命题中,“0”与“1”就有了新的含义——逻辑含义,它表示 一种命题的两种相应的结果。若“1”表示“肯定”,则“0”就表示“否 定”。两值判据在计算机中很容易实现,可以用电平的“高”“低” ,信号的“有”“无”,晶体管的“通”“断”来表示逻辑命题的两种结 果“0”和“1”。
6
3.3.1. “与”、“或”和“非”运算 1.逻辑“与” 电灯F同开关A、B及电池串接电路如图所示。 逻辑与关系的真值表如下表:
3种最基本的逻辑运算,即“与”逻辑、“或”逻辑和“非”逻辑。 1.逻辑“与” 电灯F同开关A、B及电池串接电路如图所示。 逻辑与关系的真值表如下表:
7
“逻辑与”又称为“逻辑乘”,其逻辑表达式为:
F=A×B=A·B=A∧B 式中“×”、“·”和“∧”为逻辑与的符号,A、B称为逻辑变量,F 称为逻辑函数。 计算机进行两个n 位二进制数逻辑与运算时,对每对应位相与。
8
2. 逻辑“或” 电灯F同两个并联开关A、B相串联的电路如图所示。 逻辑或关系的真值表如下表:
9
3.逻辑“非” “逻辑或”又称“逻辑加”,其逻辑表达式为: F=A+B=A∨B 式中“+”和“∨”为逻辑或的符号。
计算机进行两个n 位二进制数逻辑或运算时,对每个对应位相或。 3.逻辑“非” 单刀双掷开关和A、B两个灯泡连接的电路图如图所示 。
10
逻辑非关系的真值表如下表。 B = A “逻辑非”关系,又称为“逻辑反”,其逻辑表达式为:
计算机对一个n 位二进制数逻辑非运算时,对每位取反。
11
3.3.2. “异或”运算 逻辑函数F=f(A,B),其真值表如下表所示:
由真值表可知,只有当A=‘0’,B=“1”(即A、B相异)或A=“1” 、B=“0”时,F才为“1”; F同A、B间的这种关系称为“异或”关系,其逻辑表达式: F=A⊕B=A∨B =A B+A B
12
3.3.2. 常用逻辑门符号 “ 异或”运算执行的是两个逻辑变量之间“不相等”的逻辑测试, 又称为“按位加”。
在电子计算机中,上述几种基本逻辑运算是由逻辑门电路来实 现的,在正逻辑门电路中,用高电平、低电平来表示“1”和“0”。 常见的逻辑门采用的符号表示有:
14
基本门电路的真值表
15
3.2.1 定点数的加减运算 3.2 定点数的加、减法运算和 加、减法电路的 实现 ◆ 二进制的运算规则
3.2 定点数的加、减法运算和 加、减法电路的 实现 定点数的加减运算 ◆ 二进制的运算规则 加法规则、减法规则 、乘法规则、除法规则 ◆ 补码表示法使同一个电路既可以用于无符号数相加,又可用 于有符号数相加; 利用补码运算能使减法转为加法,因此目前绝大多数计算机 都采用补码表示法来进行加减运算。
16
设:[X]补= Xs. X1X2···Xn-1Xn , [Y]补= Ys. Y1Y2···Yn-1Yn
1. 补码的加减运算规则 设:[X]补= Xs. X1X2···Xn-1Xn , [Y]补= Ys. Y1Y2···Yn-1Yn 为两个n+1位补码表示的二进制小数,Xs、Ys为两数的符号位, 在补码加减运算中同数据位一起参与运算 。 (1)补码的加法运算规则 [X+Y]补=[X]补+[Y]补 (X+Y 在n+1位补码表示的数值范围) 要分4种情况:X﹥0、 Y﹥0; X< 0、 Y<0;X﹥0、Y < 0; X< 0, Y ﹥ 0 ,证明该公式的正确性 例: 证明当 X< 0, Y<0 时,该公式的正确性。 证明: [X]补=M +X , [Y]补=M+Y , 则 [X]补+[Y]补= M+X+M+Y =M+(M+X+Y)= M+ [X+Y]补 =[X+Y]补
17
[x-y]补=[x]补-[y]补=[x]补+[-y]补 (X+Y 在n+1位补
例 x=1011, y=-1110, 求x+y。 解: [x]补=01011, [y]补=10010 [x]补 +[y]补 [x+y]补 所以 x+y= (2)补码的减法运算规则 [x-y]补=[x]补-[y]补=[x]补+[-y]补 (X+Y 在n+1位补 码表示的数值范围) 求[-y]补的法则是:对[y]补包括符号位“求反且最末位加1”,即 可得到[-y]补,将这种运算称为求补。则运算表达式为: [-y]补=[ [y]补]求补
18
例 x=+0.1101,y=+0.0110 , 求x-y。 解: [x]补=0.1101 , [y]补=0.0110,
例 x=+0.1101,y=+ , 求x-y。 解: [x]补= , [y]补=0.0110, [-y]补=1.1010 [x]补 + [-y]补 [x-y] 补 丢弃 所以 x-y=+0.0111
19
的表示范围,就会发生溢出,从而导至运算结果出错,因此在加 减运算后必须判别是否发生溢出。
2. 加减运算中溢出的判别 两个定点数经过加减运算后,其结果(和或差)超过了定点数 的表示范围,就会发生溢出,从而导至运算结果出错,因此在加 减运算后必须判别是否发生溢出。 例1 设 X=11D=1011B , Y=7D=111B ,用补码加法求X+Y。 [X]补=0 1011, [Y]补=0 0111 [X]补 [Y]补 [X+Y]补 ∴ [X+Y]补= , X+Y=-1110B=-14D 两正数相加结果为-14D,显然是错误的。 Y因为真值X+Y超过 -16— +15 的范围,产生了溢出 。
20
● 两个同符号数相加,若和数符号与原数符号不同,则表示
判别溢出的常用方法有三种: ⑴ 符号比较法 ● 两个同符号数相加,若和数符号与原数符号不同,则表示 发生溢出; ● 两个异符号数相减,若差数符号与减数符号相同,则亦表 示发生溢出。 ● 两异符号数相加或两同符号数相减是不会发生溢出的。 ● 溢出标志逻辑表达式: V = Xs Ys (X+Y)s +XsYs (X+Y)s + Xs Ys(X-Y)s + Xs Ys(X-Y)s
21
解:[X+Y]补=[X]补+[Y]补= 1.0011 + 1.0101
= (自动丢弃) = 因“和数”的符号位(“0”)与加数、被加数的符号位(“1”)相 异, 发生溢出。 例3-2:[X]补= , [Y]补= ,判断减法有否 溢出。 解: [-Y]补=[ [Y]补]求补= [X-Y]补=[X]补+[-Y]补= =1.0001 因“差数”的符号位(“1”)与“减数”的符号位(“1”)相同, 发生溢出。
22
● 采用这种判别法必须保留加法运算中“加数”和减法运算中“减数”的符号,这是可以实现的,因为在加法运算中“加数”及“减数”一般是保持不变。
23
最高数值位的进位Cin :指数值位的最高位向符号位的进位,
⑵ 双进位法 最高数值位的进位Cin :指数值位的最高位向符号位的进位, 即加减运算后“和数”及“差数”中的符号位的进位输入; 符号位的进位Cout :指符号位在运算中向高一位的进位,即 加减运算后“和数”及“差数”中的符号位的进位输出; Cin 和Cout 相异,则有溢出,溢出标志表示为: V = Cin ⊕ Cout ⑶ 双符号位法 ◆ 补码中两位符号位 : Ss1和Ss2, 左边的符号位Ss1叫做真符,代表了该数的符号; 采用两位符号位的补码称为变形补码。
24
◆ 对参加运算的数在运算过程中两个符号位Ss1和Ss2 都作为
数的一部分参加运算,而运算最后结果仍取一个符号位。 若运算结果“和数”或“差数”的两个符号位不相同,表示结 果有溢出。 ◆ 双符号位的含义 Ss1Ss2=00 结果为正数,无溢出 Ss1Ss2=01 结果正溢(或上溢) ,表示正数被负数相减 后所得结果大于计算机所能表示的最大正数或两个正数之和 大于计算机所能表示的最大的正数。。
25
Ss1Ss2=10 结果负溢(或下溢),表示两个负数之和小
于计算机所能表示的最小负数或负数被正数相减后所得结果小 于计算机所能表示的最小负数。 Ss1Ss2=11 结果为负数,无溢出 例 x=-0.1100, y= - , 求x+y 。 解: [x]补= , [y]补= [x]补 + [y]补 两个符号位出现“10”表示已溢出(下溢出),即结果小于 -1。
26
Cout=1 , Cin =0 表示已溢出(下溢出),即结果小于 -1。
例 x=-0.1100, y= - , 求x+y 。 解: [x]补= , [y]补= [x]补 + [y]补 1 0 Cout=1 , Cin =0 表示已溢出(下溢出),即结果小于 -1。
27
3.2.2 从半加器到算术逻辑部件ALU 逻辑型数据的算术运算和逻辑运算功能。 加法器是ALU中最基本的部件。 1、半加器
◆ 两个一位二进制数相加,不考虑 低位向本位的进位,称为半加。 实现半加操作的电路称为半加器。 ◆ 半加器的真值关系 输出与输入 关系用真值表 表示为:
28
根据真值表,输出Si、 Ci同Xi、Yi的逻辑关系为:
◆ 半加器的实现 根据真值表,输出Si、 Ci同Xi、Yi的逻辑关系为: Si = Xi ⊕ Yi Ci = Xi · Yi 采用一个异或门和一个 与门 的逻辑电路如所示。 ◆ 在多位二进制数进行加法 运算时,最低位的加法就可采用半 加器电路。
29
2. 全加器 ◆ 考虑低位向本位的进位值的加法器称为全加器 。 ◆ 全加器的真值关系输出与输入关系用真值表表示为:
30
◆ 全加器的实现 = Ci-1 + Ci-1 ( Xi ⊕ Yi ) = Ci-1⊕Xi ⊕ Yi
◆ 全加器的实现 从表 可见: = Ci-1 + Ci-1 ( Xi ⊕ Yi ) = Ci-1⊕Xi ⊕ Yi = Xi Yi + Xi Ci-1 + Yi Ci-1 = Ci-1(Xi ⊕ Yi ) + Xi Yi
31
采用2个异或门、2个与门和1个或门的逻辑电路如所示。
◆ 在多位二进制数加法运算时,除最低位外,其余各位都必 须采用全加器电路。
32
3. 并行加法器 (1)串行进位的并行加法器 ◆ 将n个全加器串接构成一个n位并行加法器; 当两个n位数的相加时,n位数据的各位同时运算,每
3. 并行加法器 (1)串行进位的并行加法器 ◆ 将n个全加器串接构成一个n位并行加法器; 当两个n位数的相加时,n位数据的各位同时运算,每 一级的进位输入直接依赖前一级的进位输出,进位信号逐 级形成的,因此这种加法器称为 “串行进位的并行加法 器”。或称“行波进位加法器”。 ◆ 串行进位的并行加法器原理图
34
设一级“与门”、“或门”的延迟时间为t, 每一级全加器中从Ci-1→Ci经过2个基本门电路的进位延 迟时间为2t,
◆ 总延迟时间 设一级“与门”、“或门”的延迟时间为t, 每一级全加器中从Ci-1→Ci经过2个基本门电路的进位延 迟时间为2t, 在n位并行加法器中从C0→Cn的总延迟时间为2nt。 串行进位的n位并行加法器的总延迟时间较长且与字长成正比; (2) 先行进位的并行加法器 ◆ 为提高加法器的速度,要求减少进位延迟时间,为此引 入了“先行进位”的概念和快速进位。其特点是n级加法器各 级进位信号同时形成,故又称为“并行进位”或“同时进位”。
35
无关。是本位运算产生的进位,当Xi与Yi同时为1必产生向高 一位的进位;
◆ 进位生成函数和进位传送函数 全加器的进位表达式为: Ci = Xi Yi +(Xi⊕Yi)Ci-1 Xi Yi 取决于本位参于运算的两个数,而与Ci-1(低位进位) 无关。是本位运算产生的进位,当Xi与Yi同时为1必产生向高 一位的进位; 定义Xi Yi为“进位生成函数”,以Gi表示: Gi =Xi Yi
36
低位的进位值Ci-1有关。当Ci-1为“1”时,必需(Xi⊕Yi)=1 ,才能产生向高位的进位。
(Xi⊕Yi)Ci-1表示进位值与本位参于运算的两个数以及 低位的进位值Ci-1有关。当Ci-1为“1”时,必需(Xi⊕Yi)=1 ,才能产生向高位的进位。 定义 (Xi⊕Yi)为 “进位传送函数”,以Pi表示: Pi = (Xi⊕Yi) 于是全加器的进位表达式可表示为: Ci=Gi+PiCi-1 由此,n级并行加法器中各级的进位信号表达式为: C1=G1+P1C0
37
┊ ┊ C2=G2+P2C1 Cn =Gn +PnCn-1 C1=G1+P1C0 C2=G2+P2C1 =G2+P2G1+P2P1C0
┊ ┊ Cn-1=Gn-1+Pn-1Cn-2 Cn =Gn +PnCn-1 以Gi及Pi表达式代入得: C1=G1+P1C0 C2=G2+P2C1 =G2+P2G1+P2P1C0 ┊ ┊ ┊ Cn =Gn +PnCn-1= Gn+PnGn-1+PnPn-1Gn-2+…… + PnPn-1…P2G1 + PnPn-1……P2P1C0
38
从上述的进位信号表表达式可见: ◆ 先行进位的并行加法器 第i位的进位Ci仅由G1、G2、…Gi,P1、P2、…Pi以及
◆ 先行进位的并行加法器 从上述的进位信号表表达式可见: 第i位的进位Ci仅由G1、G2、…Gi,P1、P2、…Pi以及 最低进位C0决定,而与C1~Ci-1无关,因此各级进位输 出可以同时产生。 若不计Pi、Gi的形成时间,从C0→Ci的延迟时间为2t。 n位并行加法器中Cn的形成电路可根据Cn逻辑表达式构成。 4位先行进位并行加法器的并行进位链电路图如下图,称为 4位先行进位电路CLA 。
39
4位先行进位并行加法器的并行进位链
40
将4位先行进位电路CLA同4位求和电路(包含进位生成/进
41
用4个4位CLA加法器电路可构成16位单级先行进位加法器,如下图所示。
◆ 16位单级先行进位加法器 用4个4位CLA加法器电路可构成16位单级先行进位加法器,如下图所示。
42
4. 加减法部件ASU(行波进位的补码加/减法器)
利用补码加减法公式 [X + Y]补 = [X]补+[Y]补= Xn-1 Xn-2……X1X0 +Yn-1 Yn-2 ……Y1Y0 [X – Y]补=[X]补— [Y]补= =[X]补+ [-Y]补 = Xn-1 Xn-2……X1X0 +Yn-1Yn-2 ……Y1Y0 +1 Yn-1 Yn-2 ……Y1Y0 = 111 …… 11⊕Yn-1 Yn-2 ……Y1Y0 n 用一套加法器电路可以完成[X+Y]补和[X-Y]补,在进行加法 运算时Y用原值,在实现减法运算时,对[-Y]补求一次补,即得 到[-Y]补, 然后同 [X]补作加法操作。
43
可在最低位上 置进位输入为1来实现。具体线路如图所示。
电路中求补操作通过在输入端加—个异或门和1操作,加1操作 可在最低位上 置进位输入为1来实现。具体线路如图所示。
44
当M=0 时,Yn-1 ’ …Y0 ’ =Yn-1…Y0,n个全加器将两个n位 二进制数X、Y进行加法运算;
当M=1时,Yn-1‘…Y0‘ 为Yn-1…Y0的反再加1变为-Y的 补码,同[X]补进行加法运算。 可以方框图表示:
45
十进制数据在计算机中一般采用BCD码的形式,即二进制编码的十进制数,用4位二进制数0000~1001表示1位十进制数0~9。
46
例1 采用BCD码加法完成十进制数 X=35 ,Y=42的相加。
( 35 )10 = ( )BCD ( 42)10 = ( )BCD ( ) BCD +( ) BCD ( ) BCD =77 10
47
例2 采用BCD码加法完成十进制数 X=28 ,Y=36的相加。
( 28 )10 = ( )BCD ( 36)10 = ( )BCD ( )BCD + ( )BCD 非法码 ( ) BCD =
48
例3 采用BCD码加法完成十进制数 X=28 ,Y=69的相加。
( 28 )10 = ( ) BCD ( 69)10 = ( )BCD ( ) BCD + ( ) BCD 1 ( ) BCD = BCD码加法中,被加数的4位二进制数和加数的4位二进制数 相加和 > 9 (1001)或向高4位有进位则对应4位数要加6 (0110) 进行修正。
49
减数、被减数用BCD码表示,做减法时按二进制减法规则进 行,要求相减后的差也为BCD码表示的数。
例2 采用BCD码减法完成十进制数 X=41 ,Y=29的减法 。 ( 41 )10 = ( )BCD ( 29)10 = ( )BCD ( ) BCD - ( )BCD ( ) BCD = BCD码减法中,减数的4位二进制数减去被减数的4位二进制数 时有借位,则对应4位数要减 6 (0110)进行修正 。
50
(2) BCD码(十进制)加法器 ■ FA3、FA2、FA1和FA0组成的4位二进制数加法器;
路; 加6的条件: 当C3 ’=1 或 S3’S2 ’ =11 或 S3’S1 ’=11时, 修正电路中FA2‘和FA1’输入1,即: S3 S2 S1 S0 =S3'S2'S1'S0' 得到加6修正。
52
6 . 算术逻辑部件ALU 算术逻辑部件ALU除了完成加、减法等算术运算外,还必须具有逻辑运算功能,可采用如下图所示的电路实现多功能算术/逻辑部件。
53
选择器A是一种二选一电路,由控制信号M控制;
选择器B是一种八选一电路,由三位控制信号S2S1S0控制,控制输出信 号Z来自哪种运算的结果。 点划线框内为与图3-7框图相似的一位加法/减法电路ASU,可实现补码的 加法和减法操作; 非门和与门、或门、异或门的作用相同,分别实现7种常用的逻辑操作; ALU功能如表所示。
54
分析 M=1 ,S2S1S0=010 Z=X·Y M=0 ,S2S1S0=101 Z = X·Y M=1 ,S2S1S0=111 Z = X- Y
55
用1位ALU电路构成n位行波进位的ALU电路:
56
7. 4位二进制算术逻辑部件74181 ◆ 典型4位ALU芯片,有正逻辑和负逻辑两种方式,负逻辑和正 逻辑的74181芯片方框图如图所示。
57
74181能执行16种算术运算和16种逻辑运算。基本结构为 4个一位ALU电路和四位一组先行进位链电路组合而成。
A0-A3、B0-B3位2个4位操作数; F0-F3位4位目的操作数 ; Cn为低位向本位进位输入; Cn+4为本位向高位的进位输出; S3S2S1S0为工作方式选择信号,有16种运算方式; “A=B” 指示两个操作数是否相等 P、G为两个本组先行进位输出端 M为算术、逻辑运算控制信号:
59
M控制ALU的运算方式:算术运算还是逻辑运算。
M=0时,输出结果Fi与本位操作数Xi、Yi有关,而且与向本位的 进位值Cn有关,因此,ALU进行算术运算。 M=1时,置Cn=0, 运算结果Fi仅与本位操作数Xi、Yi有关,因 此ALU进行逻辑运算。 ◆ 算术、逻辑运算的实现 74181ALU的16种算术、逻辑运算功能与S3S2S1S0、M、Cn的值 有关,功能表如下。表中,“+”表示逻辑或 ,“加”、“减”表示算术 加、减。 注意:表中所描述的正逻辑操作方式的一组算术运算和逻辑运与负逻 辑操作数方式的一组算术运算和逻辑运算是等效的。该器件 把逻辑输入信号都反相所产生的功能,亦在此集合中。
61
分析 M=1 ,S3S2S1S0=0000 F= A M=1 ,S3S2S1S0=0100 F= A+ B W0 Z0
62
若片与片之间采用串行进位,只要把低位芯片的Cn+4与高位芯片 的Cn相连即可。实现组内并行,组间串行。
◆ 多片芯片的组合 74181芯片内4位之间是并行进位,构成4位以上的ALU要多片组合, 若片与片之间采用串行进位,只要把低位芯片的Cn+4与高位芯片 的Cn相连即可。实现组内并行,组间串行。 若片与片之间采用并行进位,要采用进位链电路和74181芯片组 合,实现组内并行,组间并行,提高运算速度。 74182芯片是先行进位部件。
63
采用4片74181和1片74182组成16位并行进位的 ALU的硬件图为:
64
3.3 定点数的乘、除法运算和乘、除法电路 的实现 3.3.1 定点数的乘法运算和乘法电路的实现 1. 原码一位乘法
3.3 定点数的乘、除法运算和乘、除法电路 的实现 定点数的乘法运算和乘法电路的实现 1. 原码一位乘法 ◆ 原码乘法实际上是两个正数相乘的方法; 原码表示的两数相乘,乘积的符号位为相乘两数符号位的按 位加之和(即异或) ,数值部分为两数绝对值之积; 设被乘数为X、乘数为Y;用原码表示为: 被乘数[X]原 = Xs. X1X2···Xn-1Xn 乘数 [Y]原 = Ys. Y1Y2···Yn-1Yn
65
( X s⊕ Y s) + ( 0. X1X2… Xn-1Xn ) × ( 0. Y1Y2 … Yn-1Yn )
原码乘法的表达式为: 乘积 [ Z ]原 = [X×Y]原 = ( X s⊕ Y s) + ( 0. X1X2… Xn-1Xn ) × ( 0. Y1Y2 … Yn-1Yn ) ◆ 原码一位乘法的计算机实现 计算机中实现乘法运算的方法是移位和相加; “一位乘法”运算是根据乘数Y的每一位Yi(i= n,n-1 …, 2, 1 )的取值是“0”还是“1”来决定对上次部分积作什么运 算,若Yi为“1” 则在部分积上加被乘数;若为“0” 则加“0”。 每次获得新的部分积后,右移一位,直到乘数Y的最高位Y1。 两个n位数相乘,只需要(n+1)位全加器,运算结果最 多为2n位。
66
◆ 原码一位乘法运算规则及过程如下: (1)取被乘数X和乘数Y的绝对值 |X|= 0. X1X2···Xn-1Xn
|Y|= 0. Y1Y2···Yn-1Yn N位部分积的初值为全“0”; (2)以乘数Y的最低位Yn作为判断位。 若Yn = 1,原部分积之和 +被乘数得新部分积之和; Yn = 0,原部分积之和 +0(即不加)得新部分积之和; (3)新部分积之和同乘数|Y|一起右移一位; (4)依次检查Yn-1、Yn-2···Y1,重复上二步操作,最终得乘积 Z = X×Y的绝对值;
67
(5) 符号位 Zs = Xs ⊕ Ys和乘积Z 结合得ZsZ1Z2···Z2n-1Z2n为
[X×Y]原 例3-7 设[X]原=0.1011,[Y]原=0.1101,求[X × Y]原=[Z]原 。 解:按乘法规则,符号位Zs = Xs ⊕ Ys = 0 ⊕ 0 = 0; 绝对值相乘0.1011×0.1101=1011×1101×2-8, 1011×1101如下:
68
0 0 0 0 1 1 0 1 部分积初值 + 1 0 1 1 Y4=1,加上被乘数∣X∣ 第一次部分积 1 0 1 1 1 1 0 1
部分积初值 Y4=1,加上被乘数∣X∣ 第一次部分积 右移一位 Y3=0,加0 第二次部分积 右移一位 Y2=1,加上被乘数∣X∣ 第三次部分积 右移一位 Y1=1,加上被乘数∣X∣ 第四次部分积 右移一位得乘积 [Z]原= ×2-8 = , Z = (+)
69
例3-8 设[X]原=1.1010,[Y]原=1.1111,求[X×Y]原=[Z]原 。
解:按乘法规则,符号位Zs = Xs⊕ Ys = 1 ⊕ 1 = 0; 绝对值相乘 ×0.1111=1010×1111×2-8, 1011×1101如下:
70
[Z]原= ×2-8 = , Z = (+)
71
例3-9 设[X]原=0.0101,[Y]原=1.1010,求[X × Y]原=[Z]原。
解:按乘法规则,符号位Zs = Xs ⊕ Ys = 0 ⊕ 1 = 1; 绝对值相乘 ×0.1010=0101×1010×2-8, 0101×1010如下:
72
[Z]原= ×2-8 = , Z =
73
2. 原码一位乘法运算器框图 一个5位二进制数X = (+/-)0.X1X2X3X4 与Y = (+/-)0.Y1Y2Y3Y4采用原码一
位乘法运算的原理框图如下。
74
乘数寄存器为5位,存放乘数[Y]原= Ys. Y1Y2Y3Y4 ; A寄存器为4位寄存器,存放被乘数X的绝对值|X|
(1) 运算器组成 乘数寄存器为5位,存放乘数[Y]原= Ys. Y1Y2Y3Y4 ; A寄存器为4位寄存器,存放被乘数X的绝对值|X| 乘积P寄存器为9位,存放乘积[Z]原= Ps . P1P2···P7P8 。8位存放乘 积的数值,最高位Ps为符号位,由异或门输出Xs+Ys生成; C寄存器为4位寄存器,存放部分积,初值为0; B寄存器为4位寄存器,存放乘数Y的绝对值|Y|; C_B组成8位寄存器,可实现右移,最后结果——8位乘积绝对值存此; 选择器D为2选1的选择器 计数器CR为减法计数器,初始值为操作数中数值位的位数,用来 控制操作中部分积的右移次数,当CR为0时结束操作。 被乘数寄存器为5位寄存器存放[X]原=Xs. X1X2X3X4 ;
75
乘数原码寄存器为5位寄存器存放[Y]原=Ys. Y1Y2Y3Y4
CSR为右移控制信号(脉冲信号),每发一脉冲信号,控制有关 寄存器C_B右移一次, bs为移出位信号值 — 1或0控制选择器D的输出: bs=1时,选择器D输出被乘数X的绝对值|X|到ALU,与部分积相 加后输出,形成新的部分积送寄存器C; bs=0时,选择器D输出0到ALU,与部分积相加后输出上次的部分 积,形成新的部分积送寄存器C同寄存器B一起右移决定下一次操作; (2)工作原理 ① 初始化:将被乘数的5位原码存放被乘数寄存器, 乘数的5位 原码存放乘数原码寄存器,置C寄存器初值为0,置计数器CR初值为4; ② 运算启动后,乘数原码寄存器的数值位内容送B寄存器,被 乘数寄存器的数值位内容送A寄存器;
76
若bs =1, 从选择器D 中选取A寄存器内容作一 加数和C寄存器 的部分积相加得新部分积;
③ 相加操作: 判B寄存器的bs 位确定操作, 若bs =1, 从选择器D 中选取A寄存器内容作一 加数和C寄存器 的部分积相加得新部分积; 若bs =0 ,从选择器D 中选取0作一加数和C寄存器的部分积相 加得新部分积; ④ 移位操作: 当CSR 脉冲到来时, 寄存器C、B组成8位寄存器右移一位, 同时使计数器CR-1; ⑤ 判断运算结束:判CR,若CR ≠0则重复执行步骤③和④, 若CR =0 则运算结束, 乘数原码寄存器的符号位和 被乘数寄存器中符号位相异或作为 乘积符号位送乘积寄存器的符号位,C寄存器和B寄存器的内容送入 乘积寄存器的数值位。P寄存器中便是乘积的原码。
77
3. 补码一位乘法 ◆ 目前绝大多数计算机都采用补码表示法来进行加减运算。 因此在采用补码加减运算的计算机中也常采用补码乘法。
3. 补码一位乘法 ◆ 目前绝大多数计算机都采用补码表示法来进行加减运算。 因此在采用补码加减运算的计算机中也常采用补码乘法。 在补码乘法中被乘数为X和乘数为Y釆用补码 [X]补和[Y]补 表示,运算结果Z也用补码 [Z]补表示,运算时符号位Xs和Ys 参与运算。 ◆ 补码一位乘法运算方法 设 被乘数[X]补=Xs. X1X2···Xn-1Xn 乘数 [Y]补= Ys. Y1Y2···Yn-1Yn 可以证明:当乘数Y>0(即Ys=0),将按原码乘法运算, 但按补码规则移位,即[X×Y]补= [X]补× [0.Y1Y2···Yn] 。
78
当乘数Y<0(即Ys=1),先去掉[Y]补中的Ys,再按原码
乘法运算,最后的部分积与[-X]补相加,得最后结果。即 [X×Y]补=[X]补×[0.Y1Y2···Yn]+[-X]补 。 补码一位乘法的表达式为: [Z]补= [X×Y]补= [X]补×[0.Y1Y2···Yn]+[-X]补×Ys ◆ 补码一位乘法的Booth算法 由上式: [Z]补= [X×Y]补 = [X]补×[0.Y1Y2···Yn]+[-X]补×Ys = [X]补×[2-1Y1 +2-2Y2+···+2-nYn]+[-X]补×Ys = [X]补×[2-1Y1 +2-2Y2+···+2-nYn]+{-[X]补}×Ys
79
= [X]补× [-Ys+2-1Y1 +2-2Y2+2-3Y3···+2-nYn]
= [X]补× [-Ys+(Y1-2-1Y1) +(2-1Y2 -2-2Y2) +(2-2Y3 -2-3Y3)+···+(2-(n-1)Yn-2-nYn)] = [X]补×[-Ys+(Y1-2-1Y1) +(2-1Y2 -2-2Y2)+ (2-2Y3 -2-3Y3)+···+(2-(n-1)Yn-2-nYn)+0] = [X]补×[(Y1-Ys)+(Y2-Y1)2-1 +(Y3 -Y2)2-2 +···+(Yn-Yn-1)2-(n-1)+(0-Yn)2-n] = [X]补×[(Y1-Ys)+(Y2-Y1)2-1 +(Y3 -Y2)2-2 +···+(Yn-Yn-1)2-(n-1)+(Yn+1-Yn)2-n] 式中,Yn+1为加在乘数最低位Yn右边的“附加位”,初值为0, 不影响运算结果。
80
+(Yn-Yn-1)2-(n-1)+(Yn+1-Yn)2-n]
[Z]补=[X]补×[(Y1-Ys)+(Y2-Y1)2-1 +(Y3 -Y2)2-2 +··· +(Yn-Yn-1)2-(n-1)+(Yn+1-Yn)2-n] = [X]补×[ (Yn+1-Yn)2-n +(Yn-Yn-1)2-(n-1) +······ +(Y3 -Y2)2-2 )+(Y2-Y1)2-1 +(Y1-Ys) ] = [X]补×[((···· ((Yn+1-Yn)2-1 +(Yn-Yn-1))2-1+ ······ +(Y3 -Y2))2-1+(Y2-Y1))2-1 +(Y1-Ys) ] = [X]补×[((···· ((0 + (Yn+1-Yn))2-1 +(Yn-Yn-1))2-1 + ······+(Y3 -Y2))2-1+(Y2-Y1))2-1 +(Y1-Ys)] = ((···· ((0 + (Yn+1-Yn) [X]补)2-1 +(Yn-Yn-1) [X]补)2-1 + ······+(Y3 -Y2) [X]补)2-1+(Y2-Y1) [X]补)2-1 +(Y1-Ys) [X]补
81
据此可得如下递推公式: [Z0]补= 0 [Z1]补= 2-1{[Z0]补+(Yn+1-Yn)[X]补} [Z2]补= 2-1{[Z1]补+(Yn-Yn-1)[X]补} [Z3]补= 2-1{[Z2]补+(Y n-1-Y n-2)[X]补} ··· [Zn]补= 2-1{[Zn-1]补+(Y2-Y1)[X]补} [Z]补 = [Zn ]补+(Y1-YS)[X]补
82
① 参加运算被乘数和乘数都釆用补码表示,符号位参加运算;
[Z0]补= 0,为初始积部分; [Z1]补~[Zn]补为每次求得的累加值右移后的部分积; [Zn]补第一次求得的累加值右移后之值,由(Yn+1-Yn)之值决 定是否在累加后的原部分积上加[X]补(被乘数的补码)。 [Z]补为最后乘积的补码,累加后无需右移。 ◆ Booth算法的运算规则 ① 参加运算被乘数和乘数都釆用补码表示,符号位参加运算; ② 乘数最低位Yn后加一位附加位Yn+1,初值为0; ③ 求得每次部分积和后必须与乘数一起右移一位,由乘数的最低 二位Yn+1Yn的值决定下一次执行的操作——累加与右移(按补码右 移规则移位),具体规则如下:
83
Yn Yn+1 = 00 原部分积 + 0, 并右移一位; Yn Yn+1 = 01 原部分积 +[X]补,并右移一位;
④ 操作次数,累加n+1次,移位n次(最后一次不移位); ⑤ 被乘数和部分积采用双符号位,乘数采用单符号位; 例3-10 X =- ,Y =- ,用Booth法求X×Y 。 解:[X]补 = [Y]补 = [-X]补=
84
加‘0’ + 加[-X]补 +[-X]补 加[X]补 +[X]补 加‘0’ + 加[-X]补 +[-X]补
85
加 ‘0’ + [X×Y]补 = ; X×Y = + 例 X = 21 / 32 = + ,Y = - 26 / 32 = — , 用Booth法求X×Y 。 解:[X]补= , [Y]补= , [-X]补=
87
4. 补码一位乘法运算器框图 补码一位乘法运算实 现4位二进制数乘法的 原理框图如下图所示。
88
B寄存噐:n+2位寄存器存放乘数Y的补码[Y]补,最低位Yn+1为 乘数的附加位初值置“0”,由YnYn+1的取值决定累加时的数值:
(1) 运算器的组成 A寄存噐:n+2位寄存器存放被乘数X的双符号位补码[X]补; B寄存噐:n+2位寄存器存放乘数Y的补码[Y]补,最低位Yn+1为 乘数的附加位初值置“0”,由YnYn+1的取值决定累加时的数值: C寄存噐: n+2位寄存器存放部分积,初值为0; C_B组成2n+4位寄存噐,用来存放每次求得的部分积之和,并 可实现右移,最后结果——2n+2位乘积值存于此; 乘积P寄存器:(2n+2)位寄存器,用来存放最终结果,2n位存 放乘积的数值,最高两位为符号位(双符号位); NEG: 求补器,输入被乘数X的补码[X]补,输出[-X]补; ∑: 一个(n+2)位加法器; 选择器D:三选一选择器,用以选取一个加数;
89
计数器CR:减法计数器,初始值为操作数中数值位的位数n,用 来控制操作中部分积的右移次数,当CR为0时结束操作;
CSR:右移控制信号(脉冲信号),每发一脉冲信号,控制有关 寄存器C_B右移一次,最后2位控制选择器D的输出; (2)工作原理 ① 初始化:将被乘数的双符号位补码存放A寄存器, 乘数的补码 存放B寄存器,同时置B寄存器得末位为0,置C寄存器初值为0, 置计数器CR初值为n; ② 相加操作: 根据B寄存器的末两位的值通过选择器D选择一加数 和C寄存器内容(部分积)相加, 若 Yn Yn+1 = 00 或 选择加数 0相加; Yn Yn+1 = 选择加数A寄存器内容( [X]补)相加; Yn Yn+1 = 选择加数A寄存器内容求补( [-X]补)相加;
90
⑤ 最后一次相加操作:根据B寄存器的末两位的值通过选择器D选 择一加数和C寄存器内容(部分积)相加,之后将C寄存器的n+2位
③ 移位操作: 当CSR 脉冲到来时, 寄存器C、B组成2n+4位寄存器右移一位, 同时计数器CR-1; ④ 判断继续运算: 判CR,若CR ≠0则重复执行步骤②和③, 若CR = 0 则作最后一次加法操作; ⑤ 最后一次相加操作:根据B寄存器的末两位的值通过选择器D选 择一加数和C寄存器内容(部分积)相加,之后将C寄存器的n+2位 和B寄存器高n位送乘积P寄存器; 乘积P寄存器中便是乘积的双符号位补码。
91
3.3.2 定点数的除法运算和除法电路的实现 在计算机中实现除法运算的方法是移位相减,而减法又可用补码相
加来完成。因此其基本操作也是移位和加法。 原码除法常用“恢复余数法”和“加减交替法”,补码常用“加减交替 法”。这些方法都建立在 被除数绝对值小于除数绝对值的基础上。 1. 原码除法—— 恢复余数法 参加运算的两个数以原码表示,取两数的绝对值相除,商的符号由 两数的符号位按位相加求得。 在计算机中是先作减法,由余数的符号来判别是否够减: 如果余数为正,说明够减,应上商为1; 如果余数为负,应上商为0,由于已作了相减运算,需将除数加回 以恢复余数。
92
因为每次求一位商,余数左移一位,所以最后所得的余数应右移n位(对n位数相除而言)即×2-n,余数应与被除数同号。
例3-12 设[X]原 = ,[Y]原= ,用原码恢复余数法 求:[X/Y]原 。 解: 按除法规则,符号位Zs= Xs ⊕Ys = 0 双符号位补码[ -| Y |]补= , 绝对值除法|X|/ |Y|如下:
94
被除数 说 明 加[-Y]变补 ) -|Y| 余数为负 ,商上0,恢复余数 加 Y ) 左移1位 加[-Y]变补 ) 余数为正 ,商上1, 左移1位 加[-Y]变补 ) 余数为正 ,商上1 左移1位 余数为负 ,商上0,恢复余数 加 Y ) 左移1位 加[-Y]变补 ) 余数为正 ,商上1
95
|X|/ |Y| = ×2-4 / |Y| [Z]原 = ,Z= , 余数R = × 2-4,
96
2. 原码除法——加减交替法 如果上商到i位时,所得余数为ri ,则应有ri=2ri-1+(-Y) ,
◆ 加减交替法原理: 如果上商到i位时,所得余数为ri ,则应有ri=2ri-1+(-Y) , 如果ri<0,商上 0,同时恢复余数,即ri加上Y,然后左移一位, 再作减Y运算得ri+1,再由ri+1=2(ri+Y)+(-Y)=2ri+Y,即当余数ri为负时, 商位上0,余数左移一次加上除数,即得新的余数ri+1; 如果ri>0,商上1,余数左移一次,减去Y,即得新的余数ri+1; 其规则为: 余数ri为正,商上1,余数左移一位减除数; 余数ri为负,商上0,余数左移一位加除数。
97
例3-13设[X]原 = 0.1101 ,[Y]原= 0.1111,用原码加减交替法求 [X/Y]原 。
上商,余数左移一位共n次,最后所得的余数应右移n位(对n位数 相除而言)即×2-n,余数应与被除数同号。 例3-13设[X]原 = ,[Y]原= ,用原码加减交替法求 [X/Y]原 。 解: |X| = , |Y| = , 按除法规则,符号位 Zs=Xs⊕Ys=0 [ -|Y|]补 =[|Y|]变补= 绝对值相除|X|/ |Y|如下:
98
结果商为[Z]原 = 0.1101, Z = +0.1101 , 余数R = 0.1101 × 2-4,
99
解:|X| =00.1000,|Y| =00.1010 例3-14 X =+0.1000,Y =- 0.1010 ,用原码加减交替法求
按除法规则,符号位Zs=Xs ⊕ Ys=1 [ -|Y|]补 = [|Y|]变补= 绝对值除法|X|/ |Y|如下:
101
|X|/ |Y| = ×2-4 / |Y| 结果商为[Z]原 = ,Z = ,余数R = × 2-4, 例3-15 X = ,Y = ,用原码加减交替法求[X/ Y]原。 解: |X| = ,|Y| = 按除法规则,符号位Zs=Xs ⊕ Ys=1 [ -|Y|]补 = [|Y|]变补= 绝对值除法|X|/ |Y|结果为: |X|/ |Y| = ×2-4 / |Y| 结果商为[Z]原 = , Z = 余数R = × 2-4
102
3. 原码加减交替法除法运算器 (1) 硬件系统组成 A寄存器: n+2位寄存器,存放被除数X(双符号位Xs’Xs)
5位原码加减交替法除法运算器的原理框图如下。 (1) 硬件系统组成 A寄存器: n+2位寄存器,存放被除数X(双符号位Xs’Xs) ,在运算过程中存放部分余数; B寄存器: n+2位寄存器,存放除数Y(双符号位Ys’Ys); C寄存器: n+1位寄存器,存放商初值为00000,在运算过程 中最低位保存每次求得的商Q; R寄存器: n+2位寄存器,存放最终余数R(双符号位Ys’Ys) Q寄存器: n+1位寄存器, 存放最后结果商Q
104
减法计数器CR:初值置n,每左移一次并+|Y|/-|Y|,
CR-1,当CR=0时运算结束; 二选一的选择器E和F ; 求补器NEG :n+2位、 缓冲噐BUF :n+2位 加法器∑ :n+2位 CSL:信号左移控制信号 (2) 运算过程 ① 初始化:将被除数绝对值的6位双符号位原码Xs’XsX1X2…,存放 A寄存器,被除数绝对值的6位双符号位原码Ys’YsY1…存放 B寄存 器,置计数器CR初值为4, 置 C寄存噐=00…0; ② 首次运算:|X|-|Y|(∣X∣+[∣Y∣]求补 ):
105
③ 上商: 判别A 寄存器(余数),若 XS为0(余数为正) , 从选择器E 中选1送C寄存器Q位(商上1); 若A 寄存器中XS为1余数为负 , 从选择器E 中选0送C寄存器Q位(商上0);同时根据A 寄存器中XS 从选择器F 选中∣Y∣(XS=1)或[∣Y∣]求补(XS=0)作为ALU的一个输入 ; ④移位: 当CSl 脉冲到来时, 寄存器A、C组成11位寄存器左移一位,同时使计数器CR-1; ⑤相加:左移后, A寄存器的部分积作为ALU的另一个输入进行相加,得到新的余数存入A寄存器;; ⑥判断运算结束:判CR,若CR ≠0则重复执行步骤(3)、(4)、(5),若CR =0 则运算结束,如果余数为负, 0送C寄存器Q位(商上0), A寄存器 +|Y|,如果余数为正, 1送C寄存器Q位(商上1), A寄存器的内容送入余数R寄存器,寄存器C的内容送入商 Q寄存器;
106
4. 补码除法——补码加减交替法 ◆ 被除数、除数用双符号位补码表示,商与余数也用补码表 示。除法运算是被除数(或部分余数)减除数。
◆ 被除数、除数用双符号位补码表示,商与余数也用补码表 示。除法运算是被除数(或部分余数)减除数。 ◆ 够减与不够减的概念及其判断 够减:指 被除数(或部分余数)的绝对值大于等于除数的绝对值; 不够减:指 被除数(或部分余数)的绝对值小于除数的绝对值; 当被除数(或部分余数)与除数同号时,如果得到的新部分余数 与除数同号,表示够减,否则表示不够减; 当被除数(或部分余数)与除数异号时,如果得到的新部分余数 与除数异号,表示够减,否则表示不够减; ◆ 除法操作和上商的规则 ① [X]补和[Y]补同号,执行[X]补-[Y]补,
107
若余数[Ri]补与[Y]补同号,商上“1”,下次操作为:
[Ri+1]补=2[Ri]补-[Y]补 ; 若余数[Ri]补与[Y]补异号,商上“0”,下次操作为: [Ri+1]补=2[Ri]补+[Y]补 ② [X]补和[Y]补异号:[X]补+[Y]补, 若余数[Ri]补与[Y]补同号,商上“1”,下次操作为: [Ri+1]补=2[Ri]补-[Y]补 ; 若余数[Ri]补与[Y]补异号,商上“0”,下次操作为: [Ri+1]补=2[Ri]补+[Y]补 ③ 商符在求商时自动生成——即第一次得出的商。 ④ 末位恒置“1”。
108
例3-15 X =+0.1000,Y =- 0.1101,用补码加减交替法求: [X/Y]补。
除数: [Y]补= ; [-Y]补= [X]补和[Y]补异号,第一次做加法。
110
结果商为[Z]补 = ,余数R = × 2-4, 真值Z = 。
111
3.4 定点运算器的基本结构与工作原理 3.4.1 移位电路 操作和乘法与除法运算中的移位操作的功能。
移位电路 在定点运算器中必不可少,实现定点运算中左移、右移的移位 操作和乘法与除法运算中的移位操作的功能。 一个具有直通、左移一位、右移一位的移位电路原理图如图所示。
112
bi:输入信号 ; ai :输出信号为 该移位电路是由三个三选一的选择器组成的; 三选一电路的工作过程是:
S1S0 :选择信号 ,用来控制移位功能; S1S0=00时 右移 ; S1S0=01 , 直通; S1S0=10左移 ; 在以上的移位电路中, 当S1S0=00时,a3a2a1=b4b3b2,三位代码右移1次; S1S0=01时,a3a2a1=b3b2b1,三位代码直通传送; S1S0=10时,a3a2a1=b2b1b0,三位代码左移一次。 在上述移位电路的基础上,增加选择信号S以增加移2位,移 4位和移8位等功能,构成桶形移位器。
113
3. 4. 2 定点运算器的主要组成 通路等组成,一个典型的定点运算器结构如图所示。
定点运算器的主要组成 定点运算器中一般由ALU部件、寄存器、多路选择器、移位器和数据 通路等组成,一个典型的定点运算器结构如图所示。
114
定点运算器由如下几部分组成: (2)A寄存器、B寄存器和Q寄存器 为一个输入端口和二个输出端口的结构,输出分别送A寄存器
(1) 寄存器组 由若干个通用寄存器组成; 为一个输入端口和二个输出端口的结构,输出分别送A寄存器 和B寄存器,可以通过寄存器号来选择输入寄存器,以及输出寄 存器。 (2)A寄存器、B寄存器和Q寄存器 A寄存器,B寄存器:接收来自寄存器组的数据,作为ALU二个运算 数据的来源之一;B寄存器的数据也可直接送到选择电路3。 Q寄存器:接收来自移位电路1的数据,其输出可反馈到其移位电 路1的输入端(左、右移输入端),实现数据的左移1位或右移1位 的操作。Q寄存器输出通过三选一电路1送入ALU的输入端。Q寄存器 在进行乘除法运算时可用作乘数及商寄存器。
115
(3) ALU为多功能算术逻辑运算部件 参加运算的二个数据来自: (4)移位电路1和移位电路2:
① 选择电路1 —三选一电路,输入来自Q寄存器、A寄存器和 B寄存器; ② 选择电路2 —二选一电路,输入来自B寄存器和外部输入; ③ 选择电路3 —二选一电路,输入来自ALU输出或B寄存器输出; (4)移位电路1和移位电路2: 可进行左移1位、右移1位以及直通操作,移位数据可以来自ALU 输出(移位电路1,还可对Q寄存器反馈回来的信息进行左移或右 移1位的操作)。 ALU的加减操作和移位操作可以在同一操作步骤中完成。
116
3.5 浮点数运算和浮点数运算器的实现 3.5.1 二进制数的浮点表示法 ◆ 在数的浮点表示法中,浮点数据表示为:
3.5 浮点数运算和浮点数运算器的实现 3.5.1 二进制数的浮点表示法 ◆ 在数的浮点表示法中,浮点数据表示为: N =(-1)S × M × RE = M × RE ◆ 在计算机中,尾数大多采用原码或补码表示;阶码采用补码或 移码表示。浮点数通常表示为以下的格式: ◆ 若一个浮点数的阶码有m位(不包括阶符)尾数有K位(不 包括尾符),则可表示的数的最大正值为:尾符和阶符为正(0) ,阶码和尾数为全”1”时,即:
117
◆ 用浮点数进行运算可减少精度上的损失,由于浮点的小数点是
而可表示的数的最小正值为: 阶符为负,阶码为全”0”,尾数最低 位为”1”,其余为”0”,即: ◆ 用浮点数进行运算可减少精度上的损失,由于浮点的小数点是 不固定的,在运算前需要使小数点对位,即“对阶”,且按大的阶 码对阶,否则可能丢失数字的有效位而引起误差。 ◆ 一般浮点数都以“规格化”方式表示,所谓“规格化”是指尾数真 值最高位是个有效数字(1),不是“0”,可以保留最多的有效数 字,提高运算精度。浮点数规格化尾数的补码表示为: 0 . 1 X X X X…. 或 X X X X……
118
◆ 在浮点数表示中,当一个数的阶码大于机器所能表示的最大
◆ 在浮点数表示中,当一个数的阶码大于机器所能表示的最大 阶码时,产生“上溢”。转入“溢出中断”处理;当一个数的阶码小 于机器所能表示的最小阶码或尾数为0时,则产生“下溢”,下溢时 机器 一般将此当做“机器零”来处理。 二进制数的浮点运算 1. 浮点数的加减法运算: 两浮点数 X、Y,分别为: X=MX·2Ex ; Y=MY·2Ey 浮点数加减法运算规则为: X±Y = MX ·2Ex± MY·2Ey =(MX±MY·2-(Ex-Ey))2Ex , EX≥EY 浮点数加减运算的步骤如下:
119
(1)对阶 总之,对阶是阶码小的向阶码大的对齐。 阶,即将原来阶码小的尾数部分右移,并相应增加其阶码,以使浮
检查两数的小数点位置是否对齐,若两数的阶码不同必须进行对 阶,即将原来阶码小的尾数部分右移,并相应增加其阶码,以使浮 点数值不变,尾数右移1次,阶码加1。 对阶时,先求阶码差: △E = EX - EY。 若△E = 0,表示两浮点数阶码相同; △E>0,表示EX>EY,将MY右移,EY增量直到EY=EX; △E<0,表示EX<EY,将MX右移,EX增量直到EX=EY。 总之,对阶是阶码小的向阶码大的对齐。 尾数右移时注意: ● 右移时当末位为有效值“1”时,“1”的移出实际上降低了浮点 数的精度; ● 对补码形成的尾数,正数时高位补“0”,负数时高位补“1”。
120
(2)尾数运算 (3)运算结果规格化 对阶后,对阶码相同的两个浮点数实现尾数的加减运算。若尾数 为补码表示,则进行补码的加减运算。
若尾数运算后的结果不符合规格化要求,必须对结果进行规格 化处理。有两种规格化: ■ 向左规格化(左规)——运算结果尾数如 0.001…,则将结 果左移2次,阶码减2; ■ 向右规格化(右规)——若采用双符号位补码表示尾数,则 当运算结果尾数为01.×××…×或10.×××…×,表示尾数绝 对值大于1,必须将结果右移以实现规格化。尾数右移1次,阶码 加1。
121
在运算过程中,对阶和向右规格化,尾数必须向右移,被右移
(4)舍入处理 在运算过程中,对阶和向右规格化,尾数必须向右移,被右移 尾数的低位数据会被丢弃,造成一定的误差,必须进行舍入处理, 即按照规则调整剩余部分。 常用的舍入方法有: ① 截去法 : 移去多余位,剩下位不变。其最大误差为最低位 上的“1”。 ② 0舍1入法:若右移舍去的最高位为0,则舍去移出位,末位 不变;若右移舍去的最高位为1,则尾数的末位加“1”。其最大误 差为最低位的-1/2到+1/2之间,一般采用该方法。 ③ 恒置1法:在截去多余位时,将剩下数据的最低位置“1”。其最 大误差为最低位的-1到+1之间。
122
(5) 溢出处理 在浮点数加减运算中会发生4种溢出: ① 尾数上溢 — 两个同符号数相加产生了最高位向符号位的进位,
(5) 溢出处理 在浮点数加减运算中会发生4种溢出: ① 尾数上溢 — 两个同符号数相加产生了最高位向符号位的进位, 可将尾数右移,阶码加1来调整; ② 尾数下溢 — 尾数右移时,最低有效位从右端丢失,要进行舍入 处理; ③ 阶码上溢 — 运算结果的阶码值超过了阶码可能表示的最大值 的正指数值,一般认为是+∞~-∞; ④ 阶码下溢— 运算结果的阶码值超过了阶码可能表示的最小值的 负指数值,一般将其认为“0”。 浮点数运算结果的判断是检查阶码是否溢出,阶码下溢则置运算结果为浮点数形式的“机器零”;阶码上溢,置溢出标志,由CPU的异常处理机制进行处理。
123
解: 例3-16 已知两浮点数X=-0.101000×2-101,Y=+0.111011×2-100
要求阶码、尾数都用补码表示。 解: 按要求: [X]浮=11 011, [Y]浮=11 100, ① 对阶 [△E]补=[EX]补-[EY]补=[EX]补+[-EY]补= =11 111 △E=-1,EX<EY,X的尾数右移一位,EX+1 ; [MX]补= , [EX]补=11 100 [X]浮=11 100, ② 尾数相减
124
[MX]补-[MY]补=[MX]补+[-MY]补
= = [X-Y]浮=11, ③ 规格化 右规后, [X-Y]补=11 101, ④ 舍入处理 一般采用“0舍1入法”,右规时末位丢弃1, 末位加“1”得 则 [X-Y]浮=11,101, ⑤ 判溢出 舍入处理后阶符为“11”说明无溢出。 所以 X-Y= — ×2—011
125
设:阶码5位(含2位阶符),尾数10位(含2位尾符)求X + Y (要求阶码,尾数都用补码表示)。
① 对阶 [△E]补=[EX]补-[EY]补=[EX]补+[-EY]补=00, ,100 = 11,110 △E=-2 EX<EY MX右移2位,EX加2得 [X]浮 =00,100, (11) ② 尾数相加 [MX]补+[MY]补 = (11) = (11)
126
③ 规格化 尾数为11.1 0…应左规,尾数左移1次阶码减1。 [MX+MY]补=11.00010101(10)
③ 规格化 尾数为11.1 0…应左规,尾数左移1次阶码减1。 [MX+MY]补= (10) [EX+Y]补=00,011 ④ 舍入处理 采用“0舍1入法”,右规时丢弃1个“1”, 末位加“1”得 则 [X+Y]浮 =00,011, ⑤ 判溢出 舍入处理后,阶符为‘00’说明无溢出。 则 X+Y = ×2011
127
2. 浮点数的乘除法运算 (1)基本原理 浮点数乘法运算,其乘积的阶码为相乘两数的阶码之和,其乘积 的尾数为两相乘数尾数之积。
2. 浮点数的乘除法运算 (1)基本原理 浮点数乘法运算,其乘积的阶码为相乘两数的阶码之和,其乘积 的尾数为两相乘数尾数之积。 浮点数除法运算,商的阶码为被除数的阶码减去除数的阶码,其 尾数为被除数的尾数除以除数的尾数所得之商。 设两浮点数 X、Y分别为: X = MX·2Ex Y = MY·2Ey 乘法运算时 , X·Y =(MX·MY)·2Ex+Ey=Mx·y·2Exy 除法运算时 , X /Y = MX / MY. ·2Ex - Ey= Mx/y·2Ex/y
128
式中, Mx·y = Mx·My ;Mx/y = Mx/My
Ex·y = Ex+Ey ;Ex/y = Ex-Ey (2) 阶码运算 ① 补码表示 乘积的阶码[Exy]补 =[Ex]补 +[Ey]补 商的阶码[Ex/y]补=[Ex]补-[Ey]补 溢出判别 —— 同号的阶码相加或异号的阶码相减可能产生溢出, 应作溢出判断。 ② 移码表示: 按移码定义, n+1位移码的表达式为: [Ex]移 = 2n + Ex ,-2n ≤ Ex < 2n [Ey]移 = 2n + Ey ,-2n ≤ Ey < 2n
129
得:[Ex]移 + [Ey]移 = 2n + Ex + 2n + Ey
= 2n +[2n +(Ex +Ey)] = 2n + [Ex + Ey]移 n+1位补码的表达式为: [Ey]补=2n+1 + Ey,(mod 2n+1) 因此,求阶码和的公式为: [Ex]移 + [Ey]补 = 2n + Ex + 2n+1 + Ey = 2n+1 +[ 2n +(Ex + Ey)] = [Ex + Ey]移 ,(mod 2n+1) 求阶码差的公式为: [Ex]移 + [- Ey]补 = [Ex -Ey]移 移码加减运算时,只需将移码表示的加数或减数的符号位取反(即变 补码),然后进行运算,即得阶码和或阶码差的移码。
130
例3-18 Ex = + 011,Ey = + 110,求:[Ex+Ey]移 及 [Ex-Ey]移, 且判断溢出。
③ 移码表示时的溢出判别 采用双符号位,在移码原有符号位前再加一个第二符号位为“0”, 即最高位为“0”。溢出条件是最高位变为“1”时,若双符号位为“10” ——上溢,“01”——下溢,“11”为正,“00”为负。 例 Ex = + 011,Ey = + 110,求:[Ex+Ey]移 及 [Ex-Ey]移, 且判断溢出。 解: [Ex]移 = 01, [Ey]移 = 01,110 [Ey]补 = 00, [-Ey]补 = 11,010 [Ex+Ey]移 =[Ex]移+[Ey]补 = 01, ,110 = 10,001 结果上溢 。
131
[Ex-Ey]移 =[Ex]移 +[-Ey]补 = 01,011 + 11,010 = 00,101
结果为:Ex-Ey =-011B= - 3D (3)尾数乘法运算 浮点数尾数相乘的步骤: ◎ 检测相乘两尾数中是否有“0”,若有一个为“0”,乘积必为“0”, 若均不为“0”,可进行乘法运算; ◎ 浮点数的尾数相乘可以采用定点小数的任一种乘法运算来完成, ◎ 乘积值可能要进行左规,同时调整相应的阶码;阶码调整时, 若发生阶码下溢,则作“机器零”处理;若发生阶码上溢,则作“溢 出”处 理。 ◎ 尾数相乘时,乘积会产生超过原字长直到双倍字长结果,若限 定只取原字长,则乘积的若干低位将会丢失,可采用两种方法处理:
132
① 截断处理:丢弃原尾数字长的右边低位值,优点是处理简
单,缺点是影响精度; ② 运算过程中保留右移出的若干高位值,最后再按约定规则 用这些位上的值修正尾数—舍入处理; ▼尾数用原码表示时,可采用“0舍1法”或最低位“恒置1法”。 ▼尾数用补码表示时,采用的方法是: 当丢失的各位均为“0”时,不必舍入; 当丢失的最高位为0,而其它各位不全为0或丢失的最高位为 1,以下的各位均为0,则舍去丢失位上的值; 当丢失的最高位为1,以下各位不全为0时,执行在尾数最低 位加入1的修正操作。
133
执行后,求结果只保留小数点后4位有效数字时的舍入操作值。
例3-19 有4个乘积尾数分别为: [M1]补 = ;[M2]补 = [M3]补 = ;[M4]补 = 执行后,求结果只保留小数点后4位有效数字时的舍入操作值。 丢弃0000(不舍不入) [M1]补 = 丢弃0001 (舍) [M2]补 = 丢弃1000 (舍) [M3]补 = 丢弃 1001 (入) [M4]补 = =
134
(4)尾数除法运算 浮点数尾数相除的步骤: ① 检测被除数是否为“0”,若为“0”,则商必为“0”;再检测除
① 检测被除数是否为“0”,若为“0”,则商必为“0”;再检测除 数是否为“0”,若为“0”,则商必为“无穷大”,另作处理;除数 和被除数都不为“0”,可进行除法运算。 ② 浮点数的尾数相除可采用定点小数的任一种除法运算来完成。 ③ 先比较被除数和除数的绝对值,若被除数绝对值大于除数的绝 对值,商会大于1,结果溢出。可先将被除数右移1位,对应阶码 加1,再作尾数相除,可防止除法结果——商的溢出。
135
3.5.3 浮点运算器的基本结构 1. 浮点数加减法运算操作流程图 浮点数加减法运算的操作流程如 2.加减运算器原理图 图所示。
浮点运算器的基本结构 1. 浮点数加减法运算操作流程图 浮点数加减法运算的操作流程如 图所示。 2.加减运算器原理图 浮点数加减运算器的结构框图
136
浮点数加减运算器 的结构框图:
137
3. 部件悦明 作数,c中存放运算结果操作数; 来进行阶码运算; f、g、h: 2选一的选择器; k:尾数右移部件,用于对阶时操作;
a、b、c: 浮点数据寄存器,其中a、b中存放待运算的2个浮点操 作数,c中存放运算结果操作数; d、e: ALU,d为大ALU,用来进行尾数运算;e为小ALU,用 来进行阶码运算; f、g、h: 2选一的选择器; k:尾数右移部件,用于对阶时操作; l:左移/右移部件,用于对大ALU运算结果的规格化; i:阶码差寄存器; j:为阶码加1/减1器件,用于对阶后操作及舍入操作; N:舍入部件,用于舍入操作; P:操作控制器,根据阶码差控制相关部件的操作;
138
(1) 对阶: 4. 工作过程简介 a,b中的两个阶码送e(小ALU)进行对阶操作,结果存入i(阶 (2) 尾数运算
4. 工作过程简介 (1) 对阶: a,b中的两个阶码送e(小ALU)进行对阶操作,结果存入i(阶 码差寄存器),然后送p(操作控制器),根据阶码差对尾数进行 移位操作。 操作控制器输出x、y、z、u、v、w,6个控制信号。信号y控制 选择器g将阶码较小数的尾数送k(右移部件)。同时,对较小的阶 码进行加1操作(由操作控制信号x控制),对阶后的阶码作为结果 操作数的阶码。 (2) 尾数运算 经过对阶后的2个尾数送入d(大ALU)进行加减运算,运算结 果送入l(左移/右移部件)进行规格化。
139
(3) 运算结果规格化 (4) 舍入处理 规格化时对运算结果的尾数进行左移或右移由操作控制器p的控
制信号u控制,同时结果的阶码进行加1或减1操作,由j(加1/减 1部件)实现,尾数右移,阶码加1,尾数左移,阶码减1。 (4) 舍入处理 规格化后数据送n舍入部件,经过舍入操作的数据结果送入C (结果数据寄存器)。
140
Thank You !
Similar presentations