129
计计计计计计计 计计计 计计计计计计计计计

计算机组成原理

Embed Size (px)

DESCRIPTION

计算机组成原理. 第三章 运算方法与运算部件. 计算机中完成运算的主要部件就是 CPU 中的算术逻辑运算单元 ALU 计算机的运算可以分为: 数值运算和非数值运算 数值运算的基础是定点与浮点,其中以加法为核心. 1. 定点加减运算. 一、补码加减运算 计算机中,常用补码进行加减运算。 补码可将减法变加法进行运算。 补码运算特点:符号位与数值位一同运算。 运算的基本规则: [X] 补 +[Y] 补 = [X+Y] 补 [X-Y] 补 = [X] 补 -[Y] 补 = [X] 补 +[-Y] 补 - PowerPoint PPT Presentation

Citation preview

计算机组成原理

第三章 运算方法与运算部件

计算机中完成运算的主要部件就是 CPU中的算术逻辑运算单元 ALU

计算机的运算可以分为:数值运算和非数值运算

数值运算的基础是定点与浮点,其中以加法为核心

1. 定点加减运算一、补码加减运算

计算机中,常用补码进行加减运算。补码可将减法变加法进行运算。补码运算特点:符号位与数值位一同运算。运算的基本规则:

[X][X] 补补 +[Y]+[Y] 补补 = [X+Y]= [X+Y] 补补

[X-Y][X-Y] 补补 = [X]= [X] 补补 -[Y]-[Y] 补补 = [X]= [X] 补补 +[-Y]+[-Y] 补补 由 [Y][Y] 补补求得 [-Y][-Y] 补补 的方法:对 [Y][Y] 补补(包含符号

位)求反且末位加 1 。

