资源描述
第第3 3章章 运算器与运算方法运算器与运算方法 3.1 3.1 运算器基本组成运算器基本组成3.2 3.2 算术与逻辑单元算术与逻辑单元3.3 3.3 移位运算移位运算3.4 3.4 定点加、减法运算定点加、减法运算3.5 3.5 定点乘法运算定点乘法运算3.6 3.6 定点除法运算定点除法运算3.7 3.7 浮点运算浮点运算3.1 3.1 运算器基本组成运算器基本组成 一、算术逻辑运算单元一、算术逻辑运算单元ALUALU二、通用寄存器组二、通用寄存器组三、专用寄存器三、专用寄存器四、附加的控制线路四、附加的控制线路一、算术逻辑运算单元一、算术逻辑运算单元ALU ALU 1 1、ALUALU:运算器中完成数据算术与逻辑运算的部件。2 2、ALUALU的基本框图:的基本框图: 两个输入端口,一个输出端口和多个功能控制信两个输入端口,一个输出端口和多个功能控制信号端。号端。 输入端口:输入端口:用来输入参加运算的操作数; 输出端口:输出端口:用来输出运算结果。 功能控制信号端:功能控制信号端:用来确定ALU所执行的处理功能等。 ALU控制信号输出功能控制输入2控制信号控制信号输入1多路开关多路开关多路开关图3.1 ALU的逻辑符号表示与多路开关一、算术逻辑运算单元ALU 二、通用寄存器组二、通用寄存器组 通用寄存器组:通用寄存器组:运算器内设有若干通用寄存器,用于暂时存放参加运算的数据和某些中间结果。用户可以通过指令去使用这些寄存器。 举例:举例:8086的通用寄存器包括8个16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。其中AX、BX、CX、DX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。 三、专用寄存器三、专用寄存器 用来记录指令执行过程中的重要状态标记,以及提供运算前后数据的暂存缓冲等。 举例:举例:8086的暂存寄存器、标志寄存器FLAGS。 有些专用寄存器对程序员是透明的透明的,有些专用寄存器对程序员是开放的开放的。 四、附加的控制线路四、附加的控制线路 3.1 运算器基本组成 结束3.2 3.2 算术与逻辑单元算术与逻辑单元一、半加器与全加器一、半加器与全加器二、串行进位与并行进位二、串行进位与并行进位三、三、ALUALU部件部件一、半加器与全加器一、半加器与全加器 1 1、半加器、半加器2 2、全加器、全加器1 1、半加器、半加器 (1)(1)、半加:、半加:两个一位二进制数相加(不考虑低不考虑低位的进位位的进位)。 (2)(2)、半加器:、半加器:实现半加操作的电路。1 1、半加器、半加器 (3)(3)、真值表:、真值表:XiYiHiCi0000011010101101 表中:表中:X Xi i、Y Yi i:二进制数相加;HiHi:半加和;CiCi:向高位的进位。 真值表真值表: :将自变量的各种可能的取值组合与其因变量的值一一列出来的表格形式。 1 1、半加器、半加器(4)(4)、逻辑表达式、逻辑表达式 iiiiiiiY X YX YX H Ci = XiYi 逻辑表达式逻辑表达式: :用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。1 1、半加器、半加器(5)(5)、逻辑图、逻辑图 (6)(6)、符号表示、符号表示 逻辑图逻辑图: :由逻辑门电路符号构成的,用来表示逻辑变量之间关系的图形称为逻辑电路图,简称逻辑图。2 2、全加器、全加器 (1)(1)、全加:、全加:考虑低位进位的加法运算。 (2)(2)、全加器:、全加器:实现全加运算的电路。 (3)(3)、真值表、真值表: : 表中:表中: Xi、Yi表示第i位的加数; Ci-1表示第i位的进位输入; Fi是第i位的全加和; Ci是第i位的进位输出。XiYiCi-1FiCi00000010101001011001001100110110101111112 2、全加器、全加器(4)(4)逻辑表达式:逻辑表达式: 1-iii1-iii1-iii1-iii1 - iiiiCYX CYX CYX CYX CYX Fii1-iii1-iii1-iii1-iii1-iiiiYX )CY(X CYX CYX CYX CYX C(5)(5)、逻辑图:、逻辑图: (6)(6)、符号表示:、符号表示: 二、串行进位与并行进位二、串行进位与并行进位加数:X= Xn Xn-1X1 ,Y= Yn Yn-1Y1和:F= Fn Fn-1F1 进位:Ci ,i=0,1,n 1、串行进位(行波进位) 2、先行进位(并行进位) 3、16位组间串行进位加法器 4、16位组间先行进位加法器1 1、串行进位、串行进位( (行波进位行波进位) ) (1)、串行进位:进位信号顺序地从低位传到高位的方法。(2)、串行进位加法器:采用串行进位的加法器。 2 2、先行进位(并行进位)、先行进位(并行进位) (1)、先行进位:进位信号同时送到各位全加器的进位输入端的方法。(2)、先行进位加法器:采用先行进位的加法器。(3)、进位的产生条件: 、C1的表达式: 011111)(CCYXYX、C2的表达式: 01122112222122222)()()(CCYXYXYXYXYXCYXYX、C3的表达式 0112233112233223333233333)()()()()(CCYXYXYXYXYXYXYXYXYXCYXYX2 2、先行进位(并行进位)、先行进位(并行进位)、C4的表达式 01122334411223344223344334444344444)()()()()()()()(CCYXYXYXYXYXYXYXYXYXYXYXYXYXYXCYXYXCi由Xi 、Yi 和C0确定。、进位传递函数:Pi=Xi+Yi。、进位产生函数:Gi=XiYi。 0111CCPG 0121222CCPPGPG01231232333CCPPPGPPGPG0123412342343444CCPPPPGPPPGPPGPG2 2、先行进位(并行进位)、先行进位(并行进位)(4)、4位先行进位产生电路:2 2、先行进位(并行进位)、先行进位(并行进位)(5)、4位先行进位加法器:2 2、先行进位(并行进位)、先行进位(并行进位)3、16位组间串行进位加法器2 2、先行进位(并行进位)、先行进位(并行进位)4、16位组间先行进位加法器 三、三、ALUALU部件部件1、4位并行进位ALU 74181外特性2、4位并行进位ALU 74181功能表 3、组间串行进位16位ALU 4、组间并行进位器件74182 5、组间并行进位16位ALU 1、4位并行进位ALU集成电路74181外特性 2、4位并行进位ALU集成电路74181功能表 3、组间串行进位16位ALU 4、组间并行进位器件74182 4 4、组间并行进位器件、组间并行进位器件74182 74182 5 5、组间并行进位、组间并行进位1616位位ALU ALU 3.2 算术与逻辑单元 结束3.3 3.3 移位运算移位运算 一、算术移位一、算术移位二、逻辑移位二、逻辑移位一、算术移位一、算术移位 1 1、操作:、操作: 寄存器中(有限位)(有限位)带符号数的移位,移位时,符号位保持不变符号位保持不变,仅数量变化。左移:x=2x 右移:x=1/2x 2 2、规则:、规则:码制添加代码正数原码、反码、补码0负数原码0补码左移:0(同原码)右移:1(同反码)反码1一、算术移位一、算术移位提问:提问:为什么补码左移同原码,右移同反码?答:答:补码由低位到高位出现第一个“1”的左边各位与反码相同,从“1”开始右边各位与原码相同。左移时,空位出现在低位,则添补的代码与原码相同;右移时,空位出现在高位,则添补的代码与反码相同。例如:x原=110100,x补=101100,x反=101011 3 3、举例:、举例:(5位寄存器) x原=0 0110 左移x原=0 1100 右移x原=0 0011 6 12 3 一、算术移位一、算术移位x原=1 0110 左移x原=1 1100 右移x原=1 0011x反=1 1001 左移x反=1 0011 右移x反=1 1100 x补=1 1010 左移x补=1 0100 右移x补=1 1101 -6 -12 -3x原=0 1001 左移x原=0 0010 右移x原=0 0100 9 2 4 一、算术移位一、算术移位4 4、溢出与舍入:、溢出与舍入: (1 1)、对于正数:)、对于正数: 左移最高位丢1:溢出(出错);右移最低位丢1:舍入(影响精度) (2 2)、对于负数:)、对于负数: 1)、原码:左移最高位丢1:溢出(出错);右移最低位丢1:舍入(影响精度) 2)、反码:左移最高位丢0:溢出(出错);右移最低位丢0:舍入(影响精度) 3)、补码:左移最高位丢0:溢出(出错);右移最低位丢1:舍入(影响精度) 二、逻辑移位二、逻辑移位寄存器中整组数据进行移位,空位补0。 3.3 移位运算 结束3.4 3.4 定点加、减法运算定点加、减法运算 一、原码定点加、减法一、原码定点加、减法二、补码定点加、减法二、补码定点加、减法一、原码定点加、减法一、原码定点加、减法 1 1、运算规则:、运算规则: (1)(1)、符号:、符号:比较两操作数的符号,确定是“求和”,还是“求差”。 (2)(2)、求和:、求和:两操作数的数值位相加。如数值最高位产生进位,则结果溢出。 (3)(3)、求差:、求差:被减数的数值位加上减数的数值位的补码。 1)、没有产生进位:符号位采用被减数的符号取反,数值位取补。 2)、产生进位:符号位采用被减数的符号,数值位不变。 一、原码定点加、减法一、原码定点加、减法2 2、举例:、举例:例1:已知 X原=10011、Y原=11010,计算X+Y原。解: 1)、符号:同号相加,所以是“求和”。和的符号位为1。 2)、求和:0011+1010=1101,无进位,没有溢出。 所以 X+Y原=11101 一、原码定点加、减法一、原码定点加、减法例2:已知 X原=10011、Y原=11010,计算X-Y原。解: 1)、符号:同号相减,所以是“求差”。 2)、差的数值位: 0011+(1010)补= 0011+0110=1001,最高数值位没有产生进位, 求补:(1001)补=0111 3)、差的符号位:采用X原的符号位取反,为0 所以 X-Y原=00111 二、补码定点加、减法二、补码定点加、减法 1 1、补码加、减法运算规则:、补码加、减法运算规则:和:X+Y补= (X补+Y 补)差:X-Y补= (X补+-Y 补)注意:注意:(1)、加、减法运算统一采用加法来处理;(2)、符号位(最高位)和数值位一起参与求和运算;(3)、符号位也在求和运算中直接得出。 二、补码定点加、减法二、补码定点加、减法2 2、举例:、举例:例例1 1、已知X补=01001、Y补=11011,求:X+Y补和X-Y补 解: (1)、-Y补=00101 (2)、X+Y补= (X补+Y补)=(01001+11011)=00100 (3)、X-Y补= (X补+-Y补)=(01001+00101)=01110二、补码定点加、减法二、补码定点加、减法例例2 2:已知X补=01010,Y补=01010,求X+Y补解: X+Y补=(01010+01010) = 10100 溢出 运算结果(两个符号相同的数相加)超出数的表示范围(-2n-12n-1-1)将产生溢出。例3:已知X补=10010,Y补=00100,求X-Y补。解: X-Y补=(10010+11100)= 01110 溢出 二、补码定点加、减法二、补码定点加、减法3 3、溢出判断:、溢出判断:(1)(1)、单符号法:、单符号法: 式中:Xf、Yf分别为X、Y的符号位; Sf为运算结果的符号位。 V=0:无溢出; V=1有溢出。(2)(2)、进位判别法:、进位判别法: 式中:Cn-1为最高数值位向符号位的进位值; Cn为符号位产生的进位输出值。 V=0:无溢出; V=1:有溢出。ffffffSYXSYXV1nnCCV二、补码定点加、减法二、补码定点加、减法(3)(3)、双符号法(变形补码法):、双符号法(变形补码法): 运算结果:00:正;11:负;01:正向溢出;10:负向溢出。 21ffSSV 式中:Sf1 、Sf2分别为运算结果的第一(左边第一位)符号位、第二符号位。 V=0:无溢出; V=1有溢出。 二、补码定点加、减法二、补码定点加、减法3.4 定点加、减法运算 结束3.5 3.5 定点乘法运算定点乘法运算 一、原码一位乘法一、原码一位乘法二、原码二位乘法二、原码二位乘法三、补码一位乘法三、补码一位乘法四、补码二位乘法四、补码二位乘法一、原码一位乘法一、原码一位乘法1 1、分析笔算乘法、分析笔算乘法 2 2、笔算乘法的改进、笔算乘法的改进3 3、运算规则、运算规则4 4、逻辑电路、逻辑电路5 5、操作流程、操作流程1 1、分析笔算乘法、分析笔算乘法设:X = 0.1011,Y = 0.1101,求XY所以:X Y = 0.10001111 结论:结论: 符号位单独处理,通过左移与多数同时求和实现乘法运算。运算过程 符号:心算,正正得正数值: 问题:问题: n个数同时相加。1 1、分析笔算乘法、分析笔算乘法返 回2 2、笔算乘法的改进、笔算乘法的改进 (1 1)、算式:)、算式:X Y = X 0.1101= 0.1X + 0.01X + 0.000X + 0.0001X= 0.1X + 0.01X + 0.001(0X + 0.1X)= 0.1X + 0.01X + 0.1(0X + 0.1X)= 0.1X + 0.1X + 0.1(0X + 0.1X)= 2-1X + 2-1 X + 2-1 (0X + 2-1X)= 2-1X + 2-1 X + 2-1 (0X + 2-1(X+0) 2 2、笔算乘法的改进、笔算乘法的改进(2 2)、运算过程:)、运算过程:通过加法(四次)与右移(四次)实现乘法运算。 X = 0.1011,Y = 0.11013 3、运算规则、运算规则 设X=xf.x1x2xn,Y=yf.y1y2yn,乘积为P,乘积的符号位为Pf,则:fffyxp(1)、符号位Pf:单独处理, 。(2)、数值位|P|:、被乘数和乘数均取绝对值参加运算;、置部分积初值为0;、从乘数的最低位开始判断yi(i=n),若yi=1,则部分积加上被乘数|x|,然后右移一位;若yi=0,则部分积加上0,然后右移一位;、重复,判断n次。(3)、该运算规则同样适合于整数原码。3 3、运算规则、运算规则例1、已知 X原=01101,Y原= 01011,求XY原。 解:(1)、符号位: 000fffyxp(2)、数值位: |X|=1101,|Y|=1011,|P|=0000,C=0 运算过程所以|P|=10001111因此XY原=010001111 返 回3、运算规则|X|: 11014 4、逻辑电路、逻辑电路5 5、操作流程、操作流程二、原码二位乘法二、原码二位乘法运算规则:运算规则:fffyxp1、符号位Pf:单独处理, 。2、数值位|P|:、部分积与被乘数均采用3位符号位,乘数末位增加1位T,部分积和T均置初值为0;表 、按表操作: 、若n为偶数(不含符号位),乘数用双符号,最后一次不移位;若n为奇数(不含符号位),乘数用单符号,最后一次移1位。3、该运算规则同样适合于整数原码。 设X=xf.x1x2xn,Y=yf.y1y2yn,乘积为P,乘积的符号位为Pf,则:二、原码二位乘法二、原码二位乘法yi-1yiT操 作000+0右移2位0T001+X右移2位0T010+X右移2位0T011+2X右移2位0T100+2X右移2位0T101-X右移2位1T110-X右移2位1T111+0右移2位1T返 回二、原码二位乘法二、原码二位乘法举例:设x=0.111111,y=-0.111001,用原码两位乘求xy原。解:(1)、符号位: 110fffyxp(2)、数值位: |X|=0.111111, 2|X|=1.111110, -|X|补=1.000001 |Y|=0.111001 运算过程所以|P|=0.111000000111因此XY原=1.111000000111二、原码二位乘法二、原码二位乘法返 回|X|=0.111111, 2|X|=1.111110, -|X|补=1.000001三、补码一位乘法运算规则运算规则( (布斯乘法布斯乘法):):、参与运算的数均以补码表示,符号位也参与运算;、被乘数和部分积取双符号位,乘数取单符号位;、部分积初值为0,乘数末位增加1位辅助位yn+1=0;、按下表操作n+1步,但最后一步不移位。yiyi+1操作00部分积加0, 右移一位01部分积加x补, 右移一位10部分积加-x补,右移一位三、补码一位乘法三、补码一位乘法举例:已知X补=01101,Y补=10110,-X补=10011。用布斯乘法计算XY补。解: 运算过程XY补=101111110三、补码一位乘法返 回四、补码两位乘法(1 1)、总结运算规则)、总结运算规则(2 2)、按照上课介绍的运算格式计算例)、按照上课介绍的运算格式计算例3.123.12。3.6 3.6 定点除法运算定点除法运算一、原码除法运算一、原码除法运算二、补码除法运算二、补码除法运算1、符号位qf:单独处理, 。一、原码除法运算一、原码除法运算 设被除数X=xf.x1x2xn,除数Y=yf.y1y2yn,商为Q,商的符号位为qf,则:fffyxq运算规则(不恢复余数的除法,加减交替法) :2、数值位|Q|:、被除数和除数均取绝对值参加运算,并要求|x|y|。、置部分余数初值为|x|,|Q|的初值为0。、首先用部分余数减|y|。、如果部分余数为正,上商1,部分余数和商左移一位后部分余数减去|y|; 如果部分余数为负,上商0,部分余数和商左移一位后部分余数加上|y|。、第n+1步不左移,但如果部分余数|R|为负,需将部分余数|R|其加上|y|,|R|2-n为余数(余数与被除数同号)。一、原码除法运算一、原码除法运算3、该运算规则同样适合于整数原码除法,只是要求 |被除数|除数|,被除数的位数可以是除数位数的2倍。一、原码除法运算一、原码除法运算举例:已知X原=0.1011,Y原=1.1101,求X/Y原。 解:(1)、符号位: 110fffyxq(2)、数值位: |X|=00.1011,|Y|补=00.1101,-|Y|补=11.0011运算过程所以|Q|=0.1101因此X/Y原=11101余数为0.01112-4一、原码除法运算一、原码除法运算返 回二、补码除法运算二、补码除法运算(1 1)、总结运算规则)、总结运算规则(2 2)、按照上课介绍的运算格式计算例)、按照上课介绍的运算格式计算例3.163.16。3.6 3.6 浮点运算浮点运算 一、浮点加、减法运算一、浮点加、减法运算二、浮点乘、除法运算二、浮点乘、除法运算一、浮点加、减法运算一、浮点加、减法运算设两个二进制浮点数X和Y为: X = Mx2Ex Y = My2Ey X Y = Mb2Eb 浮点数加减法的运算步骤: 1)对阶 2)尾数加减 3)尾数规格化 4)尾数的舍入处理 5)溢出判断 一、浮点加、减法运算一、浮点加、减法运算1 1、对阶:、对阶: 使两操作数的真实小数点位置对齐,即使阶码相等。 先求阶码差,小阶码向大阶码看齐。阶码小的尾数向右移位,每右移一位,阶码加1,右移的次数等于阶码差。尾数右移时有可能丢失数码,精度降低。 0.123000102 + 0.456000104 =0.001230104 + 0.456000104 =(0.001230 + 0.456000)104 =0.457230104 2 2、尾数加减:、尾数加减:将对阶后的两个尾数按定点加减法运算规则进行运算。 一、浮点加、减法运算一、浮点加、减法运算3 3、尾数规格化:、尾数规格化:(1)左规:当尾数计算结果不是规格化尾数,需将尾数变为规格化尾数。尾数左移k位,阶码减k。(2)右规:当尾数出现01.xxxx或10.xxxx时,在定点运算中表示溢出,但在浮点运算中不算溢出,可以通过右规格化处理。右规格化时,尾数右移一位,阶码加1。 4 4、尾数的舍入处理、尾数的舍入处理: 在对阶和尾数右规时,可能会将尾数的低位丢失,引起误差。为提高数据的计算精度,需要对结果尾数进行舍入处理。 一、浮点加、减法运算一、浮点加、减法运算(2)“恒置1”法: 尾数右移时,不论移去部分的最高位是1还是0,右移后的末位均置为末位均置为1 1。 (1)“0舍1入”法 : 尾数右移时,若移去部分的最高位为最高位为0 0,则舍去舍去,若移去部分的最高位为最高位为1 1,则在右移后的末位加末位加1 1(可能会因进位而引起溢出,需再次规格化)。 负数补码负数补码的舍入规则为:若负数补码移去部分的最最高位为高位为1 1且其余各位不全为且其余各位不全为0 0时时,在尾数末尾加末尾加1 1,其余情况不做舍入处理。 (3)恒舍法: 尾数右移时,不做舍入处理不做舍入处理。一、浮点加、减法运算一、浮点加、减法运算5 5、阶码溢出判断、阶码溢出判断: 若阶码正溢出阶码正溢出,表示浮点数已超出允许表示数范围的上限,置溢出标志置溢出标志。若阶码负溢出阶码负溢出,则运算结果趋于零,置结果为机器零置结果为机器零。否则,浮点数加、减法运算正常结束。 一、浮点加、减法运算一、浮点加、减法运算举例: 已知X = 0.110110112010,Y = -0.101011002100,计算X+Y(浮点数的阶码用4位补码表示,尾数用8位补码表示)。 解: X浮=0 0010 11011011 Y浮=1 0100 01010100 设:X+Y浮 = Mb2Eb (1)对阶: E = Ex Ey = 00 010 + 11 100 = 11 110 即:E = -2,Mx右移两位,Mx =0 0011011011 Eb = Ey = 0 100 一、浮点加、减法运算一、浮点加、减法运算(2)尾数加法:M b= M x+ M y 00 00110110 11 + 11 01010100 11 10001010 11 因此M b=11 10001010 11 (3)尾数规格化:尾数需左规 Mb左移K=1位:Mb = 11 00010101 1 Eb减1:Eb = 00 011一、浮点加、减法运算一、浮点加、减法运算(4)舍入处理:采用0舍1入法 Mb = 11 00010101 (5)阶码溢出判断:阶码无溢出,运算正常结束 X+Y 浮=1 0011 00010101 即:X+Y = -0.111010112011 二、浮点乘、除法运算二、浮点乘、除法运算X = Mx2Ex Y = My2Ey XY = (Mx2Ex)(My2Ey) = (MxMy )2Ex + Ey X/Y = (Mx2Ex )/(My2Ey) = (Mx/ My )2Ex - Ey 二、浮点乘、除法运算二、浮点乘、除法运算1 1、浮点数乘法的运算步骤:、浮点数乘法的运算步骤:(1)两浮点数相乘: 两浮点数相乘,乘积的阶码为相乘两数的阶码之和,尾数为相乘两数之积。 可以表示为:Mb = MxMy Eb= ExEy (2)尾数规格化: 如果不是规格化尾数,则需要左规。(4)阶码溢出判断: 与浮点数加、减法的阶码溢出判断相同。 (3)尾数舍入处理: 如果结果保留双字长乘积,不需要做舍入处理。如果保留单字长乘积,则需要做舍入处理。二、浮点乘、除法运算二、浮点乘、除法运算1 1、浮点数除法的运算步骤:、浮点数除法的运算步骤:(2)两浮点数相除: 两浮点数相除,商的阶码为被除数的阶码减去除数的阶码。商的尾数为相除两数的尾数之商。 可以表示为:Mb = Mx/My ,Eb = Ex - Ey (3)尾数规格化: 若溢出,执行右规。(5)阶码溢出判断: 与浮点数加、减法的阶码溢出判断相同。 (1)判断除数是否为0,若My=0,出错报告。 (4)尾数舍入处理: 与浮点数加、减法的尾数舍入处理相同。作业作业1 1、P91 92 2、已知X补=0.1011,Y补=1.1011,求算术左移、算术右移、逻辑左移、逻辑右移后的值3 3、已知X和Y,用变形补码计算X-Y,X+Y,同时指出运算结果是否溢出。(1)、X=27/32,Y=31/32;(2)、X=13/16,Y=-11/164 4、已知二进制数x= 0.1010,y= -0.1101。请按如下要求计算,并把结果还原成真值。(1)用原码一位乘法计算x y原。(2)用布斯乘法计算x y补。
展开阅读全文