1、计原及汇编计原及汇编3第三章 数值运算及运算器第一节 算术逻辑运算基础1.原码加减运算2.补码加减运算 两个基本关系式:n x+y补=x补+y补(mod M)n x-y补=x补+-y补(mod M)由y补求-y补的方法:将y补连同符号位一起求反加1。一、定点加减运算第三章 数值运算及运算器第三章 数值运算及运算器第三章 数值运算及运算器第三章 数值运算及运算器第三章 数值运算及运算器第三章 数值运算及运算器第三章 数值运算及运算器3.反码加减运算反码加减运算的规则:p 参加运算的操作数用反码表示。p 符号位参加运算。p 当操作码为加运算时,两数直接相加;当操 作码为减运算时,将减数连同符号位一
2、起求 反与被减数相加。p 如果符号位产生进位,则在末位加1,即循环 进位。p 运算结果为反码表示。第三章 数值运算及运算器二、溢出检测1.采用一个符号位判断规则:当两个同号数相加,若所得结果符号与两数符号不同,则表明溢出。设An、Bn分别表示两个操作数的符号;Sn表示结果的符号,则有:溢出=AnBnSn+AnBnSn 63+66=129 0,0111111 0,1000010 1,0000001+(-63)+(-66)=-129 1,1000001 1,0111110 10,1111111+第三章 数值运算及运算器2.采用最高有效位的进位判断 方法:两个正数相加,最高有效位有进位,符号位无进位
3、,表明运算结果发生溢出;两负数相加,最高有效位无进位,符号位有进位,表明结果发生溢出。设Cn表示符号位本身的进位,Cn-1表示最高有效位向符号位的进位;得出:溢出=CnCn-1+CnCn-1=CnCn-1 63+66=129 0,0111111 0,1000010 1,0000001+(-63)+(-66)=-129 1,1000001 1,0111110 10,1111111+第三章 数值运算及运算器3.采用变形补码(双符号位)判溢出n 正数:两个符号位均为0;00.x1x2xnn 负数:两个符号位均为1;11.x1x2xn溢出判断:两数相加,结果符号位为00、11,表示没溢出;结果符号位为
4、01表示正溢出,为10表示负溢出。OVRSn+1Sn如果用 Sn+1、Sn 分别表示最高符号位和第二符号位,则采用变形补码溢出检测电路:OVR=Sn+1 Sn 63+66=129 00,0111111 00,1000010 01,0000001+(-63)+(-66)=-129 11,1000001 11,0111110 110,1111111+第三章 数值运算及运算器三、移位n 按操作性质可分为三种类型:n 逻辑移位、循环移位、算术移位。1、逻辑移位 只有数码位置的变化,而无数量的变化。左移:低位补0。右移:高位补0。例:A寄存器的初值为 10110101 逻辑右移一位后为 01011010
5、 逻辑左移一位后为 01101010第三章 数值运算及运算器寄存器两端触发器有移位通路,形成闭合的移位环路。例:A寄存器的初值为 10011001循环右移一位后为 11001100循环左移一位后为 001100112、循环移位第三章 数值运算及运算器数的符号不变,而数值发生变化。o左移一位将使数值扩大一倍(乘以2)o右移一位则使数值缩小一倍(乘以1/2)o算术移位规则:(1)正数:原码、补码、反码左右移位时,空位均补入0(符号不变)。3、算术移位例:A寄存器初值:0.0110左移一位:0.1100 右移一位:0.0011第三章 数值运算及运算器(2)负数:)负数:o原码:符号位不变(为原码:符
6、号位不变(为1),空位补),空位补0。例:例:A寄存器的初值为寄存器的初值为 1.0110 算术左移一位后为算术左移一位后为 1.1100 算术右移一位后为算术右移一位后为 1.0011o补码:左移后的空位补补码:左移后的空位补0,右移后的空位补,右移后的空位补1。3、算术移位第三章 数值运算及运算器o例:初值:1.1011左移一位:1.0110右移一位:1.1101o 反码:移位后的空位补反码:移位后的空位补1。o例:初值:1.1011左移一位:1.0111右移一位:1.1101第三章 数值运算及运算器四、十进制运算1.进制转换2.直接进行十进制运算3.BCD码的加法运算第三章 数值运算及运
7、算器五、逻辑运算逻辑运算例:例(1)逻辑或:X=10100001,Y=10011011,XY=?10100001 X 10011011 Y 10111011 第三章 数值运算及运算器例(2)按位置“1”:设:A=10010010,将A最低位置“1”;设:B=00000001 10010010 A 00000001 B 10010011 A第三章 数值运算及运算器例(3):按位清设:A=10010010,将A最高位清“0”设:B=01111111 10010010 A 01111111 B 00010010 A第三章 数值运算及运算器例(4):按位测试设:A=10010010,测A最高位是否为“
8、1”;设:B=10000000 10010010 10000000 10000000结果不全为“0”,表明被测码的被测位为“1”。结果为全“0”,表明被测码的被测位为“0”。第三章 数值运算及运算器例(5)比较设:A=10010010,B=10010011,比较A,B内容相同否?10010010 10010011 00000001结果全“0”,则A,B内容相等,否则内容不等。第三章 数值运算及运算器第二节基本算术运算的实现 一、加法单元两个输出量:全加和 i 及向高位的进位Ci+1。全加器有三个输入量:第 i 位的两个操作数 Ai、Bi 和低位送来的进位 Ci;全加器框图:Ci+1CiBiAi
9、i第三章 数值运算及运算器全加器的功能表:全加和 i 及进位 Ci+1 的逻辑表达式:输入输出Ai Bi Cii Ci+10 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 10 01 01 00 11 00 10 11 1Ci+1=AiBiCi+AiBiCi+AiBiCi+AiBiCi=AiBi+(Ai Bi)Cii=AiBiCi+AiBiCi+AiBiCi+AiBiCi=Ai Bi Ci第三章 数值运算及运算器用半加器构成的全加器 CiAiBiiCi+1延迟时间延迟时间1T延迟时间延迟时间1.5T延迟时间延迟时间1.5T第三章 数值运算及运算器o加法器有两种形式:
10、串行加法器和并行加法器。二、串行加法器和并行加法器on 位字长的加法器仅有一位全加器,使用移位寄存器从低位到高位串行地提供操作数,分n步进行相加。(一)串行加法器(二)并行加法器 全加器位数和操作数位数相同,同时对所有位进行求和。第三章 数值运算及运算器二、串行加法器和并行加法器AB QC DCPiCi+1串行加法器逻辑图第三章 数值运算及运算器p并行加法器中传递进位信号的逻辑线路称为进位链三、并行加法器的进位结构p进位线路结构分为:串行进位、并行进位,将整个加法器分组(分级),对组内、组间(级间)分别采用串行或并行进位。第三章 数值运算及运算器(一)对进位公式的分析设相加的两个n位操作数为:
11、A=An-1An-2Ai.A0 B=Bn-1Bn-2Bi.B0Ci+1=AiBi+(Ai Bi)Ci 进位逻辑表达式o设:Gi=AiBi 进位产生函数(Carry Generate Function)Pi=Ai Bi 进位传递函数(Carry Propagate Function)o当Pi=1时,如果低位有进位,本位将产生进位。则:Ci+1=Gi+PiCi第三章 数值运算及运算器(二)串行进位(行波进位)n-1CnCn-1Bn-1An-1C2C0B0A0A1B1C10iN位串行进位的并行加法器第三章 数值运算及运算器(二)串行进位(行波进位)o串行进位的逻辑表达式:o最长进位延迟时间为 4+2
12、.5(n-1)T,与 n 成正比。CiAiBiiCi+1C1=G0+P0C0=A0B0+(A0 B0)C0C2=G1+P1C1=A1B1+(A1 B1)C1C3=G2+P2C2=A2B2+(A2 B2)C2 Cn=Gn-1+Pn-1Cn-1=An-1Bn-1+(An-1 Bn-1)Cn-1第三章 数值运算及运算器(三)并行进位(同时进位、先行进位)C1=G0+P0C0C2=G1+P1C1=G1+P1(G0+P0C0)C3=G2+P2C2=G2+P2(G1+P1(G0+P0C0)C4=G3+P3C3=G3+P3(G2+P2(G1+P1(G0+P0C0)o展开整理:C1=G0+P0C0C2=G1+
13、P1G0+P1P0C0C3=G2+P2G1+P2P1G0+P2P1P0C0C4=G3+P3G2+P3P2G1+P3P2P1G0+P3P2P1P0C0o全部进位输出信号仅由进位产生函数 Gi,进位传递函数 Pi 以及最低位进位 C0 决定,与低位进位无关。第三章 数值运算及运算器四位并行进位链线路G3P3P2G0G1G2P1P0GiPiAiBiAiBiC0C4C3C2C1每位进位延迟时间为每位进位延迟时间为4T第三章 数值运算及运算器A3B3G3P3A2B2G2P2A1B1G1P1A0B0G0P0C0C1C2C3C43210四位并行进位加法器第三章 数值运算及运算器o将n位加法器分成若干个小组,
14、小组采用并行、组间采用串行的进位结构。o例:将16位加法器分成4组,每组4位,组内采用并行进位结构,组间采用串行进位结构。(四)组内并行、组间串行的进位结构四位并行加法器1512C16A15B15A12B12四位并行加法器118C12A11B11A8B8四位并行加法器74C8A7B7A4B4四位并行加法器30C4A3B3A0B0C0o最高进位的形成时间为(4+32)T=10 To如果采用串行进位,最高进位的形成时间为(4+152.5)T=41.5 T第三章 数值运算及运算器(五)组内并行、组间并行的进位结构四位并行加法器1512C16A15B15A12B12四位并行加法器118C12A11B1
15、1A8B8四位并行加法器74C8A7B7A4B4四位并行加法器30C4A3B3A0B0C0G3P3*G2P2*G1P1*G0P0*组间并行进位链(I级)组内并行、组间并行的16位加法器第三章 数值运算及运算器o将加法器分成几个小组,每一小组包括几位,采用并行进位结构,小组间也采用并行进位。o再引入两个辅助函数 Gi*和Pi*;分别称为组进位产生函数和传递函数。pGi*为本小组产生的进位(与低位小组来的进位无关)。(五)组内并行、组间并行的进位结构pPi*为小组进位的传递条件(决定于低位小组进位能否传送至高位小组)。第三章 数值运算及运算器pGi*和Pi*的逻辑表达式:G0*=G3+P3G2+P
16、3P2G1+P3P2P1G0 P0*=P3P2P1P0G1*=G7+P7G6+P7P6G5+P7P6P5G4 P1*=P7P6P5P4 G2*=G11+P11G10+P11P10G9+P11P10P9G8 P2*=P11P10P9P8G3*=G15+P15G14+P15P14G13+P15P14P13G12 P3*=P15P14P13P12(五)组内并行、组间并行的进位结构C4=G3+P3G2+P3P2G1+P3P2P1G0+P3P2P1P0C0第三章 数值运算及运算器*G3P3P2G0G1G2P1P0P0C3C2C1C0*G0组内并行、组间并行进位结构p小组间产生四个进位,C4、C8、C12
17、和C16。C4=G0*+P0*C0C8=G1*+P1*C4=G1*+P1*G0*+P1*P0*C0C12=G2*+P2*C8=G2*+P2*G1*+P2*P1*G0*+P2*P1*P0*C0C16=G3*+P3*C12=G3*+P3*G2*+P3*P2*G1*+P3*P2*P1*G0*+P3*P2*P1*P0*C0o当Gi*、Pi*及C0形成后,C4、C8、C12和C16便可同时产生。G3P3P2G0G1G2P1P0C16C12C8C4C0*oC4、C8、C12和C16已由组间进位线路产生,组内并行进位线路不需要再产生这些进位,将其作适当修改,便可产生小组的本地进位Gi*和小组的传送条件Pi*
18、以及小组内的低3位进位。o例:16位加法器采用组内并行、组间并行进位结构的框图。o进位形成过程如下:从Ai、Bi、C0输入开始;经过4T形成C1、C2、C3及全部Gi*、Pi*;又经过2.5T形成C4、C8、C12、和C16;最后再经 2.5T 形成二、三、四、小组内的其余进位 C75、C119、C1513。最长进位形成时间:(4+2.5+2.5)T=9TG3P3P2G0G1G2P1P0C16C12C8C4C0*第三章 数值运算及运算器1、74181o算术逻辑单元,简称ALU,具有组内并行进位链,提供了辅助函数G,P供组间进位链使用。四、运算器举例74181S3S2S1S0CnMA=BCn+4
19、A0B0A1B1A2B2A3B3F0F1F2F3GP第三章 数值运算及运算器例:用74181和74182组成16位分二级同时进位 的加法器。利用并行进位链74182可产生向高一级进位链提供 _ _辅助函数G*、P*,用于位数更长时,组成第三级并行进位链。2、74182(先行进位发生器)提供:组间并行进位信号Cn+x,Cn+y,Cn+z 小组辅助函数:P,G四、运算器举例第三章 数值运算及运算器16位并行进位ALU结构Cn74181G741817418174181G2P2*G1P1*G0P0*74182A1512B1512A118B118A74B74A30B30F15F12F11F8F7F4 F
20、3F0 G3P3*P*CnZCnYCnX第三章 数值运算及运算器第三节定点乘法运算在计算机中实现乘除法运算的三种方式:p 软件实现;p在原有ALU的基础上增加一些逻辑线路以实 现乘除运算;p 设置专用的乘除法器。第三章 数值运算及运算器一、无符号数一位乘 例:x=0.1101 y=0.1011 0.1101 0.1011 1101 1101 0000 1101 0.10001111计算机计算:将n位乘转化为n次“累加与移位”。每一步只求一位乘数所对应的新部分积,并与原部分积作一次累加,然后移位一次。第三章 数值运算及运算器无符号数一位乘算法流程图开始n位被乘数=Bn位乘数=C,0=AC0=1?
21、A+0=AA+B=ANYA,C右移一位重复n次结束NY第三章 数值运算及运算器硬件实现无符号数一位乘N位加法器B(被乘数)控制逻辑CAC0Ca右移一位加B/加0乘数0 0 0 0 0 1 0 1 1 +B 1 1 0 1 1 0 1 1 0 1 1 0 10 0 1 1 0 1 1 0 1 +B 1 1 0 1 1 0 0 1 10 1 0 0 1 1 1 1 0 +0 0 0 0 0 0 1 0 0 10 0 1 0 0 1 1 1 1+B 1 1 0 11 0 0 0 10 1 0 0 0 1 1 1 1C0=1C0=1C0=0C0=1CaAC例:11011011的运算过程如下:B=110
22、1,C=10111101 1011=10001111第三章 数值运算及运算器二、带符号数一位乘法(1)被乘数x符号任意,乘数y符号为正设:x补=xn.xn-1x1.x0 y补 =0.yn-1yn-2y1 y0n1.校正法(补码乘法算法的推导)第三章 数值运算及运算器根据补码定义:x补=2+x(mod 2)y补=y=0.yn-1yn-2y1 y0 x补y补=2y+xy=2(yn-1y1 y0)+xy(mod 2)2(yn-1y1 y0)=2(mod 2)x补y补=2+xy=xy补(mod 2)即:xy补=x补y补=x补 y=x补(0.yn-1y1 y0)第三章 数值运算及运算器x补=xn.xn-
23、1xn-2x0y补=1.yn-1y1 y0=2+y(mod 2)y=y补-2=1.yn-1y1 y0-2=0.yn-1y1 y0-1x y=x(0.yn-1y1 y0)-xxy补=x(0.yn-1y1 y0)-x补 =x(0.yn-1y1 y0)补+-x补 =x(0.yn-1y1 y0)补-x补 =x补(0.yn-1y1 y0)-x补(2)被乘数x符号任意,乘数y为负第三章 数值运算及运算器xy补=x补(0.yn-1y1 y0)-x补ynoy0:yn=0 不需校正oy除数,调整比例因子。若:余数符号为1,被除数除数,够减,商“1”,余数为负,上一次余数除数,不够减,商“0”。恢复原来的余数。(
24、4)重复(2)(3)步骤,直到商的位数=操作数位数。无符号数恢复余数法算法:第三章 数值运算及运算器余数的符号与权的处理:(小数除法)(1)让加符号前的商和余数都保持正值,当最后一 步不够减时,应恢复余数(即:当余数为负数时,要加上除数,得到真正的余数)(2)进行了n步除之后,形式上的余数,应乘以2-n 才为真正的余数的值被除数(余数)采用2位符号位(变形补码)第三章 数值运算及运算器被除数(余数):A 商(C)00.1011 0.0000|初态(0)作减法+)11.0011 x+-y补余数 11.1110 为负,商0,恢复余 +)00.1101 0.000|0 数+y 00.1011 (1)
25、余数与商左 01.0110 0.00|0 移一位,减除数+)11.0011 +-y补,余数为 00.1001 0.00|01 正,商“1”01.0010 0.0|01 (2)余数与商左+)11.0011 移一位,减除数 00.0101 0.0|011 +-y补 00.1010 0.|011 余数为正,商“1”x=0.1011,y=0.1101,-y补=1.0011例:x=0.1011,y=0.1101,求x/y 00.1010 0.|011 (3)余数与商左 +)11.0011 移一位,减除数 +-y补 余数 11.1101 0.|0110 为负,商“0”,+)00.1101 恢复余数+y 0
26、0.1010 (4)余数与商左 01.0100|0.110 移一位,减除 +)11.0011 数+-y补 00.0111 0.1101 余数为正,商“1”商值为:0.1101,x/y的商=0.1101 余数为:0.01112-4x/y=0.1101+0.0111/0.1101 2-4第三章 数值运算及运算器2.无符号数不恢复余数法(加减交替法)对恢复余数法进行修正若ri0,商“1”,下一步:ri+1=2ri-y。若riA、C除数=BA、C左移一位A-BAAC0结束YNYN商0:0=C0A、C左移一位A+BAA、C左移一位A-BAAAY第三章 数值运算及运算器无符号数不恢复余数法原理框图N位加法
27、器B(除数)控制逻辑C AC0左移一位AB/AB商an-1a0被除数(余数):A 商(C)0 0 0 0 1 0 0 0|初态0 0 0 1 0 0 0|0 A、C左移一位+)1 1 0 1 减除数 1 1 1 0 0 0 0|0 为负,商0,下步左移后+y1 1 0 0 0 0|0 0 A、C左移一位+)0 0 1 1 加除数 1 1 1 1 0 0|0 0 为负,商0,下步左移后+y 1 1 1 0 0|0 0 0 A、C左移一位+)0 0 1 1 加除数 0 0 0 1 0|0 0 1 为正,商1,下步左移后-y x=00001000,y=0011,-y补=1101例:x=1000,y=
28、0011,求x/y第三章 数值运算及运算器被除数(余数):A 商(C)0 0 1 0|0 0 1 0 A、C左移一位+)1 1 0 1 减除数 1 1 1 1|0 0 1 0 为负,商0 +)0 0 1 1 恢复余数 0 0 1 0商值为:0010,余数为:0010 x/y=0010+0010/0011第三章 数值运算及运算器第五节 浮点运算一、浮点加减运算及实现o设有两个浮点数x和yx=2ExMxy=2EyMy Mx和My分别为x和y的尾数,Ex和Ey分别为x和y的阶码。第三章 数值运算及运算器1.对阶p阶码:反映了数的小数点位置。o浮点数相加减要求阶码相等,小数点的位置对齐,这个过程称为对
29、阶。浮点数相加减要求阶码相等,小数点的位置对齐,这个过程称为对阶。求阶差 E=Ex-Eyp若E=0,不需对阶。若E0,需对阶,按|E|调整阶码。保留大阶p对阶的规则:小阶向大阶看齐。阶码小的尾数向右移位,每右移一位阶码加1,直至阶差 为0。运算步骤例:两浮点数为 x=0.1101201 y=-(0.1010)211,求x+y=?解:x、y以补码表示:x补=00,01;00.1101 Ex Mxy补=00,11;11.0110 Ey My1.对阶 E补=Ex补-Ey补 =00,01+11,01=11,10 即 E=-2,x阶码 2m-1-1时,称为阶码上溢o当 阶码-2m-1时,称为阶码下溢5.
30、浮点数的溢出判断第三章 数值运算及运算器o 设两个浮点数分别为 x=2ExMx,y=2EyMy1、乘法运算:xy=2(Ex+Ey)(MxMy)o 乘积的阶码为:两数的阶码之和。o 乘积的尾数为:两数的尾数之积。二、浮点乘除运算及实现第三章 数值运算及运算器2、除法运算:x/y=2(Ex-Ey)(Mx/My)o商的阶码为:被除数的阶码减去除数的阶码之差。o商的尾数为:被除数的尾数除以除数的尾数所得的商。o讨论阶码运算(讨论对移码的运算规则和判定溢出的方法)。第三章 数值运算及运算器x移与x补:符号位相反,其数值位相同。x移=2n+x -2nx2nx移+y移=2n+x+2n+y=2n+(2n+x+
31、y)=2n+x+y移x移+y移+2n=x+y移 (mod2n+1)y补=2n+1+y (整数补码)又y移=2n+y y补=2n+2n+y=2n+y移x移+y补=x+y移 (mod2n+1)同理x移+-y补=x-y移(一)阶码加减运算(移码表示的阶码)p执行阶码加减运算,对加数或减数的移码符号位求反再运算,结果就是正确的移码值。(二)溢出判断o阶码采用双符号位,(最高符号位)恒为0。o运算结果符号:01结果为正 无溢出00结果为负10上溢11下溢例:阶码用四位移码表示(包括一位符号位)Ex=+110Ey=+011Ex移=01,110 Ey补=00,011 -Ey补=11,101Ex+Ey移=Ex
32、移+Ey补=10,001 上溢Ex-Ey移=Ex移+-Ey补=01,011 正确(+3)当Ex=-110Ey=-011时Ex移=00,010 Ey补=11,101 -Ey补=00,011Ex+Ey移=Ex移+Ey补=11,111 结果下溢Ex-Ey移=Ex移+-Ey补=00,101 结果正确(-3)移码采用双符号位 Ex移=01,011 Ey补=11,011 -Mx补=1.0110011例:浮点数相乘,4位阶码(移码表示),8位尾数(用补码表示),(均包括一位符号位)。已知 x=23(0.1001101),y=2-5(-0.1110010),求 xy=?解:x的浮点表示形式 1,011;0.1001101 y的浮点表示形式 0,011;1.0001110第三章 数值运算及运算器乘法步骤:阶码相加,Ex+Ey移=Ex移+Ey补Ex移 01,011Ey补 +)11,011Ex+Ey移 00,110尾数相乘,采用补码两位乘方案。MxMy补=1.01110110110110规格化处理:MxMy补=1.01110110110110舍入设尾数保留8位(包括符号位),采用0舍1入法。MxMy补=1.01110110110110 尾数为 MxMy补=1.0111011。oxy的浮点表示为:0,110;1.0111011oxy=2-2(-0.1000101)。94 结束语结束语