1.[X] 补 +[Y] 补 = 2· X0+X + 2· Y0+Y=2(X0+Y0)+(X+Y)( 1 )若 X0Y0 =00 ,则 [X][X] 补补 +[Y]+[Y] 补补 = = X+Y= [X+Y] [X+Y] 补补;( 2 )若 X0Y0 =01 或 10 ,则 [X][X] 补补 +[Y]+[Y] 补补 ==2+ (( X+Y )

当 X+Y>0 时, 2+ (( X+Y ) >2 ,进位丢失,得: [X][X] 补补 +[Y]+[Y] 补补 ==X+Y= [X+Y] [X+Y] 补补;

当 X+Y<0 时, [X][X] 补补 +[Y]+[Y] 补补 ==2+ (( X+Y ) = [X+Y] [X+Y] 补补; ( 3 )若 X0Y0 =11 ,则 [X][X] 补补 +[Y]+[Y] 补补 = 4= 4+ (( X+Y ) =2+[2+ (( X+Y ) ]∵0 > X+Y ≥ -1 ,∴2 > 2+(X+Y) ≥ 1此时,此时, [X][X] 补补 +[Y]+[Y] 补补 == 2+(X+Y) = [X+Y] [X+Y] 补补( 2 自然丢失)

在模在模 22 下下,,设 [X] 补 = X0X1X2 … Xn , [Y] 补 = Y0Y1Y2 … Yn

则 [X] 补 =2· X0+X , [Y] 补 =2· Y0+Y

证明:

2 、 ∵ [X] 补 +[Y] 补 = [X+Y][X+Y] 补补

∴ [Y] 补 = [X+Y][X+Y] 补补 -[X]-[X] 补 补 ……①……①

又∵ [X-Y] 补 =[X+(-Y)] 补 = [X] 补 +[-Y] 补

∴ [-Y] 补 = [X-Y][X-Y] 补补 -[X]-[X] 补 补 ……②……②①①+②+② 得:得:

[Y] 补 +[-Y] 补 = [X+Y][X+Y] 补补 -[X]-[X] 补 补 +[X-Y][X-Y] 补补 -[X]-[X] 补 补

= [X+Y+ X-Y][X+Y+ X-Y] 补补 -[X]-[X] 补补 -[X]-[X] 补补 = [X+X][X+X] 补补 -[X]-[X] 补补-[X]-[X] 补补 =0

∴[-Y] 补 =-[Y] 补

即 [X-Y] 补 = [X] 补 +[-Y] 补 = [X] 补 -[Y] 补

例 1 :已知机器字长 n=8 , X=44 , Y=53 ,求 X+Y= ?

解: [X] 原 =00101100 , [Y] 原 =00110101 [X] 补 =00101100 , [Y] 补 =00110101 [X] 补 = 0 0 1 0 1 1 0 0

+ [Y] 补 = 0 0 1 1 0 1 0 1

[X+Y] 补 = 0 1 1 0 0 0 0 1

真值: X+Y= (+1100001)2 = +97

例 2 :已知机器字长 n=8 , X=-44 , Y=-53 ,求 X+Y= ?

解: [44] 补 =00101100,[53] 补 =00110101[X] 补 =[-44] 补 =11010011+1=11010100 ,[Y] 补 =[-53] 补 =11001010+1=11001011

[X] 补 =1 1 0 1 0 1 0 0 + [Y] 补 =1 1 0 0 1 0 1 1

[X+Y] 补 = 1 1 0 0 1 1 1 1 1 超出 8 位,舍弃模值 X+Y=(-1100001)2=-97

例 3 :已知机器字长 n=8 , X=0.1101 , Y=0.0110 ,求 X-Y= ?

解: [X] 补 = 0.1101000 , [Y] 补 =0.0110000 , [-Y] 补 =1.1010000 [X] 补 =0. 1 1 0 1 0 0 0 + [-Y] 补 =1. 1 0 1 0 0 0 0 1 0 .0 1 1 1 0 0 0 自然丢失

[X-Y] 补 = ( 0 .0111000 ) 2 , X-Y= ( 0 .0111) 2

例 4 :已知机器字长 n=8 , X=- 0.1101 , Y=- 0.0110 求 X-Y= ?

解: [X] 补 =1.0011000 , [Y] 补 =1.1010000 [-Y] 补 =0.0110000 [X] 补 =1. 0 0 1 1 0 0 0 + [-Y] 补 =0. 0 1 1 0 0 0 0 1. 1 0 0 1 0 0 0 [X-Y] 补 = (1. 1 0 0 1 0 0 0)2 , X-Y= (-0. 0 1 1 1 )2

2. 溢出的检测

溢出:运算结果超出了计算机所能表示的数据范围。

正溢(上溢):运算结果为正而绝对值超出了表示的范围。

负溢(下溢):运算结果为负而绝对值超出了表示的范围。

定点数的溢出——根据数值本身判断。

例:已知机器字长 n=8 , X= 120 , Y=10 , 求 X+Y= ?解: [X] 补 =01111000 , [Y] 补 =00001010 ,

[X] 补 =0 1 1 1 1 0 0 0

+ [Y] 补 =0 0 0 0 1 0 1 0

1 0 0 0 0 0 1 0

[X+Y] 补 =10000010 , X+Y=11111110

X+Y 的真值 = -1111110=( -126)10

运算结果超出机器数值范围发生溢出错误。

8 位计算机数值表达范围: (-128~+127)

溢出判断规则与判断方法

两个相同符号数相加,其运算结果符号与被加数相反则产生溢出;

两个相异符号数相减,其运算结果符号与被减数相反则产生溢出。

相同符号数相减,相异符号数相加不会产生溢出。

溢出判断方法:进位判断法,双符号位法。

  (1) 进位溢出判断法 S⊕C

两单符号位的补码进行加减运算时,若最高数值位向符号位的进位值 C 与符号位产生的进位输出值 S 相同时则无溢出,否则溢出。例: [X] 补 = 1.101 [X] 补 = 1.110 + [Y] 补 = 1.001 + [Y] 补 = 0.100 [X+Y] 补 = 10.110 [X+Y] 补 = 10.010 C=0 , S=1 有溢出 C=1 , S=1 无溢出 X+Y=+0.010即:溢出 OVR = S⊕C = 1 有溢出

S C=01 正溢; S C=10 负溢 OVR = S⊕C = 0 无溢出

  (2) 双符号位(变形补码)溢出判断法

设第一符号位 Sf1 ,第二符号位 Sf2 , Sf1 Sf2

双符号含义: 0 0 表示运算结果为正数; 0 1 表示运算结果正向溢出; 1 0 表示运算结果负向溢出;

1 1 表示运算结果为负数。 即:溢出 OVR = Sf1⊕Sf2 = 1 有溢出 OVR = Sf1⊕Sf2 = 0 无溢出 左边第一位的 Sf1 为运算结果的真正符号位。

例 1 : X=0.1001,Y=0.0101, 求 [X+Y]

解 : [X] 补 = 00.1001 +[Y] 补 = 00.0101 [X+Y] 补 = 00.1110

两个符号位相同,运算结果无溢出。

X+Y=+0.1110

例 2 : X= - 0.1001 , Y= - 0.0101 , 求 [X+Y] = ?

解 : [X] 补 = 11.0111 + [Y] 补 = 11.1011 [X+Y] 补 =1 11 .0010 丢掉

两个符号位相同,运算结果无溢出。X+Y= - 0.1110

例 3 : X= 0.1011 , Y= 0.0111 , 求 [X+Y] 补 = ?

解 : [X] 补 = 00.1011 + [Y] 补 = 00.0111 [X+Y] 补 = 01.0010

两个符号位为 01 ,运算结果正向溢出。

解 : [X] 补 = 11.0100+1=11.0101 [Y] 补 =00.0111 [-Y] 补 =11.1001

[X] 补 = 11.0101 + [-Y] 补 = 11.1001 [X+Y] 补 =1 10.1110

两个符号位 10 不同,运算结果负向溢出

例 4 : X= - 0.1011 , Y= 0.0111 , 求 [X-Y] 补 = ?

补码加减法运算规则如下:1. 参加运算的操作数用补码表示。2. 符号位与数值位一样参加运算。3. 如果是加法运算,则直接相加

如果是减法,那么减数连同符号位一起取反,然后末位加 1 。

4. 运算的结果仍然是补码形式。

移位运算

逻辑移位 循环移位 算术移位

逻辑移位 特点

移位操作对象不存在符号和量值的差别,非数值或无符号数

仅限于数码位置的变化 规则

左移或右移时高位或低位补 0 移出位被丢弃

举例: 逻辑右移: 0101 -> 0010

循环移位 特点

移位操作对象不存在符号和量值的差别,非数值或无符号数

仅限于数码位置的变化 规则

左移或右移时高位或低位补 0 移出位被置于低位或高位

举例: 循环右移: 0101 -> 1010

移位时,数的符号位不变 算术运算数的移位操作会引起数值变化

右移一位,相当于带符号的数除以 2( 乘以 1/2)

左移一位,相当于带符号的数乘以 2 对于正数

原码、反码和补码均相同,移位时只需要在末端补“ 0” 。

对于负数的移位,不同码制的处理不同

算术移位

算术移位

特点 移位操作对象存在符号和量值的差别,即:有符

号数 不仅限于数码位置的变化,内涵是数值扩大或缩

小两倍 规则

决定于编码方式

原码算术移位

规则1. 符号位不变2. 左移:仅移动量值位,低位补 0

3. 右移:仅移动量值位,高位补 0

原码 符号位不参与移位,只是绝对值移位,其末端

补入 0

例:算术右移运算A 1 A 2 A 3 A 4 A 5 A 6 A 7

A 8 1 1 0 1 0 1 1 1 A的始值 补 0 … … 丢失

1 0 1 0 1 0 1 1 结果

原码算术移位

原码例:算术左移运算

A 1 A 2A 3A 4A 5 A 6

A 7 A 8 1 0 0 1 0 1 0 1 A的始值

丢失 … … 补 0 1 0 1 0 1 0 1 0 结果

原码算术移位

补码算术移位

规则1. 符号位参与移位2. 左移:低位补 0

3. 右移:高位补原有符号位 溢出

左移、符号位发生改变

问题: 算术移位怎样才能保持正确的符号和正确的移位值?

补码右移例:设 x= -1011000 ,则 [x] 补 =10101000 ,第一

位为符号位。现将其真值 x 右移,再求出其对应补码,列式如下:

不移位 x = -1011000 [x] 补 = 10101000

右移一位 ½x = -0101100 [½x] 补 = 11010100

右移二位 ¼x = -0010110 [¼x] 补 = 11101010

补码算术移位

补码右移:符号位也随之右移且符号位不变例:

A 1 A 2 A 3 A 4 A 5 A 6

A 7 A 8 1 0 1 0 1 0 0 0 A的始值

… … 丢失 1 1 0 1 0 1 0 0 结果

符号位不变

补码算术移位

补码左移例:设 x= -0010110 ,则 [x] 补 =11101010 ,第

一位为符号位。现将其真值 x 左移,再求出其对应补码,列式如下:

不移位 x = -0010110 [x] 补 = 11101010

左移一位 2x = -0101100 [2x] 补 = 11010100

左移二位 4x = -1011000 [4x] 补 = 10101000

补码算术移位

补码左移 左移时其末端补入 0 ,若符号位与后一位相同,则数

值高位移入符号仍会得到正确的符号;若符号位与后一位不同,在左移时会溢出,会破坏正确的符号位,表示超出数的表示范围

为了保持正确符号,往往采用补码变形码,使其有两位或多位符号位

A 1 A 2 A 3 A 4 A 5 A 6 A7 A 81 0 1 0 1 0 0 0 A的始值

丢失 … … 补 00 1 0 1 0 0 0 0 结果产生错误

补码算术移位

反码右移:符号位也随之右移且符号位不变

A 1 A 2 A 3 A 4 A 5 A 6

A 7 A 8 1 0 1 0 1 0 0 0 A的始值

… … 丢失

1 1 0 1 0 1 0 0 结果符号位不变

反码算术移位

反码左移 左移时其末端补入 1 ,若符号位与后一位相同,则数

值高位移入符号仍会得到正确的符号;若符号位与后一位不同,在左移时会溢出,会破坏正确的符号位,表示超出数的表示范围

为了保持正确符号,往往采用具有两位或多位符号位的变形码

A 1 A 2 A 3 A 4 A 5 A 6 A7 A 81 0 1 0 1 0 0 0 A的始值

丢失 … … 补 10 1 0 1 0 0 0 1 结果产生错误

反码算术移位

已知 [x] 补 =0.1011 , [y] 补 =1.1011 ,求算术左移,逻辑左移、算术右移、逻辑右移后的值。

x 算术左移后的值 =1.0110 (溢出)y 算术左移后的值 =1.0110

x 逻辑左移后的值 =1.0110

y 逻辑左移后的值 =1.0110

x 算术右移后的值 =0.0101

y 算术右移后的值 =1.1101

x 逻辑右移后的值 =0.0101

y 逻辑右移后的值 =0.1101

补码移位举例

逻辑运算

1/0 表示真或假,位运算 与运算: & ,有 0 即 0 或运算: | ,有 1 即 1 非运算: ~ , 0-1 , 1-0 异或运算: ^ ,同 0 异 1

算术逻辑单元(简称 ALU ) ALU 是一种功能较强的组合逻辑电路。它能进行

多种算术运算和逻辑运算。 ALU 的基本逻辑结构是超前进位加法器,它通过改变加法器的进位产生函数 G 和进位传递函数 P来获得多种运算能力。下面通过介绍 SN74181型四位 ALU中规模集成电路了介绍 ALU 的原理。

在图中功能表中,“加”表示算术加,“ +” 表示逻辑加。它能执行 16种算术运算和 16种逻辑运算, M 是状态控制端, M=H,执行逻辑运算; M=L执行算术运算。 S0 ~S3 是运算选择端,它决定电路执行哪种算术运算或逻辑运算。

常用组合逻辑

常用组合逻辑

三态门 “ 三态”是指电路可以输出正常的 0/1 逻辑电平,也可

以处于高阻态,取决于输入和控制信号。为高阻态时, “ 0” 和 “ 1” 的输出极都截止,相当于与所连接的线路断开,便于实现从多个数据输入中选择其一

当三态控制端 /G=0 ,实现非运算逻辑

Y=/A

当 /G=1 ,电路输出呈高阻Y=Z

常用组合逻辑

三态门构建的总线

例如,当控制信号 /G1 为低电平, /G2 和 /G3 为高电平时,三态门的输入 A 被送到总线上,另外两个三态门的输出处于高阻态。

A B C

/G1 /G2 /G3

总线

0 1 1

半加器

不考虑进位输入时,两数码 Xn , Yn 相加称为半加器。

全加器

若考虑低位进位输入 Cn-1 相加,则称为全加器。

一位全加器真值表如右,其中:Xn 为被加数,Yn 为加数, Cn-1 为低级进位信号,Fn 为和,Cn 为本级向上进位信号。

Xn Yn Cn-1 Fn Cn

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

0 0 1 1 0

0 1 0 1 0

1 0 0 1 0

1 1 1 1 1

全加器

全加器

化简可得:

Fn =Xn⊕Yn⊕Cn-1

Cn = XnYn + ( Xn+ Yn ) Cn = XnYn+ ( Xn⊕Yn ) Cn-1

半加器与全加器

半加器: Hn=Xn⊕Yn

全加器:Fn = Xn⊕Yn⊕Cn-1

Cn = XnYn+ ( Xn⊕Yn ) Cn-1

Xn Yn

Hn / Fn

Cn-1 Cn

串行加法器 步骤

加数最低位相加 保存求和结果和进位 加数右移一位,跳转到第

一步 特点

仅需一位全加器 需要 N 个周期完成 N 位加

法运算

一位全加器

移位寄存器

移位寄存器

Q

QSET

CLR

D

CLK

X

Y

Fi Ci+1

并行加法器

全加器数目 = 操作数(加数)的位数 N 个全加器

特点 同时(同一周期)执行各位的加法运算

并行加法器

缺点 逐位完成的进位运算影响求和过程 最坏情况下接近串行加法器的性能

即 1周期 =N 个加法 / 进位延迟例如: 1111 + 0001

结论 并行加法器的性能决定于进位机制的设计

并行加法器的进位链

进位函数串行进位并行进位混合方式

进位函数

根据各位进位的形成条件,可分别写出 Ci 的逻辑表达式: C1=X1Y1+(X1^Y1)C0=G1+P1C0

其中 :

Gi=Xi·Yi 称为进位产生函数 Pi=Xi^Yi 称为进位传递函数

Gi 的意义是:当 XiYi 均为“ 1” 时定会产生向高位的进位; Pi 的意义是:当 Xi 和 Yi中有一个为“ 1” 时,若同时低位有进

位输入,则本位也将向高位传送进位。

串行进位

1 0 0 0 0 0 0 0 0

2 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

( )

( )

......

( )n n n n n n n n n

C G PC X Y X Y C

C G PC X Y X Y C

C G P C X Y X Y C

串行进位

缺点 逐位完成的进位运算影响求和过程 最坏情况下接近串行加法器的性能

即 1周期 =N 个加法 / 进位延迟例如: 1111 + 0001

优点 实现简单: n-1 根进位输入 / 输出连线

并行进位

根据 X[0..n-1] , Y[0..n-1] , C0直接 / 同时确定各位对应的全加器的进位输入

消除 Cn+1 对 Cn 的依赖关系

1 0 0 0

2 1 1 1 1 1 0 0 0

3 2 2 2 2 2 1 1 0 0 0

4 3 3 3 3 3 2 2 1 1 0 0 0

( )

( ( ))

( ( ( )))

C G PC

C G PC G P G PC

C G PC G P G P G PC

C G PC G P G P G P G PC

1 0 0 0

2 1 1 0 1 0 0

3 2 2 1 2 1 0 2 1 0 0

4 3 3 2 3 2 1 3 2 1 0 3 2 1 0 0

C G PC

C G PC PPC

C G PG P PG P PPC

C G PG PPG PP PG PP PPC

0123412342343444

01231232333

0121222

0111

CGGGGPGGGPGGPGPC

CGGGPGGPGPC

GGGPGPC

CGPC

四位并行进位加法器

并行进位加法的特点

并行加法进位的优缺点: 运算速度快 增加了实现复杂度(硬件逻辑电路) 可能突破输入信号的扇入系数

结论:实现全字长的并行进位不可行 对策:分组计算和进位机制

组内并行、组件串行

四位并行加法器

X15 Y15

. . .

X12 Y12

C16

F15 … F12

四位并行加法器

X11 Y11

. . .

X8 Y8

C12

F11 … F8

四位并行加法器

X7 Y7

. . .

X4 Y4

C8

F7 … F4

四位并行加法器

X3 Y3

. . .

X0 Y0

C4

F3 … F0

C0

组内并行、组件并行

G0* = f(G0,G1,G2,G3,P1,P2,P3)

P0* = g(P0,P1,P2,P3)

四位并行加法器

X15 Y15

. . .

X12 Y12

F15 … F12

四位并行加法器

X11 Y11

. . .

X8 Y8

F11 … F8

四位并行加法器

X7 Y7

. . .

X4 Y4

F7 … F4

四位并行加法器

X3 Y3

. . .

X0 Y0

F3 … F0

C0

C16 C12 C8 C4

G3* P3

* G2* P2

* G1* P1

* G0* P0

*组间并行进位 (Ⅰ 级)

ALU 举例

ALU 是一种功能较强的组合逻辑电路。它能进行多种算术运算和逻辑运算。 ALU 的基本逻辑结构是超前进位加法器,它通过改变加法器的进位产生函数 G 和进位传递函数 P来获得多种运算能力。

下面通过介绍 SN74181型四位 ALU中规模集成电路了介绍 ALU 的原理。

ALU 结构

全加器与函数发生器的组合丰富的控制信号和求值逻辑复合的算术、逻辑运算功能

74181 的控制信号

M=1 :逻辑运算 (屏蔽 Ci ,打断进位链) M=0 :算术运算 ( 不屏蔽 Ci) S[3..0] :函数发生器功能选择

74181功能

表中的“加”表示算术加,“ +” 表示逻辑加。 能执行 16种算术运算和 16种逻辑运算, M

是状态控制端, M=H,执行逻辑运算; M=L执行算术运算。

S0 ~S3 是运算选择端,它决定电路执行哪种算术运算或逻辑运算。

注解:正逻辑表示高电平为‘ 1’ ,负逻辑表示低电平为‘ 1’

74181 引脚

74181 的正负逻辑

74181 内部电路

并行进位 ALU

用四片 74181电路可组成 16 位 ALU 。如下图片内进位是快速的,但片间进位是逐片传递的,因此总的形成时间还是比较长的。 如果把 16 位 ALU中的每四位作为一组,用类似位间快速进位的方法来实现 16 位 ALU (四片 ALU组成),那么就能得到 16 位快速 ALU 。推导过程如下:

与前面讲过的一位的进位产生函数 Gi 的定义相似,根据四位一组的进位产生函数 GN 为“ 1” 的条件,可以得到 GN 的表达式为:

GN =G3+P3G2 +P3P2G1 +P3P2P1G0

与前面讲过的一位的进位传递函数 Pi 的定义相似,根据四位一组的进位传递函数 PN 为“ 1” 的条件,可以得到 PN 的表达式为:

PN =P3P2P1P0

由式可知,只要 74181型 ALU 能提供输出 GN, PN那么就可用 3 个与或非门和 4片 ALU 相连,这样就能实现 16 位快速 ALU 。 实现 2.33 、 2.34 、 2.35 式的逻辑电路就成为超前进位扩展器( 74182芯片),图 3.1是它的逻辑电路图,图中将 PNi 、 GNi分别用 Pi 、Gi 表示。图中 P 、 G 输出可用于把 4 组 16 位快速 ALU 扩展成 64 位快速 ALU 。图 2.18画出了用 74181 和 74182芯片构成的 16 位快速ALU 。

图 3.1 与 7418型ALU连用的超前进位产生电路

定点乘法运算

在计算机中实现乘除法运算,有三种方式:

(1) 软件实现:在低档微机中无乘除指令,只能

用乘法或除法子程序实现。

(2) 在原有实现加减运算的 ALU 的基础上增加一些 逻辑线路以实现乘除运算。

(3) 设置专用的乘除法器:主要用于要求快速乘除运算的机器中。

手工乘法:设 X=0.1101 Y=0.1011 求 X Y= ?﹡ 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 0. 1 0 0 0 1 1 1 1 X Y= ﹡ 0. 1 0 0 0 1 1 1 1

一、无符号数一位乘

+

错位相加:

加法运算是根本

各位乘积结果所需加法运算次数不同

MxN阵列乘法器

FA

FA FA

FA FA

FA FA FA

FA FA FA

FA

C00C10C20C30

C01C11C21C31

C02C12C22C32

C03C13C23C33

P0P1P2P3P4P5P6P7

FA

x

y

s

Cin

Cout

由于计算机的局限性,多位数的乘法要执行多次加法而且要浪费大量的器件,因此在计算机中乘法运算采用的方法是:累加与移位相结合

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 0. 1 0 0 0 1 1 1 1

FA

FA FA

FA FA

FA FA FA

FA FA FA

FA

C00C10C20C30

C01C11C21C31

C02C12C22C32

C03C13C23C33

P0P1P2P3P4P5P6P7

FA

x

y

s

Cin

Cout

R

由于计算机的局限性,多位数的乘法要执行多次加法而且要浪费大量的器件,因此在计算机中乘法运算采用的方法是: 将 n 位乘转换成 n次“累加与移位”,也就是每一步只求一位乘数所对应的新部分积,并与原部分积作一次累加,然后右移一次。

计算机内实现原码一位乘:无符号数一位乘的算法流程框图为下图:其中:图中使用了三个寄存器 A、 B和 C B用来存放被乘数, C 存放乘数。 A初值为 0 ,然后存放部分积,最后存放乘积高位

开始

N 位被乘数 BN 位乘数 C , 0 A

C0= 1 ?

A+B A

A+0 A

A、 C 右移一位

重 复 n 次

结束Y

N

N

Y

设 X=1101 Y=1011 求 X﹡Y= ? B( 被乘数) C0 A C( 乘数)

C0 A C( 乘数) 0 0 0 0 0 1 0 1 1 C0 = 1 +B 1 1 0 1 0 1 1 0 1 0 0 1 1 0 1 1 0 1 C0 = 1 +B 1 1 0 1 1 0 0 1 1 0 1 0 0 1 1 1 1 0 C0 = 0 + 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 1 1 C0 = 1 +B 1 1 0 1 1 0 0 0 1 0 1 0 0 0 1 1 1 1

1 1 0 1

0 0 0 00 1 0 1 1初始状态

第一节拍

第二节拍

第三节拍

第四节拍1101×1011= 10001111

1. 硬件实现无符号数一位乘2. 软件实现无符号数一位乘

可用子程序实现乘法运算。算法仍然是将乘法化为多次累加和移位

二、带符号数一位乘 定点原码一位乘的方法和无符号数的方法一样。 实现方法是将符号位与数值位分别处理 一般带符号数的运算用补码比较方便,可以先讨

论论补码一位乘的算法。

原码一位乘法的运算规则 设 x=xf.x1x2···xn , y=yf.y1y2···yn ,乘积为 P ,乘积的符号位为 Pf ,则

求 |P| 的运算规则如下:① 被乘数和乘数均取绝对值参加运算,符号位单独考虑。② 被乘数取双符号,部分积的长度同被乘数,初值为 0 。③ 从乘数的最低位 yn开始判断,若 yn=1 ,则部分积加上

被乘数 |x| ,然后右移一位;若 yn=0 ,则部分积加上 0 ,然后右移一位。

④ 重复③,判断 n次。

⊕f f fP = x y

P = x y

原码一位乘法——例题

例 已知 X=0.1101 , Y= - 0.1011 ,用原码一位乘法求 [X·Y] 原。

解: |X|=00.1101(取双符号位 ) ,|Y|=0.1011(取单符号位 )

部分积 乘数 yn

0 0 0 0 0 0 0. 1 0 1 1 +X 0 0 1 1 0 1

0 0 1 1 0 1 右移 1 位→ 0 0 0 1 1 0 1 0. 1 0 1 1( 丢失 )

+X 0 0 1 1 0 1 0 1 0 0 1 1

右移 1 位→ 0 0 1 0 0 1 1 1 0.1 0 1( 丢失 )

+0 0 0 0 0 0 0 0 0 1 0 0 1

右移 1 位→ 0 0 0 1 0 0 1 1 1 0. 1 0( 丢失 ) +X 0 0 1 1 0 1

0 1 0 0 0 1 右移 1 位→ 0 0 1 0 0 0 1 1 1 1 0 1( 丢失 )

乘积高位 乘积低位

⊕ ⊕由于

所以f f fP = x y = 0 1= 1£¬ P = x y = 0.10001111£¬

x y = 1.10001111

1. 校正法设 [X] 补 = X0X1X2 … Xn , [Y] 补 = Y0Y1Y2 … Yn

( 1 )当 Y>0 ,即 Y0=0 时, [X] 补﹡ [Y] 补 = [X] 补﹡ Y= [X﹡Y] 补

( 2 )当 Y<0 ,即 Y0=1 时, 则 [Y] 补 = 2+Y, Y= [Y] 补 - 2= 1·Y1Y2 … Yn – 2 = 0·Y1Y2 … Yn -1 ∴ X﹡Y=X(0·Y1Y2 … Yn) –X 则 [X﹡Y] 补 =[X] 补﹡ (0·Y1Y2 … Yn)+[-X] 补

定点补码一位乘 ----校正法

校正法定点补码一位乘的规律

( 1 )乘数 Y 的符号位不参加运算,用 [X] 补 乘上 [Y] 补的数值位。

( 2 )若 Y 为负数,则对求得的积再做一次加[-X] 补的校正。

( 3 )结果的符号由运算结果得出。

例 1 X=-0.1101,Y=+0.1011, 求 X Y =﹡ ?[X] 补 = 11.0011 , [Y] 补 = 0.1011

高位部分积 低位部分积 /乘数 操作说明 0 0. 0 0 0 0 1 0 1 1 开始部分积为 0, 判断乘数末位 +) 1 1. 0 0 1 1 ∵ 乘数最低位为 1 ,∴ +[X] 补

1 1. 0 0 1 1 1 1. 1 0 0 1 1 1 0 1 1 (丢掉)右移部分积和乘数,判末位 +) 1 1. 0 0 1 1 ∵ 乘数最低位为 1 ,∴ + [X] 补

1 0. 1 1 0 0 1 1. 0 1 1 0 0 1 1 0 1 (丢掉) 右移部分积和乘数,+) 0 0. 0 0 0 0 ∵ 乘数最低位为 0 ,∴ +0 1 1. 0 1 1 0 1 1. 1 0 1 1 0 0 1 1 0 (丢掉) 右移部分积和乘数,计数+) 1 1. 0 0 1 1 乘数最低位为 1 ,∴ + [X] 补

1 0. 1 1 1 0 1 1. 0 1 1 1 0 0 0 1 1 (丢掉) 右移部分积和乘数,计数

[X*Y] 补 =1 1.0 1 1 1 0 0 0 1, X﹡Y= - 0.1 0 0 0 1 1 1 1

例 2 X= - 0.1101,Y= - 0.1011, 求 X﹡Y = ? [X] 补 = 11.0011 , [Y] 补 = 11.0101 , [-X] 补 =00.1101 高位部分积 低位部分积 /乘数 操作说明 0 0. 0 0 0 0 0 1 0 1 开始部分积为 0, 判末位 +) 1 1. 0 0 1 1 ∵ 乘数最低位为 1 ,∴ +[X] 补

