您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 计算机原理与汇编 运算
第三章运算方法和运算器3.1快速加法器设计一、全加器•全加器有三个输入量:•第i位的两个操作数Ai、Bi和低位送来的进位Ci;•两个输出量:全加和i及向高位的进位Ci+1。•全加和i及进位Ci+1的逻辑表达式:______i=AiBiCi+AiBiCi+AiBiCi+AiBiCi=Ai⊕Bi⊕Ci___Ci+1=AiBiCi+AiBiCi+AiBiCi+AiBiCi=AiBi+(Ai⊕Bi)Ci二、串行加法器和并行加法器•加法器有两种形式:串行加法器和并行加法器。(一)串行加法器•n位字长的加法器仅有一位全加器,使用移位寄存器从低位到高位串行地提供操作数,分n步进行相加。(二)并行加法器•全加器位数和操作数位数相同,同时对所有位进行求和。三、并行加法器的进位结构•进位线路结构分为:串行进位、并行进位,将整个加法器分组(分级),对组内、组间(级间)分别采用串行或并行进位。(一)对进位公式的分析Ci+1=AiBi+(Ai⊕Bi)Ci——进位逻辑表达式•设:Gi=AiBi——进位产生函数(CarryGenerateFunction)Pi=Ai⊕Bi——进位传递函数(CarryPropagateFunction)•当Pi=1时,如果低位有进位,本位将产生进位。则:Ci+1=Gi+PiCi(二)串行进位(行波进位)•串行进位的逻辑表达式:•最长进位延迟时间为4+2.5(n-1)ty,与n成正比。C1=G0+P0C0C2=G1+P1C1C3=G2+P2C2…Cn=Gn-1+Pn-1Cn-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)))•展开整理:C1=G0+P0C0C2=G1+P1G0+P1P0C0C3=G2+P2G1+P2P1G0+P2P1P0C0C4=G3+P3G2+P3P2G1+P3P2P1G0+P3P2P1P0C0•全部进位输出信号仅由进位产生函数Gi,进位传递函数Pi以及最低位进位C0决定,与低位进位无关。•因为进位信号同时产生,所以称为并行进位。又称为同时进位或先行进位。(四)组内并行、组间串行的进位结构•将n位加法器分成若干个小组,小组采用并行、组间采用串行的进位结构。•例:将16位加法器分成4组,每组4位,组内采用并行进位结构,组间采用串行进位结构。•最高进位的形成时间为(4+3×2)ty=10ty•如果采用串行进位,最高进位的形成时间为(4+15×2.5)ty=41.5ty(五)组内并行、组间并行的进位结构•将加法器分成几个小组,每一小组包括几位,采用并行进位结构,小组间也采用并行进位。•再引入两个辅助函数Gi*和Pi*;分别称为组进位产生函数和传递函数。•Gi*为本小组产生的进位(与低位小组来的进位无关)。•Pi*为小组进位的传递条件(决定于低位小组进位能否传送至高位小组)。•Gi*和Pi*的逻辑表达式:设:G0*=G3+P3G2+P3P2G1+P3P2P1G0G1*=G7+P7G6+P7P6G5+P7P6P5G4G2*=G11+P11G10+P11P10G9+P11P10P9G8G3*=G15+P15G14+P15P14G13+P15P14P13G12P0*=P3P2P1P0P1*=P7P6P5P4P2*=P11P10P9P8P3*=P15P14P13P12•小组间产生四个进位,C4、C8、C12和C16。C4=G0*+P0*C0C8=G1*+P1*G0*+P1*P0*C0C12=G2*+P2*G1*+P2*P1*G0*+P2*P1*P0*C0C16=G3*+P3*G2*+P3*P2*G1*+P3*P2*P1*G0*+P3*P2*P1*P0*C0•组间并行进位线路如图7-11(b)所示。当Gi*、Pi*及C0形成后,C4、C8、C12和C16便可同时产生。•C4、C8、C12和C16已由组间进位线路产生,组内并行进位线路不需要再产生这些进位,将其作适当修改,便可产生小组的本地进位Gi*和小组的传送条件Pi*以及小组内的低3位进位(见图3-11(a))。•例:16位加法器采用组内并行、组间并行进位结构的框图,如图7-10所示。•进位形成过程如下:·从Ai、Bi、C0输入开始:·经过4ty形成C1、C2、C3及全部Gi*、Pi*;·又经过2.5ty形成C4、C8、C12、和C16;·最后再经2.5ty形成二、三、四、小组内的其余进位C7~5、C11~9、C15~13。•最长进位形成时间:·(4+2.5+2.5)ty=9ty·组间串行:(4+3×2)ty=10ty·完全串行:(4+15×2.5)ty=41.5ty四、组内并行、组间并行进位加法器实例1、SN74181·算术逻辑单元,简称ALU,具有组内并行进位链,提供了辅助函数G,P供组间进位链使用。•一位ALU单元:①两个半加器构成全加器。②Ai,Bi输入由选择控制S0S1S2S3进行控制。③第二级半加器的输入由(电位)M控制,选择算术运算所需的低位进位或作逻辑运算。④Xi,Yi的设计:·Xi、Yi与输入信号Ai、Bi的关系:________________Xi=S3AiBi+S2AiBi_______________Yi=S1Bi+S0Bi+Ai(当S3S2S1S0取不同值时)_·Xi选择可以为:1,Ai+Bi,Ai+Bi,Ai∴可以提供进位传递条件:Pi=Ai+Bi_·Yi选择可以为:0,Ai,AiBi,AiBi∴可以提供进位产生函数:Gi=AiBi2、SN74182(先行进位发生器)•提供:组间并行进位信号Cn+x,Cn+y,Cn+z__大组辅助函数:P,G例:用SN74181和SN74182组成16位分二级同时进位的加法器。利用并行进位链74182可产生向高一级进位链提供__辅助函数G**、P**,用于位数更长时,组成第三级并行进位链。3.2定点加减运算一、原码加减运算二、补码加减运算(一)两个基本关系式:①[x+y]补=[x]补+[y]补(modM)②[x-y]补=[x]补+[-y]补(modM)•由[y]补求[-y]补的方法:将[y]补连同符号位一起求反加1。•注意:求一个数的补码:正数时,补码和原码相同;负数时,对原码除符号位外求反加1。•求[-y]补是对[y]补包括符号位求反加1。例1y=-0.0110[y]补=1.1010[-y]补=0.0110例2y=0.0111[y]补=0.0111[-y]补=1.1001(二)补码加、减运算规则①参加运算的操作数用补码表示。②符号位参加运算。③操作码为加运算时,两数直接相加;当操作码为减运算时,将减数连同符号位一起求反加1与被减数相加。④运算结果以补码表示。例1:已知:x=0.1001,y=-0.0110,求x+y=?解:[x]补=0.1001[y]补=1.1010[x]补0.1001+[y]补1.1010—————————[x+y]补10.0011x+y=0.0011例2:已知:x=-0.1001,y=-0.0101,求x+y=?解:[x]补=1.0111[y]补=1.1011[x]补1.0111+[y]补1.1011—————————[x+y]补11.0010x+y=-0.1110例3:已知:x=0.1001,y=0.0110,求x-y=?解:[x]补=0.1001[y]补=0.0110[-y]补=1.1010[x]补0.1001+[-y]补1.1010—————————[x-y]补10.0011x-y=0.0011例4:已知:x=-0.1001,y=-0.0110,求x-y=?解:[x]补=1.0111[y]补=1.1010[-y]补=0.0110[x]补1.0111+[-y]补0.0110—————————[x-y]补1.1101x-y=-0.0011(三)溢出检测采用双符号位(变形补码)判溢出。•正数:两个符号位均为0;00.x1x2…xn•负数:两个符号位均为1;11.x1x2…xn•溢出判断:两数相加,结果符号位为00、11,表示没溢出;结果符号位为01表示正溢出,为10表示负溢出。•如果用Sn+1、Sn分别表示最高符号位和第二符号位,则采用变形补码溢出检测电路:·OVR=Sn+1⊕Sn⊕OVRSn+1Sn三、反码加减运算•反码加减运算的规则:①参加运算的操作数用反码表示。②符号位参加运算。③当操作码为加运算时,两数直接相加;当操作码为减运算时,将减数连同符号位一起求反与被减数相加。④如果符号位产生进位,则在末位加1。⑤运算结果用反码表示。3.3定点乘法运算一、移位操作1.逻辑移位:只有数码位置的变化,而无数量的变化。·左移:低位补0,右移:高位补0。例:A寄存器的初值为10110101逻辑右移一位后为01011010逻辑左移一位后为011010102.循环移位:寄存器两端触发器有移位通路,形成闭合的移位环路。例:A寄存器的初值为10011001循环右移一位后为11001100循环左移一位后为001100113.算术移位:数的符号不变而数量发生变化。·左移一位将使数值扩大一倍(乘以2)·右移一位则使数值缩小一倍(乘以1/2).算术移位规则:(1)正数:原码、补码、反码左右移位时,空位均补入0(符号不变)。左移一位:0.1100右移一位:0.0011(2)负数:•原码:符号位不变(为1),空位补0。例:A寄存器的初值为1.0110算术左移一位后为1.1100算术右移一位后为1.0011•补码:左移后的空位补0,右移后的空位补1。·左移:|1|←|1|←|←0·右移:|1|→|→|→例:A寄存器初值:0.0110·例:初值:1.1011左移一位:1.0110右移一位:1.1101•反码:移位后的空位补1·例:初值:1.1011左移一位:1.0111右移一位:1.1101二、原码一位乘法•乘积的符号:为相乘两数符号的异或值•数值部分:为两数绝对值之积。0.1101×)0.1011————————1101110100001101————————0.10001111例:x=0.1101y=0.1011•计算机计算:将n位乘转化为n次“累加与移位”。每一步只求一位乘数所对应的新部分积,并与原部分积作一次累加,然后移位一次。•乘法步骤:(1)初始化:|被乘数|→B,|乘数|→C,0→A,n→CTR。(2)C0=1时,A+B→A。C0=0时,A+0→A。(3)A、C联合右移一位。(4)CTR-1→CTR,若CTR≠0按(2)、(3)、(4)步骤循环至CTR=0为止。(5)乘积为2n位,高位在A,低位在C。符号由异或门决定并放在乘积最高位之前。三、补码一位乘法1.补码乘法算法的推导(1)被乘数x符号任意,乘数y符号为正设:[x]补=xn.xn-1…x1.x0[y]补=0.yn-1yn-2…y1y0•根据补码定义:[x]补=2+x=2n+1+x(mod2)[y]补=y[x]补[y]补=2n+1·y+x·y=2(yn-1…y1y0)+x·y(mod2)∵2(yn-1…y1y0)=2(mod2)∴[x]补[y]补=2+x·y=[x·y]补(mod2)•即:[x·y]补=[x]补[y]补=[x]补·y=[x]补·(0.yn-1…y1y0)(2)被乘数x符号任意,乘数y符号为负[x]补=xn.xn-1xn-2…x0[y]补=1.yn-1…y1y0=2+y(mod2)y=[y]补-2=1.yn-1…y1y0-2=0.yn-1…y1y0-1x·y=x(0.yn-1…y1y0)-x[x·y]补=[x(0.yn-1…y1y0)-x]补=[x(0.yn-1…y1y0)]补+[-x]补=[x(0.yn-1…y1y0)]补-[x]补=[x]补·(0.yn-1…y1y0)-[x]补(3)当被乘数x和乘数y符号任意,以补码表示:[x·y]补=[x]补(0.yn-1…y1y0)-[x]补·yn•y≥0:yn=0不需校正•y0:yn
本文标题:计算机原理与汇编 运算
链接地址:https://www.777doc.com/doc-3257995 .html