1.29k likes | 1.42k Views
计算机组成原理. 第三章 运算方法与运算部件. 计算机中完成运算的主要部件就是 CPU 中的算术逻辑运算单元 ALU 计算机的运算可以分为: 数值运算和非数值运算 数值运算的基础是定点与浮点,其中以加法为核心. 1. 定点加减运算. 一、补码加减运算 计算机中,常用补码进行加减运算。 补码可将减法变加法进行运算。 补码运算特点:符号位与数值位一同运算。 运算的基本规则: [X] 补 +[Y] 补 = [X+Y] 补 [X-Y] 补 = [X] 补 -[Y] 补 = [X] 补 +[-Y] 补
E N D
计算机组成原理 第三章 运算方法与运算部件
计算机中完成运算的主要部件就是CPU中的算术逻辑运算单元ALU计算机中完成运算的主要部件就是CPU中的算术逻辑运算单元ALU 计算机的运算可以分为: 数值运算和非数值运算 数值运算的基础是定点与浮点,其中以加法为核心
1. 定点加减运算 一、补码加减运算 计算机中,常用补码进行加减运算。 补码可将减法变加法进行运算。 补码运算特点:符号位与数值位一同运算。 运算的基本规则: [X]补+[Y]补= [X+Y]补 [X-Y]补= [X]补-[Y]补= [X]补+[-Y]补 由[Y]补求得[-Y]补的方法:对[Y]补(包含符号位)求反且末位加1。
证明: 在模2下,设[X]补= X0X1X2… Xn, [Y]补= Y0Y1Y2… Yn 则[X]补=2· X0+X ,[Y]补=2· Y0+Y 1.[X]补+[Y]补= 2· X0+X + 2· Y0+Y=2(X0+Y0)+(X+Y) (1)若X0Y0 =00,则 [X]补+[Y]补= X+Y= [X+Y]补; (2)若X0Y0 =01或10,则 [X]补+[Y]补=2+(X+Y) 当X+Y>0时, 2+(X+Y)>2,进位丢失,得: [X]补+[Y]补=X+Y= [X+Y]补; 当X+Y<0时, [X]补+[Y]补=2+(X+Y) = [X+Y]补; (3)若X0Y0 =11,则 [X]补+[Y]补= 4+(X+Y) =2+[2+(X+Y)] ∵0 > X+Y ≥ -1 ,∴2 > 2+(X+Y) ≥ 1 此时,[X]补+[Y]补= 2+(X+Y) = [X+Y]补(2自然丢失)
2、∵[X]补+[Y]补= [X+Y]补 ∴ [Y]补= [X+Y]补-[X]补 ……① 又∵[X-Y]补=[X+(-Y)]补= [X]补+[-Y]补 ∴ [-Y]补= [X-Y]补-[X]补 ……② ①+②得: [Y]补+[-Y]补= [X+Y]补-[X]补 +[X-Y]补-[X]补 = [X+Y+ X-Y]补-[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, Sf1Sf2 双符号含义: 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,运算结果正向溢出。
例4:X= - 0.1011,Y= 0.0111, 求 [X-Y]补=? 解: [X]补= 11.0100+1=11.0101 [Y]补=00.0111 [-Y]补=11.1001 [X]补 = 11.0101 + [-Y]补 = 11.1001 [X+Y]补 =1 10.1110 两个符号位10不同,运算结果负向溢出。
补码加减法运算规则如下: • 参加运算的操作数用补码表示。 • 符号位与数值位一样参加运算。 • 如果是加法运算,则直接相加如果是减法,那么减数连同符号位一起取反,然后末位加1。 • 运算的结果仍然是补码形式。
移位运算 • 逻辑移位 • 循环移位 • 算术移位
逻辑移位 • 特点 • 移位操作对象不存在符号和量值的差别,非数值或无符号数 • 仅限于数码位置的变化 • 规则 • 左移或右移时高位或低位补0 • 移出位被丢弃 • 举例: • 逻辑右移:0101 -> 0010
循环移位 • 特点 • 移位操作对象不存在符号和量值的差别,非数值或无符号数 • 仅限于数码位置的变化 • 规则 • 左移或右移时高位或低位补0 • 移出位被置于低位或高位 • 举例: • 循环右移:0101 -> 1010
算术移位 • 移位时,数的符号位不变 • 算术运算数的移位操作会引起数值变化 • 右移一位,相当于带符号的数除以2(乘以1/2) • 左移一位,相当于带符号的数乘以2 • 对于正数 • 原码、反码和补码均相同,移位时只需要在末端补“0”。 • 对于负数的移位,不同码制的处理不同
算术移位 • 特点 • 移位操作对象存在符号和量值的差别,即:有符号数 • 不仅限于数码位置的变化,内涵是数值扩大或缩小两倍 • 规则 • 决定于编码方式
原码算术移位 • 规则 1. 符号位不变 2. 左移:仅移动量值位,低位补0 3. 右移:仅移动量值位,高位补0
A1 A2A3A4A5 A6A7 A8 11010111 A的始值 补0…… 丢失 结果 10101011 原码算术移位 • 原码 • 符号位不参与移位,只是绝对值移位,其末端补入0 例:算术右移运算
A1A2A3A4A5 A6A7 A8 10010101 A的始值 丢失 …… 补0 10101010 结果 原码算术移位 • 原码 例:算术左移运算
补码算术移位 • 规则 1. 符号位参与移位 2. 左移:低位补0 3. 右移:高位补原有符号位 • 溢出 • 左移、符号位发生改变 • 问题: 算术移位怎样才能保持正确的符号和正确的移位值?
补码算术移位 • 补码右移 例:设x= -1011000,则[x]补=10101000,第一位为符号位。现将其真值x右移,再求出其对应补码,列式如下: 不移位x = -1011000 [x]补= 10101000 右移一位½x = -0101100 [½x]补= 11010100 右移二位¼x = -0010110 [¼x]补= 11101010
A1 A2A3A4A5 A6A7 A8 A的始值 1 0 1 0 1 0 0 0 …… 丢失 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
A1 A2A3A4A5 A6A7 A8 10101000 A的始值 丢失…… 补0 结果产生错误 01010000 补码算术移位 • 补码左移 • 左移时其末端补入0,若符号位与后一位相同,则数值高位移入符号仍会得到正确的符号;若符号位与后一位不同,在左移时会溢出,会破坏正确的符号位,表示超出数的表示范围 • 为了保持正确符号,往往采用补码变形码,使其有两位或多位符号位
A1 A2A3A4A5 A6A7 A8 A的始值 1 0 1 0 1 0 0 0 …… 丢失 1 1 0 1 0 1 0 0 结果 符号位不变 反码算术移位 • 反码右移:符号位也随之右移且符号位不变
A1 A2A3A4A5 A6A7 A8 10101000 A的始值 丢失…… 补1 结果产生错误 01010001 反码算术移位 • 反码左移 • 左移时其末端补入1,若符号位与后一位相同,则数值高位移入符号仍会得到正确的符号;若符号位与后一位不同,在左移时会溢出,会破坏正确的符号位,表示超出数的表示范围 • 为了保持正确符号,往往采用具有两位或多位符号位的变形码
已知[x]补=0.1011,[y]补=1.1011,求算术左移,逻辑左移、算术右移、逻辑右移后的值。已知[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 被送到总线上,另外两个三态门的输出处于高阻态。 /G1 /G2 /G3 0 1 1 A B C
半加器 • 不考虑进位输入时,两数码Xn,Yn相加称为半加器。
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 全加器 • 若考虑低位进位输入Cn-1相加,则称为全加器。 一位全加器真值表如右,其中: • Xn为被加数, • Yn为加数, • Cn-1为低级进位信号, • Fn为和, • Cn为本级向上进位信号。 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 Cn-1 Cn Hn / Fn
串行加法器 • 步骤 • 加数最低位相加 • 保存求和结果和进位 • 加数右移一位,跳转到第一步 • 特点 • 仅需一位全加器 • 需要N个周期完成N位加法运算
并行加法器 • 全加器数目 = 操作数(加数)的位数 • N个全加器 • 特点 • 同时(同一周期)执行各位的加法运算
并行加法器 • 缺点 • 逐位完成的进位运算影响求和过程 • 最坏情况下接近串行加法器的性能 • 即1周期=N个加法/进位延迟 • 例如:1111 + 0001 • 结论 • 并行加法器的性能决定于进位机制的设计
并行加法器的进位链 • 进位函数 • 串行进位 • 并行进位 • 混合方式