1 1. 0 0 1 1 1 1. 1 0 0 1 1 0 1 0 1 (丢掉) 右移部分积和乘数,+) 0 0. 0 0 0 0 ∵ 乘数最低位为 0 ,∴ +0 1 1. 1 0 0 1 1 1. 1 1 0 0 1 1 0 1 0 (丢掉) 右移部分积和乘数,+) 1 1. 0 0 1 1 ∵ 乘数最低位为 1 ,∴ +[X] 补

1 0 . 1 1 1 1 1 1. 0 1 1 1 1 1 1 0 1 (丢掉) 右移部分积和乘数,+) 0 0. 0 0 0 0 ∵ 乘数最低位为 0 ,∴ +0 1 1. 0 1 1 1 1 1. 1 0 1 1 1 1 1 1 0 (丢掉) 右移部分积和乘数,

X Y﹡ = 1 1. 1 0 1 1 1 1 1 1

∵Y 为负数,对求得的积需再做一次加 [-X] 补的 校正。 [-X] 补 =00.1101∴[X+Y] 补 =1 1. 1 0 1 1 1 1 1 1+ 0 0. 1 1 0 1 =0 0. 1 0 0 0 1 1 1 1 所以 : X﹡Y= + 0. 1 0 0 0 1 1 1 1

X= - 0.1101,Y= - 0.1011, 求 X﹡Y = ?

比较法 (Booth法 )这种方法不用区分乘数符号的正负,而且让乘数符号位也参加运算。运算规则如下:

( 1 )参加运算的数用补码表示;( 2 )符号位参加运算;( 3 )被乘数一般取双符号位 , 参加运算 , 部分积初值为 0 ;( 4 )乘数取单符号位( 5 )乘数末位增设附加位 Yn+1 ,且初值为 0 ;( 6)逐次比较相邻两位并按 Yn+1-Yn 的结果运算 .( 7 )移位按补码右移规则进行 , 即右移过程中符号位也随着右移并且符号位保持不变;但第 n+1步不再移位,仅根据 Y0 和 Y1 的比较结果作相应的运算即可。

Yi Yi-1 ai= Yi-1- Yi 操作

0 0

0 1

1 0

1 1

0

1

-1

0

部分积 +0, 右移一位部分积 +[X] 补 , 右移一位部分积 +[-X] 补 , 右移一位部分积 +0, 右移一位

开始

N 位被乘数 B, 0 AN 位乘数 C , 0 C-1

C0C-1=?

A-B AA+B A

A、 C 右移一位

重 复 n 次

结束

Y

N

=01

=10

A+0 A

=00 或 11

例:设 [X] 补 = 0.1101 , [Y] 补 = 1.0110 ,求 X﹡Y = ?

加法器和被乘数采用双符号位。 [-X] 补 =11.0011 高位部分积 低位部分积 / 乘数 附加位 操作说明 0 0.0 0 0 0 1 0 1 1 0 0 0 0.0 0 0 0 0 1 0 1 1 0 YnYn+1= 00, 右移部分积和乘数一位+1 1.0 0 1 1 YnYn+1= 10, + [-X] 补

1 1.0 0 1 1 1 1.1 0 0 1 1 0 1 0 1 1 右移部分积和乘数一位 1 1.1 1 0 0 1 1 0 1 0 1 YnYn+1= 11, 右移部分积和乘数一位+0 0.1 1 0 1 YnYn+1= 01, + [X] 补

0 0.1 0 0 1 0 0.0 1 0 0 1 1 1 0 1 0 右移部分积和乘数一位+1 1.0 0 1 1 YnYn+1= 10, + [-X] 补

1 1.0 1 1 1 1 1 1 0 最后一次不右移

∴ [X﹡Y] 补 =11.01111110 ,∴ X﹡Y =-0.10000010

3.4 定点除法运算

一、无符号数一位除 运算和定点原码的乘法一样 , 两个原码数相除 ,通常有恢复余数法和不恢复余数法 .

1. 无符号数恢复余数法 在计算机中实现除法运算,就要解决如何判断够减与否的问题,可用 2种方法:(1) 设置一个比较线路,专门用来比较被除数 (余数 ) 与除数的大小。(2)直接作减法试探。

运算规则:1. 第一次做减法即+ [-B] 补,用来判别溢出的情况

2. 当某一次求商,它减得的差值为负,本次商上 0 ,同时把除数加到差上,恢复余数为原来得正值,然后再左移。

3. 当某一次求商,减得的差值为正,就没有恢复余数的操作,上商为 1 ,余数左移一位。

4. 注意余数一般是通过 n次左移后得出的结果,那么真正的结果应该是这个数 ×2 - n

例 3.38 假设 X=0.1011,Y=0.1101, 求 X/Y 。解: [ -Y]补 =11.0011 ,取双符号位, -Y 用 +[ -Y]补取代。得出: X/Y=0.1101 余数 =0.0111×2-4

这种方法的缺点是:当某一次 -Y 的差值为负时,要多一次 +Y恢复余数的操作,降低了执行速度,又使控制线路变得复杂,因此在计算机中很少采用。计算机中普遍采用的是不恢复余数的除法方案,又称之为加减交替法。

当余数为正时,商上 1 ,求下一位商的办法是余数左移一位,再减去除数; 当余数为负时,商上 0 。求下一位商的办法是余数左移一位,再加上除数。 如果最后一次上商为 0 ,而又需得到正确余数则在这最后一次仍需恢复余数。

因为每次求一位商,余数左移一位,所以最后所得的余数应右移 n 位(对 n 位数相除而言)即×2-n ,余数应与被除数同号。

例 设 [X] 原 = 0.1101 , [Y] 原 = 0.1111 ,用原码恢复余数法求: [X/Y] 原 。

解: 按除法规则,符号位 Zs= Xs ⊕Ys = 0 | X| =0 0.1101 , | Y| =0 0.1111 符号位补码 [ -| Y | ] 补 = [| Y | ] 变补 =11.0001 , 绝对值除法| X| / | Y|如下:

被除数 0 0. 1 1 0 1 0. 0 0 0 0 说 明加 [-︱ Y︱ ] 补 +) 1 1. 0 0 0 1 -| Y|

1 1. 1 1 1 0 0. 0 0 0 0 余数为负,商上 0,恢复余数 加 ︱ Y ︱ +) 0 0. 1 1 1 1 0 0. 1 1 0 1 左移 1位 0 1. 1 0 1 0 0. 0 0 0 加 [-︱ Y︱ ] 补 +) 1 1. 0 0 0 1 -| Y|

0 0. 1 0 1 1 0. 0 0 0 1 余数为正,商上 1,左移 1位 0 1. 0 1 1 0 0. 0 0 1 加 [-︱ Y︱ ] 补 +) 1 1. 0 0 0 1 -| Y|

0 0. 0 1 1 1 0. 0 0 1 1 余数为正,商上 1左移 1位 0 0. 1 1 1 0 0. 0 1 1 加 [-︱ Y︱ ] 补 +) 1 1. 0 0 0 1 -| Y|

1 1. 1 1 1 1 0. 0 1 1 0 余数为负,商上 0,恢复余数

加︱ Y ︱ +) 0 0. 1 1 1 1 0 0. 1 1 1 0左移 1位 0 1. 1 1 0 0 0. 1 1 0加 [-︱ Y︱ ] 补 +) 1 1. 0 0 0 1 -| Y|

0 0. 1 1 0 1 0. 1 1 0 1 余数为正,商上 1 | X| / | Y| = 0.1101 + 0.1101×2- 4 / | Y| [Z] 原 = 0.1101 , Z= 0.1101 , 余数 R = 0.1101× 2- 4 ,

其处理思想是:先减除数后判断,如减后发现不够减,则在下一步改作加除数操作。这样操作步骤固定易于编程。商的符号:商的符号: QQff=x=xff y⊕y⊕ ff, , 商的值:商的值: |Q||Q|== |x|/|y||x|/|y|其运算规则: 其运算规则: (1) (1) 符号位不参与运算,并要求符号位不参与运算,并要求 |X|<|Y||X|<|Y| ; ; (2) (2) 取双符号位取双符号位表示表示,先用被除数减去除数:,先用被除数减去除数: ··余数为正时,商上余数为正时,商上 11 ,余数左移一位,再减去,余数左移一位,再减去除数;除数;      ··余数为负时,商上余数为负时,商上 00 ,余数左移一位,再加,余数左移一位,再加上除数;上除数;   (3)(3) 当第当第 n+1n+1 步步余数为负余数为负时,需恢复余数,时,需恢复余数,再加上再加上除数除数,,但不移位但不移位,以保持,以保持余数为正余数为正。 。

98

2. 无符号数不恢复余数法

运算规则:1. 第一次做减法即+ [-B] 补,用来判别溢出的情况

2. 当某一次求商,它减得的差值为负,本次商上 0 ,然后左移,并且加上除数 [Y] 补。

3. 当某一次求商,减得的差值为正,上商为 1 ,余数左移一位,然后+ [-Y] 补。

4. 注意余数一般是通过 n次左移后得出的结果,那么真正的结果应该是这个数 ×2 - n

5. 如果最后一次的余数为负,正确的余数应为+ Y恢复后的正余数 ×2 - n 。

6. 用不恢复余数除法完全可以代替恢复余数除法,且 n 位数除以 n 位数,只用做 n+ 1次加减法,n次移位就可以了,缩短了除法时间。

被除数(余数) A 商 C 操作说明 0 0 1 0 1 1 0 0 0 0 0 初始状态+) 1 1 0 0 1 1 + [- Y] 补

1 1 1 1 1 0 0 0 0 0 0 不够减,商上 0 1 1 1 1 0 0 0 0 0 0 0 左移+) 0 0 1 1 0 1 + Y 0 0 1 0 0 1 0 0 0 0 1 够减,商上 1 0 1 0 0 1 0 0 0 0 1 0 左移+) 1 1 0 0 1 1 + [- Y] 补

0 0 0 1 0 1 0 0 0 1 1 够减,商上 1 0 0 1 0 1 0 0 0 1 1 0 左移+) 1 1 0 0 1 1 + [- Y] 补

1 1 1 1 0 1 0 0 1 1 0 不够减,商上 0 1 1 1 0 1 0 0 1 1 0 0 左移+) 0 0 1 1 0 1 + Y 0 0 0 1 1 1 0 1 1 0 1 够减,商上 1

例 X= 0.1011,Y= 0.1101, 求 X/Y = ? [-Y] 补 = 11.0011

商余数

X/Y=0.1101 余数= 0.0111×2-4

例 : 设 X= 0.100 ,Y= -0.101 ,用加减交替法求 [X/Y] 原。

[-|Y|] 补 =11.011 ,

计算过程如右 :

0 0 1 0 0 0 0 0 0 开始情形

1 1 0 1 1 +[-|Y|] 补

1 1 1 1 1 0 0 0 0 余数为负 ,商上 0

1 1 1 1 0 0 0 0 0 左移

0 0 1 0 1 +[|Y|] 补

0 0 0 1 1 0 0 0 1 余数为正 ,商上 1

0 0 1 1 0 0 0 1 0 左移

1 1 0 1 1 +[-|Y|] 补

0 0 0 0 1 0 0 1 1     余数为正 ,商上 1

0 0 0 1 0 0 1 1 0 左移

1 1 0 1 1 +[-|Y|] 补 1 1 1 0 1 0 1 1 0 余数为负 ,商上 0

0 0 1 0 1 最后一步余数为负时需

0 0 0 1 0 +[|Y|] 补得到正确的余数

被除数 (余数 R) (被除数 )(商) 操作说明

余数 商

+)

+)

+)

+)

+)

3

0 1 1

[ ] 1.110

0.010 2

f f fQ X Y

X Y

原r

注意:余数与被除数同号

解:| X| =00 1000 ,| Y| =00 1010

按除法规则,符号位 Zs=Xs ⊕ Ys=1

[ -| Y| ] 补 = [| Y| ] 变补 = 11 0110

绝对值除法| X| / | Y|如下:

例 X =+ 1000 , Y =- 1010 ,用原码加减交替法求 [X

/Y] 原。

解: | X| =00 1000 ,| Y| =00 1010

按除法规则,符号位 Zs=Xs ⊕ Ys=1

[ -| Y| ] 补 = [| Y| ] 变补 = 11 0110

绝对值除法| X|/ | Y|结果为: X|/ | Y| = 0.1100 + 1000×2 - 4 / | Y|

结果商为 [Z] 原 = 11100 , Z = -1100 余数 R = -0.1000

例 X =-1000 , Y =+1010 ,用原码加减交替法求 [X/ Y] 原。

| X| / | Y| = 11100 + 1000×2 - 4 / | Y| 结果商为 [Z] 原 = 11100 , Z = -1100 ,余数 R = 0.1000 ,

3. 软件实现无符号数除法 在无除法指令的机器中,可用子程序实现除法运算。

二、带符号数一位除 实现符号数一位除的一种方法是: 将被除数和除数的绝对值按无符号数除法得到商及 余数;若两数异号,商符取负,否则取正;余数符 号与被除数符号相同。 一般符号数用补码表示,所以我们直接用补码进行 进行除法运算。 补码一位除(补码不恢复余数法)为:

1.参加运算的数用补码表示,符号位参加运算,除数与被除数均用双符号补码表示。

2.被除数与除数同号,求商时用被除数高位部分减去除数;被除数与除数异号,被除数高位部分加上除数。

3.若余数与除数同号,上商 1 ,余数左移一位减去除数;若余数与除数异号,上商 0 ,余数左移一位加上除数。注意:余数左移加上或减去除数后就得到了新余数。4.采用校正法包括符号位在内,应重复 3步骤 n+1次。

1. 商的校正原则。(采用末位恒置“ 1” 的方法)① 当刚好能除尽时(即运算过程中任一步余数为 0 ),

如果除数为正,则商不必校正,若除数为负,则商需要校正,即加 2-n 进行修正。

② 不能除尽时,如果商为正,则不必校正;若商为负,则商需要加 2-n 进行修正。

2. 余数的校正原则。① 若商为正,当余数与被除数异号时,则应将余数加

上除数进行修正才能获得正确的余数。② 若商为负,当余数与被除数异号时,则余数需减去

除数进行校正。3. 商的符号。如果第一步操作不发生溢出,得到的就是正确的商符。

例:已知 X=0.100 , Y= - 0.101 ,用补码一位不恢复余数除法求 [X/Y] 补。

解: [X] 补 =0.100 , [Y] 补 =11.011 , [-Y] 补 =00.101

0 0 1 0 0 0 0 0 0 开始情形

1 1 0 1 1 X 和 Y 异号, [Y] 补 +[Y] 补

1 1 1 1 1 0 0 0 1 余数与 Y 同号 ,商上 1

1 1 1 1 0 0 0 1 0 左移

0 0 1 0 1 +[-Y] 补

0 0 0 1 1 0 0 1 0 余数与 Y 异号 ,商上 0

0 0 1 1 0 0 1 0 0 左移

1 1 0 1 1 +[Y] 补

0 0 0 0 1 0 1 0 0     余数与 Y 异号 ,商上 0

0 0 0 1 0 1 0 0 0 左移

1 1 0 1 1 +[Y] 补 1 1 1 0 1 1 0 0 1 余数与 Y 同号 ,商上 1

被除数 (余数 R) (被除数 )(商) 操作说明

余数 商

+)

+)

+)

+)

例:已知 X=0.100 ,Y= - 0.101 ,用补码一位不恢复余数除法求 [X/Y] 补。

解: [X] 补 =0.100 ,[Y] 补 =11.011 ,[-Y] 补 =00.101

不能除尽,商为负,需校正: [X/Y] 补 =1.001+0.001=1.010

余数与被除数异号,需校正:余数 [r] 补 =(1.101+0.101)*2-3=0.010*2-3 (余数与被除数同号)

1 1 1 1 0 0 0 0 0 0 开始情形

1 1 0 1 1 X 和 Y 异号, [Y] 补 +[Y] 补

1 1 1 1 1 0 0 0 1 余数与 Y 同号 ,商上 1

1 1 1 1 0 0 0 1 0 左移

0 0 1 0 1 +[-Y] 补

0 0 0 1 1 0 0 1 0 余数与 Y 异号 ,商上 0

0 0 1 1 0 0 1 0 0 左移

1 1 0 1 1 +[Y] 补

0 0 0 0 1 0 1 0 0     余数与 Y 异号 ,商上 0

0 0 0 1 0 1 0 0 0 左移

1 1 0 1 1 +[Y] 补 1 1 1 0 1 1 0 0 1 余数与 Y 同号 ,商上 1

被除数 (余数 R) (被除数 )(商) 操作说明

余数 商

+)

+)

+)

+)

例:已知X= -0.0100 ,Y= 0.1000 ,用补码一位不恢复余数除法求 [X/Y] 补。

解: [X] 补 =11.1100 ,[Y] 补 =00.1000 ,[-Y] 补 =11.1000

不能除尽,商为负,需校正: [X/Y] 补 =1.001+0.001=1.010

余数与被除数异号,需校正:余数 [r] 补 =(1.101+0.101)*2-3=0.010*2-3 (余数与被除数同号)

3.5 浮点算术运算浮点数通常可写成: M•2E

其中: M 为该浮点数的尾数,一般为绝对值小于 1的 规格化二进制小数,用原码或补码表示 E 是该浮点数的阶码,为二进制整数,用移码 或补码表示。阶的底可用 2 、 8 或 16 ,常用 2 。

一、浮点加减运算1. 运算规则及硬件实现 设有 2 个浮点数: X= MX•2E

X

Y= MY•2EY

需要 5 个步骤才能完成加减运算:

(1) 对阶操作:2 个浮点数的阶码可能不同,要对齐后才能运算。对阶的规则是: 阶码小的数向阶码大的数对齐。

一般方法是用减法比较,即求: E=EX-EYE=0, 表示两数阶码相等,不需对阶。

若 0 ,则将原来阶码小的数的尾数右移 E位,并将其阶码值加上 E ;尾数右移时,对原码形式的尾数,符号位不参加移位,尾数最高有效位补 0 ;对补码形式的尾数,符号位保持不变并参加右移。尾数右移后,应对移掉的最高位进行舍入,常用 0 舍 1入法或恒置 1 法。

(2) 实现尾数的加 ( 减 ) 运算: 完成对阶后,按定点数加减运算规则求两数的和( 差 )

(3) 结果规格化:当运算的结果不是规格化数时,需将它转变成规格化数。设尾数用双符号位补码表示双符号位原码规格化尾数数值的最高位为 1双符号位补码应该是 00.1… 或 11.0….

a. 左规 当运算结果的符号位和最高有效位为 11.1 或 00.0 时,应将尾数连同符号位一起左移一位,阶码减1 ,直到尾数部分出现 11.0 或 00.1 形式为止 ,称为左规。

b. 右规 当尾数符号位为 01 或 10 时,此时应使结果尾数右移一位,并使阶码的值加 1 。这被称为向右规格化,简称右规。

(4) 舍入操作:当实行对阶或右规时,尾数低位移掉,使数值的精度受影响,有两种方法。A.“ 0”舍“ 1”入法。即移掉的最高位为

1 时则在尾数末位加 1 ,为 0 时则舍去移掉的数值。B.置“ 1”法。即右移时,丢掉的原低位的

值,把结果的最低位置成 1 。

(5) 溢出判断: 当阶码的符号位出现 01 或 10 时,表示溢出;而尾数的符号位为 01 或 10 时,表示运算结果需要右规。 浮点数的溢出是以其阶码溢出表现出来的,若阶码下溢,要置运算结果为机器 0 ;若上溢,则置溢出标志。 浮点加的运算方法可以用框图来描述:

开始

1. 比较两浮点数阶码右移较小数的尾数直到阶码相同

判上溢或下溢

3. 规格化和或右移并增加阶码;或左移减少阶码

需规格化 ?

结束

Y

2.尾数相加

Y

N 4. 舍入。对和按 0

舍 1 入法舍入

溢出处理

N

例:假定 X=2010﹡0.11011011 ; Y=2100 ﹡( -0.10101100 ),

求 X+Y= ?X 和 Y 在机器中的浮点补码表示形式为(双符号位) 浮点表示: 阶符阶符 阶码值 阶码值 数符 数符 尾数尾数

[X] 补 = 00 010 00 1 1 0 1 1 0 1 1[Y] 补 = 00 100 11 0 1 0 1 0 1 0 0(1)对阶: E=EX-EY

用双符号位补码运算: [△E] 补 =[Ex] 补 +[-Ey] 补

= 00010 +11100=11110 , △E=-2∴ 要求 Ex+2 ,应使 X 的尾数右移 2 位。保留阶码 E=

00100此时, [MX] 补 = 0 0 0 0 1 1 0 1 1 0 1 1

( 2 ) 尾数求和(用双符号位补码运算) :

0 0. 0 0 1 1 0 1 1 0 1 1+ 1 1. 0 1 0 1 0 1 0 0 1 1. 1 0 0 0 1 0 1 0 1 1 ( 3 )规格化:结果的符号位与最高数值位相同,

需左规,尾数左移 1 位变为: 11.00010101 10阶码减 1 变为: E= 00011 。( 4 )尾数“ 0”舍“ 1”入,得 [M] 补= 11.00

010110 ( 5 )判断溢出,阶码符号位为 00 ,无溢出。 X+Y=-0.11101010﹡2011

例 :已知两浮点数 X=- 0.101000×2-101 , Y=+0.111011×2-100

设:阶码 5 位(含 2 位阶符),尾数 8 位(含 2 位尾符) , 求 X- Y , 要求阶码、尾数都用补码表示。

解:按要求 : [X] 浮 =11 011 , 11.011000

[Y] 浮 =11 100 , 00.111011 ① 对阶

[ E]△ 补 =[EX] 补- [EY] 补 =[EX] 补 +[- EY] 补 =

[MX] 补 =11.101100 , [EX] 补 =11 100

[X] 浮 =11 100 , 11.101100

② 尾数相减

11 011+00 100=11 111

△E=- 1 , EX< EY , X 的尾数右移一位, EX+1 ;

[MX] 补- [MY] 补=[MX] 补+[-MY] 补 =11.101100+11.000101

=10.110001 [X- Y] 浮 =11,100 10.110001

③ 规格化 右规后 , [X- Y] 补 =11 101 , 11.0110001

④ 舍入处理 一般采用“ 0 舍 1 入法”,右规时末位丢弃 1 ,

11.011000 末位加“ 1”得 11.011001

则 [X- Y] 浮 =11,101 , 11.011001

⑤ 判溢出舍入处理后阶符为“ 11”说明无溢出。

所以 X- Y= — 0.100111×2 - 011

例 已知 X=0.11011011×2010 , Y=-0.10101100×2100 ,设:阶码 5 位(含 2 位阶符) ,尾数 10 位 ( 含 2 位尾符) 求 X + Y (要求阶码,尾数都用补码表示)。

解: [X] 浮 = 00 , 010 , 00.11011011

[Y] 浮 = 00 , 100 , 11.01010100

① 对阶 [ E]△ 补 =[EX] 补- [EY] 补 =[EX] 补 +[-EY] 补 =00 , 010 + 11 , 10

0

= 11 , 110

△E=-2 EX< EY MX 右移 2 位, EX 加 2 得 [X] 浮 =00 , 100 , 00.00110110 ( 1111 ) ② 尾数相加 [MX] 补 +[MY] 补 = 00.00110110(1111)+11.01010100

= 11.10001010(11)

③ 规格化 尾数为 11.1 1 0… 应左规,尾数左移 1次阶码减 1 。 [MX+MY] 补 =11.00010101(1010)

[EX+Y] 补 =00 , 011 ④ 舍入处理 采用“ 0 舍 1 入法”,右规时丢弃 1 个“ 1”, 11.00010101 末位加“ 11”得 11.00010110

⑤ 判溢出 舍入处理后,阶符为‘ 00’说明无溢出。

则 [X+Y] 浮 =00 , 011 , 11.00010110

则 X+Y = - 0.11101010×2011

例:设浮点数的阶码为 4 位(含阶符),尾数为 8 位(含尾符),按机器补码浮点运算步骤,完成下列 [x+y] 补、 [x-y] 补运算。

18 85 12

32 16X Y

二、浮点乘法运算乘法运算步骤: (1) 阶码相加并判溢出 (2) 尾数相乘(可按定点乘法运算的方法进行运算) (3) 规格化处理 (4) 舍入处理

三、浮点除法运算浮点除法运算步骤:

(1) 预置 (2) 尾数调整(如果被除数的尾数大于除数的尾数,则将被除数的尾数右移一位并相应调整阶码) (3) 求阶差 (4) 尾数相除(同定点除法)

2. 用软件方法实现浮点加 ( 减 ) 运算二、浮点乘法运算

1. 阶码的加减运算2. 乘法运算步骤: (1) 阶码相加并判溢出 (2) 尾数相乘 (3) 规格化处理 (4) 舍入处理

3. 用软件方法实现浮点乘法:三、浮点除法运算

1. 浮点除法运算步骤: (1) 预置 (2) 尾数调整 (3) 求阶差 (4) 尾数相除

2. 用软件方法实现浮点除法:

习题补充:设浮点数的阶码为 4 位(含阶符),尾数为 6位(含尾符), X , Y中的指数项均为二进制真值。

01 11

010 100

(1) 2 0.1101, 2 ( 0.1010),

(2) 2 0.1111, 2 0.1110,

X Y

X Y

X+Y=?求

X- Y=?求