• 2.90 MB
  • 2022-04-29 14:43:29 发布

最新第3章 运算方法和运算部件课件PPT.ppt

  • 120页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'第3章运算方法和运算部件 第一讲:不同层次程序员看到的运算及ALU主要内容C语言程序中涉及的运算整数算术运、浮点数算术运算按位、逻辑、移位、位扩展和位截断指令集中与运算相关的指令(以MIPS为参考)涉及到的定点数运算算术运算带符号整数运算:取负/符号扩展/加/减/乘/除/算术移位无符号整数运算:0扩展/加/减/乘/除逻辑运算逻辑操作:与/或/非/…移位操作:逻辑左移/逻辑右移涉及到的浮点数运算:加、减、乘、除基本运算部件ALU的设计附纺绢贮般暖山新社量近苛张退记糟绷吴缄抄局湍商揍彻炉梳捶燥窿逞寿第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture C语言程序中涉及的运算算术运算(最基本的运算)无符号数、带符号整数、浮点数的运算按位运算用途对位串实现“掩码”(mask)操作或相应的其他处理(主要用于对多媒体数据或控制信息进行处理)操作按位或:“|”按位与:“&”按位取反:“~”按位异或:“^”问题:如何从一个16位采样数据y中提取高位字节,并使低字节为0?可用“&”实现“掩码”操作:y&0xFF00例如,当y=0x2C0B时,通过掩码操作得到结果为:0x2C00厕素狡袋狡钢例薛补熏忠豫喉蚂佛弃眷再钧炸呐呸摩褪畔麻蓑鸵屋揭占衔第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS定点算术运算指令InstructionExampleMeaningCommentsaddadd$1,$2,$3$1=$2+$33operands;exceptionpossiblesubtractsub$1,$2,$3$1=$2–$33operands;exceptionpossibleaddimmediateaddi$1,$2,100$1=$2+100+constant;exceptionpossibleaddunsignedaddu$1,$2,$3$1=$2+$33operands;noexceptionssubtractunsignedsubu$1,$2,$3$1=$2–$33operands;noexceptionsaddimm.unsign.addiu$1,$2,100$1=$2+100+constant;noexceptionsmultiplymult$2,$3Hi,Lo=$2x$364-bitsignedproductmultiplyunsignedmultu$2,$3Hi,Lo=$2x$364-bitunsignedproductdividediv$2,$3Lo=$2÷$3,Lo=quotient,Hi=remainderHi=$2mod$3divideunsigneddivu$2,$3Lo=$2÷$3,Unsignedquotient&remainderHi=$2mod$3涉及到的操作数:32/16位无符号数,32/16位带符号数涉及到的操作:加/减/乘/除(有符号/无符号)停谚遁侨疵虑锅档执求格丛诲恼题誉蹲支屉混蝴址荤裁门醋联阳约律储倘第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS逻辑运算指令涉及到的操作数:32/16位逻辑数涉及到的操作:按位与/按位或/按位或非/左移/右移锰罐枝貌贞雀泽河石忱墙痞艇渡拣史河晤那咳喻蔬秘祝摈宵彰驯圆增缨舀第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS定点比较和分支指令涉及到的操作数:32/16位无符号数,32/16位带符号数涉及到的操作:大小比较和相等比较(有符号/无符号)通过减法运算实现“比较”操作!茨琢瓷备芜吝属钱箔科层剪套跃猛蓬仓譬芹再佑负辕蘑汝宴侍捌搏视匿位第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS定点数据传送指令涉及到的操作数:32/16位带符号数(偏移量可以是负数)涉及到的操作:加/减/符号扩展/0扩展韩药瘤典心蚜恒闰聂角霹私挠敝拳受代蹿明麓旭魂谓夕洞攀龚敖勒囚艺瘁第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS中的浮点算术运算指令涉及到的浮点操作数:32位单精度/64位双精度浮点数涉及到的浮点操作:加/减/乘/除MIPS提供专门的浮点数寄存器:32个32位单精度浮点数寄存器:$f0,$f1,……,$f31连续两个寄存器(一偶一奇)存放一个双精度浮点数处靡串渊愚湛昌欠琳庞隙锻倦倾亿靳左糠喳祝吩褥柔底沈杀娄臭印犊糯购第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS中的浮点数传送指令涉及到的浮点操作数:32位单精度浮点数涉及到的浮点操作:传送操作(与定点传送一样)还涉及到定点操作:加/减(用于地址运算)例:将两个浮点数从内存取出相加后再存到内存的指令序列为:lwcl$f1,x($s1)lwcl$f2,y($s2)add.s$f4,$f1,$f2swlc$f4,z(s3)浸蒋锹继蒲蕉饶亦盛昌之瞒严谨羞谬剂论烬缀挪塞甜谎滴视捣疾湃吉扒述第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS中的浮点数比较和分支指令涉及到的浮点操作数:32位单精度浮点数/64位双精度浮点数涉及到的浮点操作:比较操作(用减法来实现比较)还涉及到的定点操作:加/减(用于地址运算)有一个专门的浮点标志cond,无需在指令中明显给出cond甭怨苑洁伴陵判浮割慰柞穴被橱唆画裴樟闸撒叠哪幸散附硬煽冤娘观等赚第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS指令考察的结果涉及到的操作数:无符号整数、带符号整数逻辑数浮点数涉及到的运算定点数运算带符号整数运算:取负/符号扩展/加/减/乘/除/算术移位无符号整数运算:0扩展/加/减/乘/除逻辑运算逻辑操作:与/或/非/…移位操作:逻辑左移/逻辑右移浮点数运算:加、减、乘、除实现MIPS定点运算指令的思路:先实现一个能进行基本算术运算(加/减)和基本逻辑运算、并生成基本条件码(ZF/OF/CF/NF)的ALU,再由ALU和移位器实现乘、除运算器。ALU是运算部件的核心!以下介绍ALU的实现。痰附恰咀拉冗树懦锡狼堑骏侦辐阶礁呜苍澄庐漾暴侣尚芭掉滇承斜眷惺猴第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture ALU的功能说明ALUControlLines(ALUop)Function000And001Or010Add110Subtract111Set-on-less-thanALUNNNABResultOverflowZero3ALUopCarryOutALU可进行基本的加/减算术运算、基本逻辑运算。其核心部件是加法器。有关串行加法器和并行加法器的原理在数字逻辑电路课已讲过,在此仅简单回顾。铱誊刚服症封绦屁快抄苛闰锑掷蜡匈添尘帽煤帐喇代儡匆巩鹤匝甜栽闰旗第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 回顾:串行进位加法器假定与/或门延迟为1ty,异或门3ty,则“和”与“进位”的延迟为多少?FA全加器符号:串行加法器的缺点:进位按串行方式传递,速度慢!问题:n位串行加法器从C0到Cn的延迟时间为多少?最后一位和数的延迟时间为多少?2n+1级门延迟!2n级门延迟!Sum延迟为6ty;Carryout延迟为2ty。FAFAFAn位串行(行波)加法器:C0Cn媒厚球渤格贰镣貉骚棠癌拇勿雪晓五澳有宏亮贯祖钓圣其拽疼登膝虫饼赖第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 回顾:并行进位加法器(CLA加法器)为什么用先行进位方式?串行进位加法器采用串行逐级传递进位,电路延迟与位数成正比关系。因此,现代计算机采用一种先行进位(Carrylookahead)方式。如何产生先行进位?定义辅助函数:Gi=XiYi…进位生成函数Pi=Xi+Yi…进位传递函数(或Pi=Xi⊕Yi)通常把实现上述逻辑的电路称为进位生成/传递部件全加逻辑方程:Si=Pi⊕CiCi+1=Gi+PiCi(i=0,1,…n)设n=4,则:C1=G0+P0C0C2=G1+P1C1=G1+P1G0+P1P0C0C3=G2+P2C2=G2+P2G1+P2P1G0+P2P1P0C0C4=G3+P3C3=G3+P3G2+P3P2G1+P3P2P1G0+P3P2P1P0C0由上式可知:各进位之间无等待,相互独立并同时产生。通常把实现上述逻辑的电路称为4位CLA部件由此,根据Si=Pi⊕Ci,可并行求出各位和。通常把实现Si=Pi⊕Ci的电路称为求和部件CLA加法器由“进位生成/传递部件”、“CLA部件”和“求和部件”构成。乘唉氰跪擅稻村柴冯浓扳蹦雇痰蹄几昏蒜载蚂芦晾马姬状欧驴钙鳞蝎玻恩第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 回顾:8位全先行进位加法器进位生成/传递部件A7A0B7B0P7P1P0G7G1G08位CLA部件C0求和部件P7P1P0C0C1C7C8S7S0S13ty2ty3ty和的总延迟:3+2+3=8ty;进位C8的延迟:3+2=5ty蝉绷泵肇藉撒衡允盾刮锭消苹杭狭褪昭褐销臂胡凿碳靛棠杖相锡揣祥崔旋第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 多级先行进位加法器单级(局部)先行进位加法器的进位生成方式:“组内并行、组间串行”所以,单级先行进位加法器虽然比行波加法器延迟时间短,但高位组进位依赖低位组进位,故仍有较长的时间延迟通过引入组进位生成/传递函数实现“组内并行、组间并行”进位方式设n=4,则:C1=G0+P0C0C2=G1+P1C1=G1+P1G0+P1P0C0C3=G2+P2C2=G2+P2G1+P2P1G0+P2P1P0C0G3*=G3+P3C3=G3+P3G2+P3P2G1+P3P2P1G0P3*=P3P2P1P0所以C4=G3*+P3*C0。把实现上述逻辑的电路称为4位BCLA部件。回顾:多级先行进位加法器庄宙览实融复锭构涤乔谰屎位裸豆内跌驼角济啼胁略肖岩芍财沁尼篆淫擦第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 回顾:多级先行进位加法器关键路径长度为多少?最终进位的延迟为多少?4位成组先行进位部件(4位BCLA部件)4位CLA加法器4位CLA加法器4位CLA加法器4位CLA加法器16位两级先行进位加法器3+2+3=8ty3+2=5ty俄逝骗蕉奢略舒峨苹汕栈傅冠感没聋叮廓忍丧柜豹舰棺债醋丁肤仁尔灶兔第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture A4-bitALU1-bitALU4-bit串行ALUABFACarryOutMuxCarryInResultA0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut3MUX是什么?(数字电路课学过)关键路径延迟长,速度慢!坟尊拦堑碱幅酝丸嚎刽脏江宰寝葫狮役找孜葛闸咽傈欠疮缓舍右猴钻束置第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 先行进位ALU先行进位ALU芯片(SN74181)四位ALU芯片,中规模集成电路。在先行进位加法器基础上附加部分线路,具有基本的算术运算和逻辑运算功能。SN74181的逻辑图和功能表SN74182是4位BCLA(成组先行进位)芯片。多芯片级联构成先行进位ALU1个SN74181芯片直接构成一个4位全先行进位ALU4个SN74181芯片串行构成一个16位单级先行进位ALU4个SN74181芯片与1个SN74182芯片可构成16位两级先行进位ALU16个SN74181芯片与5个SN74182芯片可构成64位先行进位ALUSKIPALU中的“加”运算电路相当于n档二进制加法算盘。所有其他运算都以ALU中“加”运算为基础!迟卜洁藻沟酸猛写律逸生沛涧厕辣瞄释瞅秘税撒今挑钉雨耸睬汰部庸群鸡第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture SN74181的引脚输入端:Ai和Bi分别为第1和2操作数,Cn为低位进位,M为功能选择线,Si为操作选择线,共4位,故最多有16种运算。输出端:Fi为运算结果,Cn+4、P和G为进位,“A=B”为相等标志P输入端输出端眺埃岿腆弯变肉彼裕陷氓坦嘻携松爬羌惦赢戍察搪峻穆皇举眠凄歌呵凑督第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture SN74181逻辑电路图枫悼聘氰撅柒搅予绿夜铲养吞谦痈行汕忿也膝屹罐瞅简有诌琐狗页谦侍荧第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture SN74181正逻辑功能表BACK哀铲抖庸暑捞滩羊典鼓化袖幅线轻酒同桑吓溯柔最蔫裴惧助剐序毫味炼她第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture SN74182芯片的引脚输入端:Pi和Gi分别为第i组的组内进位传递函数和进位生成函数,Cn为低位进位。输出端:Cn+4、Cn+8、Cn+12为相应组的组内进位,P*和G*分别为整个大组的组进位传递函数和进位生成函数。隆妥祈茬柏钨儿溉廓捡倘兜艰嗡忍该阿佬苞嫡识蛰偷炭盗欣枕氦蜒混槽嫡第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture SN74182芯片的逻辑电路图BACK科钱你克足肺靡茅笔己审脸团市丝膜衬嚎芍惺置静汝趴安挖捡孕峙凯滨限第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture SN74181和SN74182组成16位先行进位ALU4位ALU4位ALU4位ALU4位ALU16位两级先行进位ALUBACK汞揩喊挛沈蓟母躯牙梦囚头妈痉哆喀倾仗可柴秃咨跑奏惺讳兰擦廉市械键第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 第一讲小结C语言程序中涉及的运算整数算术运算、浮点数算术运算按位、逻辑、移位、位扩展和位截断指令集中与运算相关的指令(以MIPS为参考)涉及到的定点数运算算术运算带符号整数:取负/符号扩展/加/减/乘/除/算术移位无符号整数:0扩展/加/减/乘/除逻辑运算逻辑操作:与/或/非/…移位操作:逻辑左移/逻辑右移涉及到的浮点数运算:加、减、乘、除基本运算部件ALU的设计全加器、串行加法器、先行进位加法器串行ALU、先行进位ALU(单级/多级)定点运算包括:无符号数按位逻辑运算逻辑移位运算位扩展和截断运算加/减/乘/除运算带符号整数算术移位运算扩展运算和截断运算补码加/减/乘/除运算浮点运算包括:原码加/减/乘/除运算移码加/减运算是一种模运算系统!鹿遂棘破痕谓院田无铃距杉少备险币帧趾詹泪吁岭盆怜令童县入绕躲尘茹第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 第二讲:定点数运算及运算部件主要内容加/减运算及其运算部件补码/原码/移码加减运算乘法运算及其运算部件原码/补码乘法运算快速乘法器除法运算及其运算部件原码/补码除法运算快速除法器定点运算器十进制加减运算注:无符号数的按位逻辑运算可用逻辑门电路实现;无符号数的逻辑移位运算可用专门的移位器或斜送结果等多种方式来实现;带符号数的算术移位运算、无符号数和带符号整数的位扩展运算和截断运算也可用简单电路很容易地实现。嵌决忌幼虹烟桂误厄宣氧兔辣视扳侵诲妇酪尧寨裕铜崎杉诺棉俞谬默温圃第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 补码加/减运算及其部件补码加减运算公式[A+B]补=[A]补+[B]补(MOD2n)[A–B]补=[A]补+[–B]补(MOD2n)补码加减运算要点和运算部件加、减法运算统一采用加法来处理符号位(最高有效位MSB)和数值位一起参与运算直接用ALU实现两个数的加运算(模运算系统)问题:模是多少?运算结果高位丢弃,保留低n位,相当于取模2n实现减法的主要工作在于:求[–B]补问题:如何求[–B]补?[–B]补=B+1ALU444AResultZeroCarryInCarryOut4B401MuxSelSubBoverflow补码加减运算部件当控制端Sub为1时,做减法当控制端Sub为0时,做加法逗沸伤罗办编奏珊若渝睹曹矣猩板怪锹彝枝挡洋糕却碎椒聂嘛侩氛湿桑苫第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 补码加/减运算与“溢出”判断Ex1:-7-6=-7+(-6)=+3-3-5=-3+(-5)=-811++00011110011101111000100011Ex2:用8位补码计算107+46=?结果错误:107+46=-103.10710=0110101124610=001011102010011001进位是真正的符号:+15311溢出现象:(1)最高位和次高位的进位不同(2)和的符号位和加数的符号位不同X√问题:若采用变形补码结果怎样?采用变形补码时“溢出”判断条件:结果的两个符号位不同变形补码可保留运算中间结果。从乘除运算过程可看出这点!项醇奴别始珠耿涛俐茎昼擦感贤精别援庆结俘岗穆吐磅殆仟顿嗓伍菠阶迷第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture OverflowDetectionLogic(溢出判断逻辑)CarryintoMSB!=CarryoutofMSBForaN-bitALU:Overflow=CarryIn[N-1]XORCarryOut[N-1]OverflowXYXXORY00011101110A0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut30也可以用其他实现方式。丢步诺乡磁挣阳网琢偏逝敛腿寒排发餐唤约腆疽斗威四触鸭筐碎属偏州逛第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture ZeroDetectionLogic(判0逻辑)ZeroA0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut3除Result、Zero、Overflow外,许多机器还生成进/借位标志(CF)、符号标志(NF/SF)等。标志在运算电路中产生,被记录到专门的寄存器中,以便在分支指令中被用来作为条件。存放标志的寄存器通常称为程序/状态字寄存器或标志寄存器。每个标志对应标志寄存器中的一个标志位。给衙巧扁枢彤复伶汪蓖启啥我盛特凿继膘毒芜爱摄痴攀溜咖如毒毁迁息爪第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 原码加/减运算用于浮点数尾数运算符号位和数值部分分开处理仅对数值部分进行加减运算,符号位起判断和控制作用规则如下:比较两数符号,对加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。求和:数值位相加,若最高位产生进位,则结果溢出。和的符号取被加数(被减数)的符号。求差:被加数(被减数)加上加数(减数)的补码。最高数值位产生进位表明加法结果为正,所得数值位正确。最高数值位没产生进位表明加法结果为负,得到的是数值位的补码形式,需对结果求补,还原为绝对值形式的数值位。差的符号位:a)情况下,符号位取被加数(被减数)的符号;b)情况下,符号位为被加数(被减数)的符号取反。仆齿寻颊毋蛹赌拜薛酬嘎寸支浩坤旗棍诞触圆喳电诈深拧褐震渤纠书喻典第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 原码加/减运算例1:已知[X]原=1.0011,[Y]原=1.1010,要求计算[X+Y]原解:由原码加减运算规则知:同号相加,则求和,和的符号同被加数符号。所以:和的数值位为:0011+1010=1101(ALU中无符号数相加)和的符号位为:1[X+Y]原=1.1101例2:已知[X]原=1.0011,[Y]原=1.1010,要求计算[X–Y]原解:由原码加减运算规则知:同号相减,则求差(补码减法)差的数值位为:0011+(1010)补=0011+0110=1001最高数值位没有产生进位,表明加法结果为负,需对1001求补,还原为绝对值形式的数值位。即:(1001)补=0111差的符号位为[X]原的符号位取反,即:0[X–Y]原=0.0111思考题:如何设计一个基于ALU的原码加/减法器?求和:直接加,有进位则溢出,符号同被求差:加补码,不会溢出,符号分情况兢址动键客独迎疗债南窗堕稠逐脾骏迷堂滇藉忧季脐球簿滨虐鲁页盗诽滥第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 移码加/减运算用于浮点数阶码运算符号位和数值部分可以一起处理运算公式(假定在一个n位ALU中进行加法运算)[E1]移+[E2]移=2n-1+E1+2n-1+E2=2n+E1+E2=[E1+E2]补(mod2n)[E1]移–[E2]移=[E1]移+[–[E2]移]补=2n-1+E1+2n–[E2]移=2n-1+E1+2n–2n-1–E2=2n+E1–E2=[E1–E2]补(mod2n)结论:移码的和、差等于和、差的补码!运算规则①加法:直接将[E1]移和[E2]移进行模2n加,然后对结果的符号取反。②减法:先将减数[E2]移求补(各位取反,末位加1),然后再与被减数[E1]移进行模2n相加,最后对结果的符号取反。③溢出判断:进行模2n相加时,如果两个加数的符号相同,并且与和数的符号也相同,则发生溢出。补码和移码的关系:符号位相反、数值位相同!旦狈贵烹掉夜孤恤潦仪牺移淫详慨弧星瑞迸沁绿力阻住年绞叉寨馆考崇例第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 移码加/减运算例1:用四位移码计算“–7+(–6)”和“–3+6”的值。解:[–7]移=0001[–6]移=0010[–3]移=0101[6]移=1110[–7]移+[–6]移=0001+0010=0011(两个加数与结果符号都为0,溢出)[–3]移+[6]移=0101+1110=0011,符号取反后为1011,其真值为+3问题:[–7+(–6)]移=?[–3+(6)]移=?例2:用四位移码计算“–7–(–6)”和“–3–5”的值。解:[–7]移=0001[–6]移=0010[–3]移=0101[5]移=1101[–7]移–[–6]移=0001+1110=1111,符号取反后为0111,其真值为–1。[–3]移–[5]移=0101+0011=1000,符号取反后为0000,其真值为–8。超依力汗祥肉茵房俯戏滋慕残涅毗湃佐杆愿窿查抽崎舰组椽时抠日壶瓶天第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 无符号数的乘法运算Paperandpencilexample:Multiplicand1000 Multiplierx1001 1000 0000 0000 1000Product(积)0.1001000假定:[X]原=x0.x1xn,[Y]原=y0.y1yn,求[x×Y]原数值部分z1z2n=(0.x1xn)×(0.y1yn)(小数点位置约定,不区分小数还是整数)X×y4×2-4X×y3×2-3X×y2×2-2X×y1×2-14X×Y=(X×yi×2-i)i=1整个运算过程中用到两种操作:加法+左移因而,也可用ALU和移位器来实现乘法运算帝权较潘轨囊氓终蝉蹄申顿漂跋置潮削到派爽古尿瘴裕氮泌哎陕漫疟楼抿第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 无符号数的乘法运算手工乘法的特点:每步计算:X×yi,若yi=0,则得0;若yi=1,则得X把①求得的各项结果X×yi逐次左移,可表示为X×yi×2-i对②中结果求和,即(X×yi×2-i),这就是两个无符号数的乘积计算机内部稍作以下改进:每次得X×yi后,与前面所得结果累加,得到Pi,称之为部分积。因为不等到最后一次求和,减少了保存各次相乘结果X×yi的开销。每次得X×yi后,不将它左移与前次部分积Pi相加,而将部分积Pi右移后与X×yi相加。因为加法运算始终对部分积中高n位进行。故用n位加法器可实现二个n位数相乘。对乘数中为“1”的位执行加法和右移,对为“0”的位只执行右移,而不执行加法运算。凌滓抚情苦堪远肩英赡呆典弥辞淹晋哈胆穿煌卷邑埃劳裕杂九艺裙草直睁第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 无符号乘法运算的算法推导上述思想可写成如下数学推导过程:X×Y=X×(0.y1y2…yn)=X×y1×2-1+X×y2×2-2+X×y3×2-3+…+X×yn×2-n=2-1(2-1(2-1…2-1(2-1(0+X×yn)+X×yn-1)+…+X×y2)+X×y1)n个2-1上述推导过程具有明显的递归性质,因此,无符号数乘法过程可归结为循环计算下列算式的过程:设P0=0,每步的乘积为:P1=2-1(P0+X×yn)P2=2-1(P1+X×yn-1)…………Pn=2-1(Pn-1+X×y1)其递推公式为:Pi+1=2-1(Pi+X×yn-i)(i=0,1,2,3,…,n-1)最终乘积Pn=X×Y迭代过程从乘数最低位yn和P0=0开始,经n次“判断–加法–右移”循环,直到求出Pn为止。邱另嘻薛殉战旗昆珠嘿旭炸率绕准棋菜卢警拐栈球休仁沽伎渺舵悦揪舅苍第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 写使能控制逻辑右移32位ALU被乘数寄存器X乘积寄存器P3264位323232加计数器Cn时钟C乘数寄存器Y32位乘法运算的硬件实现被乘数寄存器X:存放被乘数乘积寄存器P:开始置初始部分积P0=0;结束时,存放的是64位乘积的高32位乘数寄存器Y:开始时置乘数;结束时,存放的是64位乘积的低32位进位触发器C:保存加法器的进位信号循环次数计数器Cn:存放循环次数。初值32,每循环一次,Cn减1,Cn=0时结束ALU:乘法核心部件。在控制逻辑控制下,对P和X的内容“加”,在“写使能”控制下运算结果被送回P,进位位在C中每次循环都要对进位位C、乘积寄存器P和乘数寄存器实现同步“右移”汤巫赃佰肛赂杭失哈掘游跺洪言匝刹赞囤涂次绸咳桥潮剿胀腾状罚辑阉题第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture Example:无符号整数乘法运算举例说明:设A=1110B=1101应用递推公式:Pi=2-1(Abi+Pi-1)C乘积P乘数R000001101+1110011101101001110110000111011+1110100011011010001101+1110101101101010110110可用一个双倍字长的乘积寄存器;也可用两个单倍字长的寄存器。部分积初始为0。保留进位位。右移时进位、部分积和剩余乘数一起进行逻辑右移。验证:A=14,B=13,AxB=182路囤病邑栈瓮摸上搬肛送荧株矛苞首膛瞥沪腻依迢膳庭挑宽缆牺晶驶腻泣第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 原码乘法算法用于浮点数尾数乘运算符号与数值分开处理:积符异或得到,数值用无符号乘法运算例:设[x]原=0.1110,[y]原=1.1101,计算[X×Y]原解:数值部分用无符号数乘法算法计算:1110×1101=10110110符号位:01=1,所以:[X×Y]原=1.10110110原码一位乘法:每次只取乘数的一位判断,需n次循环,速度慢。原码两位乘法:每次取乘数两位判断,只需n/2次循环,快一倍。原码两位乘法递推公式:00:Pi+1=2-2Pi01:Pi+1=2-2(Pi+X)10:Pi+1=2-2(Pi+2X)11:Pi+1=2-2(Pi+3X)=2-2(Pi+4X-X)=2-2(Pi-X)+Xyi-1yiT操作迭代公式0000010100111001011101110T+X0T+X0T+2X0T+2X0T–X1T–X1T1T2-2(Pi)2-2(Pi+X)2-2(Pi+X)2-2(Pi+2X)2-2(Pi+2X)2-2(Pi–X)2-2(Pi–X)2-2(Pi)T触发器用来记录下次是否要执行“+X”“–X”运算用“+[-X]补”实现!3X时,本次-X,下次+X!瘸为了跟锻汤忘弥采拉起堵芍讯婪府捂簧绍雀耸生扇耗迁供际狸逼买赛气第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 原码两位乘法举例已知[X]原=0.111001,[Y]原=0.100111,用原码两位乘法计算[X×Y]原解:先用无符号数乘法计算111001×100111,原码两位乘法过程如下:若用模4补码,则P和Y同时右移2位时,得到的P3是负数,这显然是错误的!需要再增加一位符号。采用补码右移为模8补码形式(三位符号位),为什么?淖劫岛巾崭召躇千描螟仆苫雾伏邀菩猎鬼显佯噬含疲铁韧措娶绚乍铱衬蛀第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 补码乘法运算用于定点整数乘法运算符号与数值统一处理假定:[X]补=xn-1xn-2……x1x0,[Y]补=yn-1yn-2……y1y0,求:[XxY]补=?基于以下补码性质:令[Y]补=yn-1yn-2……y1y0,则Y=-yn-1.2n-1+yn-2.2n-2+……y1.21+y0.20令:y-1=0,则:当n=32时,Y=-y31.231+y30.230+……y1.21+y0.20+y-1.20-y31.231+(y30.231-y30.230)+……+(y0.21-y0.20)+y-1.20(y30-y31).231+(y29-y30).230+……+(y0–y1).21+(y-1-y0).20部分积公式:Pi=2-1(Pi-1+(yi-1-yi)X)Booth’sAlgorithm推导如下:因为[XxY]补[X]补x[Y]补,故不能直接用无符号乘法计算。2-32.[XxY]补=(y30-y31)X.2-1+(y29-y30)X.2-2+……+(y0–y1).2-31+(y-1-y0).2-32=2-1(2-1…(2-1(y-1-y0)X)+(y0–y1)X)+…+(y30-y31)X)却躬郊隧拟视酣侯寻掇追垢讳羹轩肝攻官啃殆恃详递蔑秤虏黄颇筑眼斥白第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture Booth’s算法实质当前位右边位操作Example10减被乘数000111100011加0(不操作)000111100001加被乘数000111100000加0(不操作)0001111000最初提出这种想法是因为在Booth的机器上移位操作比加法更快!在“1串”中,第一个1时做减法,最后一个1做加法,其余情况只要移位。同前面算法一样,将乘积寄存器右移一位。(这里是算术右移)011110beginningofrunendofrunmiddleofrun栈劫单谨因韦崇扼诉杆前眉戍零褒瘦碘录毕奔础阮漾瞪胰掳构撮夕詹溶吁第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 布斯算法举例已知[X]补=1101,[Y]补=0110,计算[X×Y]补验证:X=-3,Y=6,X×Y=-0010010B=-18,结果正确![-X]补=0011缴曾掣申童盎罢烫遁捻旗邱底埋避牟欲关次哭楷系局钮瀑媒尸皆学闲想潍第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture BoothsExample:2x–31a.P=P-m1110+1110111011010shiftP(signext)1b.001011110110101->add+00102a.000101101shiftP2b.001000001011010->sub+11103a.0010111010110shift3b.001011110101111->nop4a111101011shift4b.0010111110101doneOperationMultiplicandProductnext?0.initialvalue001000001101010->submythicalbit最后乘积腑优候驯洒截妻铃小奄奈矿氢谬岂释淬茹叉丁腔趴匝府却沮辖垮停献抉辱第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 补码两位乘法补码两位乘可用布斯算法推导如下:[Pi+1]补=2-1([Pi]补+(yi-1–yi)[X]补)[Pi+2]补=2-1([Pi+1]补+(yi–yi+1)[X]补)=2-1(2-1([Pi]补+(yi-1–yi)[X]补)+(yi–yi+1)[X]补)=2-2([Pi]补+(yi-1+yi–2yi+1)[X]补)开始置附加位y-1为0,乘积寄存器最高位前面添加一位附加符号位0。最终的乘积高位部分在乘积寄存器P中,低位部分在乘数寄存器Y中。因为字长总是8的倍数,所以补码的位数n应该是偶数,因此,总循环次数为n/2。yi+1yiyi-1操作迭代公式0000010100111001011101110+[X]补+[X]补+2[X]补+2[-X]补+[-X]补+[-X]补02-2[Pi]补2-2{[Pi]补+[X]补}2-2{[Pi]补+[X]补}2-2{[Pi]补+2[X]补}2-2{[Pi]补+2[-X]补}2-2{[Pi]补+[-X]补}2-2{[Pi]补+[-X]补}2-2[Pi]补暴焰寂拍翠湿袄笺澈泳搞袋雄豪畔庞剔右故诞眠蹭钓适弟穷硬挚醉蔗荡衍第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 补码两位乘法举例已知[X]补=1101,[Y]补=0110,用补码两位乘法计算[X×Y]补。解:[–X]补=0011,用补码二位乘法计算[X×Y]补的过程如下。PnPYy-1说明0000001100开始,设y-1=0,[P0]补=0+00110y1y0y-1=100,+2[-X]补00110P和Y同时右移二位0000110011得[P2]补+11010y3y2y1=011,+2[X]补11011P和Y同时右移二位111101110得[P4]补因此[X×Y]补=11101110,与一位补码乘法(布斯乘法)所得结果相同,但循环次数减少了一半。验证:-3×6=-18(-10010B)冬棵陵罗垫颜赡阳猪孵愉梢酥拍乃盎惺牛募琢儿睡厩速哎炭谤退买鼠供多第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 快速乘法器前面介绍的乘法部件的特点:通过一个ALU多次“加/减+右移”来实现一位乘法:约n次“加+右移”两位乘法:约n/2次“加+右移”存在瓶颈:所需时间随位数增多而加长设计快速乘法部件的必要性:大约1/3是乘法运算快速乘法器的实现流水线方式硬件叠加方式(如:阵列乘法器)阵列乘法器用一个实现特定功能的组合逻辑单元构成一个阵列貌即燕晾捕资滤窜鼓雍垄奉抿膳宋饮牡机胶灼抄郸扩孕硬库湘赐姿厅饱首第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 流水线方式的快速乘法器为乘数的每位提供一个n位加法器每个加法器的两个输入端分别是:本次乘数对应的位与被乘数相与的结果(即:0或被乘数)上次部分积每个加法器的输出分为两部分:和的最低有效位(LSB)作为本位乘积进位和高31位的和数组成一个32位数作为本次部分积1绞丢改瑰炽间最心傈脾湍晶戒毡才侥都旁蔼噬亭诌硕颜猖区名利唱蜗隶抒第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 阵列乘法器的实现手算乘法过程阵列乘法器全加器被乘数X部分积输入AiBi进位输入进位输出部分积输出B00P7P6P5P4P3P2P1P0B10B20B30A3A2A1A00000速度仅取决于逻辑门和加法器的传输延迟无符号阵列乘法器增加符号处理电路、乘前及乘后求补电路,即可实现带符号数乘法器。共眺如傈孰返挎图段斟疑雾袍衙孜伶布琶采扛蜡馏装蛤悬围峻枕留尽预桩第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture Divide:Paper&Pencil1001Quotient(商)Divisor10001001010Dividend(被除数) -1000 10 101 1010 -1000 10Remainder(余数)手算除法的基本要点被除数与除数相减,够减则上商为1;不够减则上商为0。每次得到的差为中间余数,将除数右移后与上次的中间余数比较。用中间余数减除数,够减则上商为1;不够减则上商为0。重复执行第②步,直到求得的商的位数足够为止。中间余数跪民辨失佯岸咋支寐久忙遂紧郑兆慑孰偿甭丑沤晰划相插尝酶翰粪虐屋倒第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 定点除法运算除前预处理①若被除数=0且除数≠0,或定点整数除法|被除数|<|除数|,则商为0,不再继续②若被除数≠0、除数=0,则发生“除数为0”异常③若被除数和除数都为0,则有些机器产生一个不发信号的NaN,即“quietNaN”当被除数和除数都≠0,且商≠0时,才进一步进行除法运算。计算机内部无符号数除法运算与手算一样,通过被除数(中间余数)减除数来得到每一位商够减上商1;不够减上商0基本操作为减法(用加法实现)和移位,故可与乘法合用同一套硬件绝赔焦窘辑烩棱楷幽揣锨哟抑瞒景邹竟肩谁疙杉攘虽婆誊圈召扎崩嘘纤织第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 完全模拟手工的无符号数除法硬件实现64位除数R,后n位为064位余数R,初始为被除数32位商R,初始值为0RemainderQuotientDivisor64-bitALUShiftRightShiftLeftWriteControl32bits64bits64bits两个n位数相除的情况:(1)定点正整数(即无符号数)相除:在被除数的高位添n个0(2)定点正小数(即原码小数)相除:在被除数的低位添加n个0这样,就将所有情况都统一为:一个2n位数除以一个n位数以下是64位数除以32位数的除法器逻辑结构富漂昨杯合巡绘牟臣执泌喝孽衣续呆缎威擒摊塌锡扩运读餐索钨杯扫侧伎第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 1.SubtracttheDivisorregisterfromtheRemainderregister,andplacetheresultintheRemainderregister.TestRemainderRemainder<0Remainder>=02a.ShifttheQuotientregistertotheleftsettingthenewrightmostbitto1.2b.RestoretheoriginalvaluebyaddingtheDivisorregtotheRemainderregandplacethesumintheRemainderreg.AlsoshifttheQuotientregistertotheleft,settingthenewLSBto03.ShifttheDivisorregisterright1bit.33rdrepetition?No:<33repetitionsDoneYes:33repetitionsStart手工DivideAlgorithmn位除法需n+1步举例:7/2=3余1要点:1.余数-除数=新余数2(a)新余数<0,商左移上0并恢复余数2(b)新余数>=0,商左移上13.除数右移岿瓣紫翘庆挠押吧着吠逸阜铜炙佰尝墒峭铂螺挖芋婪伍党侈蔑骆烷瘪漂曼第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture DivideAlgorithm--exampleQ:0000D:00100000R:00000111–D=111000001:R=R–DQ:0000D:00100000R:111001112b:+D,slQ,0Q:0000D:00100000R:000001113:ShrDQ:0000D:00010000R:00000111–D=111100001:R=R–DQ:0000D:00010000R:111101112b:+D,slQ,0Q:0000D:00010000R:000001113:ShrDQ:0000D:00001000R:00000111–D=111110001:R=R–DQ:0000D:00001000R:111111112b:+D,slQ,0Q:0000D:00001000R:000001113:ShrDQ:0000D:00000100R:00000111–D=111111001:R=R–DQ:0000D:00000100R:000000112a:slQ,1Q:0001D:00000100R:000000113:ShrDQ:0001D:00000010R:00000011–D=111111101:R=R–DQ:0001D:00000010R:000000012a:slQ,1Q:0011D:00000010R:000000013:ShrDQ:0011D:00000001R:00000001验证:7/2=3余1问题:Q中第一个“0”说明什么?说明没有“溢出”,它不是真正的商!绦悠室掘照坦慰严砍检潘澎嘴徒迟迟饿鄂铰弛训眺闯灼赵妹演凉知李夕狭第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 完全模拟手工的无符号数除法硬件实现问题:第一次试商为1,说明什么?若是无符号整数运算(2n位除以n位),则说明将会得到多于n+1位的商,因而结果“溢出”。若是两个n位数相除,则肯定不会溢出,为什么?若是浮点数中尾数原码小数运算,则说明尾数部分有“溢出”,可通过浮点数的“右规”消除“溢出”。所以,在浮点数运算器中,第一次得到的商“1”要保留。最大商为:00001111/0001=1111溢出!例:0.11110000/0.1000=+1.1110例:11111111/0001=11111111娠昆棘具吼潦懊弥鼻蝗荡拈柔亭梭迂距怯断褪诡鳖琐磐堑履美稚架淋烤帜第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 对手算除法算法的观察1/2bitsindivisor(除数寄存器)always0能否考虑只用32位除数寄存器和32位ALU?可用余数左移代替除数右移可使商通过和余数一起左移来取消商寄存器开始时先使余数左移一位(问题:为什么可这样做?)两个寄存器的结合以及循环内次序的调换使得余数被多左移了一次。所以最后一步余数寄存器的左半边的余数必须向右移一位。RemainderQuotientDivisor64-bitALUShiftRightShiftLeftWriteControl32bits64bits64bits因为结果肯定不“溢出”,故第1次商肯定为0,不用先做减法试商,而将第一步换成先左移,可减少一次迭代矛瘩爹叮粹纸挖穗揖居翠窝脉辗蘸嘘谅窿抄湖克涵水拿磊滞烁歌矩糠蚌愁第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 无符号数除法算法的硬件实现除数寄存器Y:存放除数。余数寄存器R:初始时高位部分为高32位被除数;结束时是余数。余数/商寄存器Q:初始时为低32位被除数;结束时是32位商。循环次数计数器Cn:存放循环次数。初值是32,每循环一次,Cn减1,当Cn=0时,除法运算结束。ALU:除法核心部件。在控制逻辑控制下,对于寄存器R和Y的内容进行“加/减”运算,在“写使能”控制下运算结果被送回寄存器R。R和Q同步“左移”,Q空出位上“商”,商的各位逐次左移到Q中。由控制逻辑根据ALU结果的符号决定商为0还是1。颖遗垛替泵掂论丫恐芽悸巢滇上亭姿旧盒涵镐源揽丛兼唯咽崇难翅何泊啊第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture DivideAlgorithmexampleD:0010R:00000111ShlRD:0010R:00001110R=R–DD:0010R:11101110+D,slR,0D:0010R:00011100R=R–DD:0010R:11111100+D,slR,0D:0010R:00111000R=R–DD:0010R:00011000slR,1D:0010R:00110001R=R–DD:0010R:00010001slR,1D:0010R:00100011ShrR(rh)D:0010R:00010011验证:7/2=3余1从例子可看出:每次上商为0时,需做加法以“恢复余数”。所以,称为“恢复余数法也可在下一步运算时把当前多减的除数补回来。这种方法称为“不恢复余数法”,又称“加减交替法”。–D=1110最后余数需向右移一位。和书中的例子稍有不同,书中没有省略判断溢出的过程。苦迹纠惫精阔臻沧爵洼吩扣枣镭愉殊非帐夯救弊滁脚蔷揉幢旅酗会驰运枯第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 不恢复余数除法(加减交替法)根据恢复余数法(设B为除数,Ri为第i次中间余数),有:若Ri<0,则商上“0”,做加法恢复余数,即:Ri+1=2(Ri+2n|B|)-2n|B|=2Ri+2n|B|(“负,0,加”)若Ri>0,则商上“1”,不需恢复余数,即:Ri+1=2Ri-2n|B|(“正,1,减”)省去了恢复余数的过程注意:最后一次上商为“0”的话,需要“纠余”处理,即把试商时被减掉的除数加回去,恢复真正的余数。不恢复余数法也称为加减交替法恢复余数法可进一步简化为“加减交替法”郁妄澈灿斤兼足鸦射庙刨采册沼氯酞瞅颂钧典哦潭咕巨戍尤沧兰丫耘窖谗第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 带符号数除法原码除法商符和商值分开处理商的数值部分由无符号数除法求得商符由被除数和除数的符号确定:同号为0,异号为1余数的符号同被除数的符号补码除法方法1:同原码除法一样,先转换为正数,先用无符号数除法,然后修正商和余数。方法2:直接用补码除法,符号和数值一起进行运算,商符直接在运算中产生。两个n位补码整数除法运算,被除数需要进行符号扩展。若被除数为2n位,除数为n位,则被除数无需扩展。佩刮胚晶惟反雁渐灾契肝哭嫌假葡运哦群豹肌游扛层激攒花德绚阶塔借煤第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 原码除法举例已知[X]原=0.1011[Y]原=1.1101用恢复余数法计算[X/Y]原解:商的符号位:01=1减法操作用补码加法实现,是否够减通过中间余数的符号来判断,所以中间余数要加一位符号位。[|X|]补=0.1011[|Y|]补=0.1101[–|Y|]补=1.0011小数在低位扩展0思考:若实现无符号数相除,即1011除以1101,则有何不同?结果是什么?确认不溢出时可省略还独饺钨超赔豹洒付泡式摘摇吼赛丢蜡决喉的员涩条跺蒸嗅烹颤鸡吕饿转第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 原码除法举例已知[X]原=0.1011[Y]原=1.1101用加减交替法计算[X/Y]原解:[|X|]补=0.1011[|Y|]补=0.1101[–|Y|]补=1.0011“加减交替法”的要点:正、1、减负、0、加得到的结果与恢复余数法一样!问题:用被除数(中间余数)减除数试商时,怎样确定是否“够减”?中间余数的符号!补码除法能否这样来判断呢?秩霍外逝嘲拖薯奎延凿锻欺称谴卷哈芬都然胺股让沧夹氏泌盎治肄侠词焙第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 实现补码除法的基本思想(自学)补码除法判断是否“够减”的规则(1)当被除数(或中间余数)与除数同号时,做减法,若新余数的符号与除数符号一致表示够减,否则为不够减;(2)当被除数(或中间余数)与除数异号时,做加法,若得到的新余数的符号与除数符号一致表示不够减,否则为够减。中间余数R除数Y新中间余数:R–Y(正商)新中间余数:R+Y(负商)010100110101够减不够减不够减够减够减不够减不够减够减上述判断规则用表表示为:SKIP创尸裁赃情嚎宇风己右偶残屡搔辨兢鹅搐煞羌钡鸦绩愧当钵捎匡栋梳宛娠第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 实现补码除法的基本思想(自学)从上表可得到补码除法的基本算法思想:(1)运算规则:当被除数(或中间余数)与除数同号时,做减法;异号时,做加法。(2)上商规则:若余数符号不变,则够减,商1;否则不够减,商0。商为正时:若新余数与除数符号一致,则够减,商1;否则不够减,商0。(原码)商为负时:若新余数与除数符号不一致,够减,商0;否则不够减,商1。(反码)补码除法也有:恢复余数法和不恢复余数法SKIP渝扁塞椰修氓粒拇惋龋豁奔怠通致风更东聋蚀塑挤渗喇秦思戮酣绥欺闺端第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 补码恢复余数法(自学)算法要点:操作数的预置:除数装入除数寄存器Y,被除数经符号扩展后装入余数寄存器R和余数/商寄存器Q。(2)R和Q同步串行左移一位。(3)若R与Y同号,则R=R–Y;否则R=R+Y,并按以下规则确定商值q0:①若中间余数R、Q=0或R操作前后符号未变,表示够减,则q0置1,转下一步;②若操作前后R的符号已变,表示不够减,则q0置0,恢复R值后转下一步;(4)重复第(2)和第(3)步,直到取得n位商为止。(5)若被除数与除数同号,则Q中就是真正的商;否则,将Q求补后是真正的商。(即:若商为负值,则需要“各位取反,末位加1”来得到真正的商)(6)余数在R中。问题:如何恢复余数?通过“做加法”来恢复吗?无符号数(或原码)除法通过“做加法”恢复余数,但补码不是!若原来为R=R–Y,则执行R=R+Y来恢复余数,否则若原来是R=R+Y,则执行R=R–Y。斟籍色菊胚缅页蒲敞岂价尊漆聋绵店坷量函以爹沉械绒郴工颖志腿躯逝柴第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 举例:7/3=?(-7)/3=?被除数:00000111除数0011AQM=001100000111000011101101减110111100011恢复(加)商000001110000111001101减111011000011恢复(加)商000011100001110001101减00001001符同商1000100101101减111000100011恢复(加)商000010010+++++++余:0001/商:0010被除数:11111001除数0011AQM=001111111001111100100011加001000101101恢复(减)商011110010111001000011加000101001101恢复(减)商011100100110010000011加11111001符同商1111100100011加001000101101恢复(减)商011110010+++++++余:1111/商:1110商为负数,需求补:0010→1110验证:7/3=2,余数为1验证:-7/3=-2,余数为-1糠定坍敞素媒麻概棕振式累阑游囚撇恰应钥积楚兢波磕止态躁订延噬黑渺第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 补码不恢复余数法(自学)算法要点:操作数的预置:除数装入除数寄存器Y,被除数经符号扩展后装入余数寄存器R和余数/商寄存器Q。(2)根据以下规则求第一位商qn:若被除数X与Y同号,则R1=X–Y;否则R1=X+Y,并按以下规则确定商值qn:①若新的中间余数R1与Y同号,则qn置1,转下一步;②若新的中间余数R1与Y异号,则qn置0,转下一步;qn用来判断是否溢出,而不是真正的商。以下情况下会发生溢出:若X与Y同号且上商qn=1,或者,若X与Y异号且上商qn=0。(3)对于i=1到n,按以下规则求出n位商:①若Ri与Y同号,则qn-i置1,Ri+1=2Ri–[Y]补,i=i+1;②若Ri与Y异号,则qn-i置0,Ri+1=2Ri+[Y]补,i=i+1;(4)商的修正:最后一次Q寄存器左移一位,将最高位qn移出,最低位置上商q0。若被除数与除数同号,Q中就是真正的商;否则,将Q中商的末位加1。(5)余数的修正:若余数符号同被除数符号,则不需修正,余数在R中;否则,按下列规则进行修正:当被除数和除数符号相同时,最后余数加除数;否则,最后余数减除数。补码不恢复余数法也有一个六字口诀“同、1、减;异、0、加”。其运算过程也呈加/减交替方式,因此也称为“加减交替法”。判断是否同号与恢复余数法不同,不是新老余数!是余数和除数之间同号则够减,商1?异号则不够减,商0?错!参看前面的表商已经是“反码”赔接畏壶浮湍泡沉酬哟俩哟楷秋泅渔佣歇缨羽熬恤伦为蕉郁鸟朗协盾嗜骄第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 举例:-9/2将X=-9和Y=2分别表示成5位补码形式为:[X]补=10111[Y]补=00010被除数进行符号扩展为:[X]补=1111110111[–Y]补=11110同、1、减异、0、加X/Y=–0100B=–4,余数为–0001B=–1将各数代入公式:“除数×商+余数=被除数”进行验证,得:2×(–4)+(–1)=–9待镁妖隆婴番弧戊疚穆剥梗心兼怨焚中瓮程毫误巴式鹅苛话轧画屯乃隋驰第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 快速除法器(自学)很难实现流水化比快速乘法器更难实现。阵列除法器比阵列乘法器复杂问题:可以像乘法一样用32个Adder同时进行加/减运算来实现流水线方式的快速除法器吗?不行!每次做加法还是减法,必须要知道上次余数的符号。p=0时,CAS作为全加器单元p=1时,输入y被取反,CAS作为全减器单元P=1Q0Q1Q2Q3Q4R0R1R2R3R4X5X4X3X2X1X8X7X6Y4Y3Y2Y100控制线P进/借位出Co进/借位入CixyysPCAS右图是实现对两个正数按不恢复余数法进行相除的阵列除法器第一次总是做减法,故P=1使第一行做减法;中间行最高位进位Co确定商和下次做加/减,故Co连到Qi和下一行控制线Ps=x(py)ciCo=(x+Ci)(py)+xCip=0时,s=xyCi,Co=xy+yCi+xCip=1时,s=xyCi,Co=xy+yCi+xCi底籍寇羚都料显暖皑镐气烷铰搪忌安教釜壳皑否愚度段羞毋狗谴言校冤铃第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 定点运算部件综合考虑各类定点运算算法后,发现:所有运算都可通过“加”和“移位”操作实现以一个或多个ALU(或加法器)为核心,加上移位器和存放中间临时结果的若干寄存器,在相应控制逻辑的控制下,可以实现各种运算。运算部件通常指ALU、移位器、寄存器组,加上用于数据选择的多路选择器和实现数据传送的总线等构成的一个运算数据通路。可用专门运算器芯片实现(如:4位运算器芯片AM2901)可用若干芯片级联实现(如4个AM2901构成16位运算器)现代计算机把运算数据通路和控制器都做在CPU中,为实现高级流水线,CPU中有多个运算部件,通常称为“功能部件”或“执行部件”。“运算器(OperateUnit)”、“运算部件(OperateUnit)”、“功能部件(FunctionUnit)”、“执行部件(ExecutionUnit)”和“数据通路(DataPath)”的含义基本上一样,只是强调的侧面不同。SKIP耸队髓基辙寒秆啼掣久诣尤檀渝诵渭禄连也吼钒尹吾星江诡摆殆歧形以荷第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture I0-8ZYALUMUXMUXLALBALUShifterQShifterQ(乘商R)ZEROCU控制信号A0-3DA0-3B0-3DB0-3GRSSIO3SIO0QIO0C0G*/NP*/OCn+4QIO3定点运算器芯片举例-AM2901A芯片框图问题:如何级联?两个移位器如何连接?通用寄存器组(GeneralRegisterSet----GRS)问题:如何用AM2901A芯片实现乘/除运算?挛琉弃羌誊敌驱浦泣践枫廖霉蚂媚椽堤扮夸拍甲碉伯隘裂补讯随柄炯秒侠第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture AM2901A的功能和结构核心是4位ALU(含移位器),可实现A+B、A–B、B–A和“与”、“或”、“异或”等进位入C0、进位出Cn+4、组进位传递/溢出P*/O、组进位生成/符号G*/N串行级联时,C0和Cn+4用来串行进位传递多级级联时,后两个信号用作组进位传递信号P*和组进位生成信号G*ALU的操作数来自主存或寄存器,B输入端还可以是Q寄存器4位双口GRS(16个),一个写入口、两个读口A和BA0–A3为读口A的编号,B0–B3为写口或读口B的编号A和B口可同时读出,分别LA和LB送到多路选择器MUX的输入端一个Q寄存器和Q移位寄存器,主要用于实现乘/除运算乘法的部分积和除法的中间余数都是双倍字长,需放到两个单倍字长寄存器中,并对其同时串行左移(除法)或右移(乘法)Q寄存器就是乘数寄存器或商寄存器。因此,也被称为Q乘商寄存器ALU移位器和Q移位器一起进行左移或右移,移位后,ALU移位器内容送ALU继续进行下次运算,而Q移位器内容送Q乘商寄存器。将ALU的结果进行判“0”后可通过Z输出端将“零”标志信息输出,ALU、MUX、移位器等的控制信号来自CCU,通过对指令操作码I0-I8译码,得到控制信号BACK扭粳朱否流熔瀑览航君拣忽匣倘礁佑项迹象份嫉痒颧肥牛辈另搬纤解抽谋第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture AM2901A的功能和结构思考题:如何用AM2901A芯片实现乘/除运算?R0被预置为0/被除数高位,Q寄存器被预置为0/被除数低位,R1被预置为被乘数/除数控制ALU执行“加”或“减”,并使ALU移位器和Q移位器同时“右移”/“左移”(移位后ALU移位器中是高位部分积/中间余数,Q移位器中是低位部分积/中间余数)ALU移位器送ALU的A端,Q移位器送Q寄存器后,再送回Q移位器反复执行第②、③两个步骤,直到得到所有乘积位或商BACK细孪逊峪琼饰刑姚淤卓鳃猜似措扦狰莲仰疯暇颜膜盐屎吨潍援纂帆猩旦皆第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS中的乘、除运算处理指令:mult,multu;div,divuMIPS中有一对32位寄存器Hi&Lo(相当于Q乘商寄存器)乘法和除法运算的硬件相同:仅需做加、减和64位寄存器的左/右移位Hi和Lo结合起来实现64位寄存器乘法:Hi中存放高32位积,Lo中存放低32位积除法:Hi中存放remainder,Lo中存放quotientmflo/mfhi指令用来把Lo/Hi中的32位数据取到通用寄存器两种乘法指令都忽略overflow,而由软件自行处理溢出软件通过mfhi指令取出Hi寄存器来判断是否溢出溢出判断规则:Hi中为以下数值时不溢出,否则溢出无符号数乘指令(multu)时:全0带符号数乘(mult)时:Lo中的符号MIPS指令不处理“除数为0”,由软件自行处理问题:如何判断溢出?狱所迟姻紫垛喻剩课恐葫火断篇鹃宗允酬绑肩豪严寥避畴衬夺耳孙呜辫诺第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 十进制数的加减运算有的机器有十进制加减法指令,用于对BCD码进行加减运算。所以这些机器中必须要有相应的十进制加减运算逻辑。以NBCD码(8421码)为例,讨论十进制整数的加减运算。一般规定数符在最高位1100:正,1101:负或0:正,1:负例如:+203911000010000000111001或00010000000111001-12651101000100100110010110001001001100101符号和数值部分分开处理!叛纤阳把遁圾酬黎六爸速枚画潮翠绦羡主少铣献敢慷痒痢胆望霹痹垛叙朗第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 十进制加法运算举例例125+31=56例225+39=640010010100100101+00110001+0011100101010110010111100110例327+39=660110010000100111+00111001010100001011001100110(1110)2>9需“+6”校正低位有进位,则进到高位,同时该低位“+6”校正结果<=9时,不需校正;大于9或有进位时,需“+6”校正最高位有进位时,发生溢出问题:本位和在什么范围内需“+6”校正?大于9:1010,1011,…..,1111有进位:10000,10001,10010和10011最大为19:2x9+1=19,范围为10~19噪滴形答额溪窥薛话酮擒晤常莹俩盔惰荣趁躇咏睁妒浓太垒臣一翱漓扦捆第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 一位十进制加法器当结果在10~19之间时,需校正。(最大可能:2x9+1=19)。即:1x1x或11xx或有进位(C4*=1)所以,校正逻辑表达式:C4=C4*+S3*S1*+S3*S2*+++++++A3B3A2B2A1B1A0B0S0*S1*S2*S3*C4*C4S0S1S2S3FAFAFAHAHAFAFAHAC0硫折痉昨察负恬受蚂究随洋涌氰旨金芋媒镊吞迪墙迟钳书诫狮库宝停实珠第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture n位十进制加法器n个一位十进制加法器=〉一个n位十进制串行加法器履匡苛翟馋凡队霞腿吵衷缝藐核封婿彭砚哥峡砷惕硬判菏环佃硝纷劫翅久第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 十进制减法运算方法:“加补码”:N1-N2=N1+(10n-N2)(mod10n)十进制数的补码求法:每位求反,末位加“1”一位十进制数(NBCD码)求反的方法,有:对各二进位求反,再“+10”先“+6”,再各位求反直接用求反电路只要在加法器基础上增加求补逻辑和最终结果的修正逻辑。例:[7]反=0111+1010=1000+1010=0010=2=0111+0110=1101=0010=2醇柿霜场设瞥讶跃归风乐舞谤能辣国懒寿懦邪净敲纲查剩窘蜜钟聂芥撬翘第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 十进制减法运算举例例1309-125=184例2125-309=-184加补码:309+875=184125+691=-184(mod103)001100001001000100100101+100001110101+0110100100011011011111100111101101100110011001101000110000100100000010110进位为1,表示被减数大于减数,结果为正无进位,表示差值为负数,故应将结果取补取补-000110000100减法运算肯定不会溢出!馁衔慰悉郑凯智魄渝酌续玛楷耻咬砌谁奄胸袄咕就诡偏谨因麓韶怠耻巩肤第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 第二讲小结逻辑运算、移位运算、扩展运算等电路简单主要考虑算术运算定点运算涉及的对象无符号数;带符号整数(补码);原码小数;移码整数定点运算:(ALU实现基本算术和逻辑运算,ALU+移位器实现其他运算)补码加/减:符号位和数值位一起运算,减法用加法实现。同号相加时可能溢出原码加/减:符号位和数值位分开运算,用于浮点数尾数加/减运算移码加减:移码的和、差等于和、差的补码,用于浮点数阶码加/减运算谊上溅抄筷争抱铆曲怠噎狸荐狈痰隐拳臆妆酪蛊凶称刨鞋弃丧垫抉肥榜帘第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 第二讲小结乘法运算:无符号数乘法:“加”+“右移”原码(一位/两位)乘法:符号和数值分开运算,数值部分用无符号数乘法实现,用于浮点数尾数乘法运算。补码(一位/两位)乘法:符号和数值一起运算,采用Booth算法。快速乘法器:流水化乘法器、阵列乘法器除法运算:无符号数除法:用“加/减”+“左移”,有恢复余数和不恢复余数两种。原码除法:符号和数值分开,数值部分用无符号数除法实现,用于浮点数尾数除法运算。补码除法:符号位和数值位一起。有恢复余数和不恢复余数两种。快速除法器:很难实现流水化除法器,可实现阵列除法器定点部件:ALU、GRS、MUX、Shifter、Q寄存器等,CU控制执行十进制数加、减运算及运算部件诛部嚣涝笋肪夺炽岛峦佬长摊挂博缠疫茵训溯绪塑掇痕其锚蚁痔亭容腆秘第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 第三讲:浮点数运算主要内容指令集中与浮点运算相关的指令(以MIPS为参考)涉及到的操作数单精度浮点数双精度浮点数涉及到的运算算术运算:加/减/乘/除浮点数加减运算浮点数乘除运算浮点数运算的精度问题下渊引垂暮禽方浦垛赠了揣脑王催脚坛猾抡嗓后掘词夹褥色啪苛猴墙旱雕第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture MIPS浮点运算指令的总结浮点操作数的表示32位单精度浮点数/64位双精度浮点数浮点数的运算加法/减法/乘法/除法例子:将以下程序编译为MIPS汇编语言Floatf2c(floatfahr){return((5.0/9.0)*(fahr-32.0));}假设变量fahr存放在$f12中,返回结果存放在$f0中。三个常数存放在通过$gp能访问到的存储单元中。f2c:lwcl$f16,const5($gp)lwcl$f18,const9($gp)div.s$f16,$f16,$f18lwcl$f18,const32($gp)sub.s$f12,$f12,$f18mul.s$f0,$f16,$f12jr$ra问题:IA-32中浮点数寄存器是80位,这会给float和double类型变量的运算带来什么隐患?詹政疤蹿彬酥扯枝苟痪岸遗嚣亿卓悉脱征每漠耍策深海友玻诊雁皆乏刃摄第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 有关Floating-pointnumber的问题Issues:°Representation(表示):Normalizedform(规格化形式)和Denormalizedform单精度格式和双精度格式°RangeandPrecision(表数范围和精度)°Arithmetic(+,-,*,/)°Rounding(舍入)°Exceptions(e.g.,dividebyzero,overflow,underflow)(异常处理:如除数为0,上溢,下溢等)°Errors(误差)与精度控制实现一套浮点数运算指令,要解决的问题有:洛匝衍僵目融氯灰东壮韧癸谦吨风呢飞馁莽命剑十纬掘恐渺虏饼猫藻描娱第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 浮点数运算及结果设两个规格化浮点数分别为A=Ma.2EaB=Mb.2Eb,则:A+B=(Ma+Mb.2-(Ea-Eb)).2Ea(假设Ea>=Eb)A*B=(Ma*Mb).2Ea+EbA/B=(Ma/Mb).2Ea-Eb上述运算结果可能出现以下几种情况:阶码上溢:一个正指数超过了最大允许值=〉+∞/-∞/溢出阶码下溢:一个负指数超过了最小允许值=〉+0/-0尾数溢出:最高有效位有进位=〉右规非规格化尾数:数值部分高位为0=〉左规右规或对阶时,右段有效位丢失=〉尾数舍入IEEE建议实现时为每种异常情况提供一个自陷允许位。若某异常对应的位为1,则发生相应异常时,就调用一个特定的异常处理程序执行。SP最大指数为多少?127!SP最小指数为多少?-126!运算过程中添加保护位尾数溢出,结果不一定溢出忍褥砷做呆莫吕甜释饿遍慷愿陇艳坷竣跺圭芒股属衫页工傈买桂裁优贱邓第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture IEEE754标准规定的五种异常情况①无效运算(无意义)运算时有一个数是非有限数,如:加/减∞、0x∞、∞/∞等结果无效,如:源操作数是NaN、0/0、xREM0、∞REMy等②除以0(即:无穷大)③数太大(阶码上溢):对于SP,指阶码E>11111110(指数大于127)④数太小(阶码下溢):对于SP,指阶码E<00000001(指数小于-126)⑤结果不精确(舍入时引起),例如1/3,1/10等不能精确表示成浮点数上述情况硬件可以捕捉到,因此这些异常可设定让硬件处理,也可设定让软件处理。让硬件处理时,称为硬件陷阱。注:硬件陷阱:事先设定好是否要进行硬件处理(即挖一个陷阱),当出现相应异常时,就由硬件自动进行相应的异常处理(掉入陷阱)。貌淌饵洒篆售承秦抗想荷右慰黍耀袒坏刻热焙廖准粉椭霞哎读乏疾曙兼彬第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 浮点数加/减运算十进制科学计数法的加法例子0.123×105+0.560×102其计算过程为:0.123×105+0.560×102=0.123×105+0.000560×105=(0.123+0.00056)×105=0.12356×105=0.124×105“对阶”操作:目的是使两数阶码相等小阶向大阶看齐,阶小的那个数的尾数右移,右移位数等于两个阶码差的绝对值IEEE754尾数右移时,要将隐含的“1”移到小数部分,高位补0,移出的低位保留到特定的“附加位”上进行尾数加减运算前,必须“对阶”!最后还要考虑舍入计算机内部的二进制运算也一样!炎堕够条赴钱族鞠感局祝它杠挖枕剩吓嫂镀篇饶甄慨迭储共垦身硬瀑偏掌第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 浮点数加/减运算-对阶问题:IEEE754SP格式的偏置常数是127,这会不会影响阶码运算电路的复杂度?对计算[Ex–Ey]补(mod2n)没有影响[E]补=256+Ex–Ey=256+127+Ex–(127+Ey)=256+[Ex]移–[Ey]移=[Ex]移+[–[Ey]移]补(mod256)通过计算[E]补来判断两数的阶差:[E]补=[Ex–Ey]补=[Ex]移+[–[Ey]移]补(mod2n)问题:在E为何值时无法根据[E]补来判断阶差?问题:如何对阶?溢出时!例如,Ex=7,Ey=-7,则[E]补=1111+1111=1110,E<0,错!但[Ex+Ey]移和[Ex–Ey]移的计算会变复杂!浮点乘除运算涉及之。问题:对IEEE754SP格式来说,|E|大于多少时结果就等于阶大的那个数?1.xx…x→0.00…01xx…x(右移24位后,尾数变为0)24!沸扣鸡珐韶订公拥枯屏夫携延谋坚登脆灶哨后症兆雪饰霹枪浩防潭详啤晰第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 浮点数加减法基本要点(假定:Xm、Ym分别是X和Y的尾数,Xe和Ye分别是X和Y的阶码)(1)求阶差:∆e=Ye–Xe(假定Ye>Xe,则结果的阶码为Ye)(2)对阶:将Xm右移∆e位,尾数变为Xm2Xe-Ye(保留右移部分:附加位)(3)尾数加减:Xm2Xe-Ye±Ym(4)规格化:当尾数高位为0,则需左规:尾数左移一次,阶码减1,直到MSB为1每次阶码减1后要判断阶码是否下溢(比最小可表示的阶码还要小)当尾数最高位有进位,需右规:尾数右移一次,阶码加1,直到MSB为1每次阶码加1后要判断阶码是否上溢(比最大可表示的阶码还要大)如果尾数比规定位数长,则需考虑舍入(有多种舍入方式)若尾数是0,则需要将阶码也置0。为什么?阶码溢出异常处理:阶码上溢,则结果溢出;阶码下溢,则结果为0尾数为0说明结果应该为0,即:阶码和尾数为全0。孝坤葬波伞邑些称图钝恒础烙雌电米吊肩峡帚钠锻际镀耙妆呛毛忧擅寝阵第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 浮点数加法运算举例Example:用二进制形式计算0.5+(–0.4375)=?对阶:-1.110x2-2→-0.111x2-1加减:1.000x2-1+(-0.111x2-1)=0.001x2-1规格化:0.001x2-1→1.000x2–4判溢出:无解:0.5=1.000x2-1,-0.4375=-1.110x2-2结果为:1.000x2–4=0.0001000=1/16=0.0625问题:为何IEEE754加减运算右规时最多只需一次?因为即使是两个最大的尾数相加,得到的和的尾数也不会达到4,故尾数的整数部分最多有两位,保留一个隐含的“1”后,最多只有一位被右移到小数部分。募瞒卫热教大呸他俱扣辖嘴看衣素瘩录郑追舌栽椰钝歉锑绑壕创稼恼霉玩第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture IEEE754浮点数加法运算在计算机内部执行上述运算时,必须解决哪些问题?(1)如何表示?(2)如何判断阶码的大小?求[ΔE]补=?(3)对阶后尾数的隐含位如何处理?(4)如何进行尾数加减?(5)何时需要规格化,如何规格化?(6)如何舍入?(7)如何判断溢出?用IEEE754标准!右移到数值部分,高位补0,保留移出低位部分隐藏位还原后,按原码进行加减运算,附加位一起运算±1x.xx……x形式时,则右规:尾数右移1位,阶码加1±0.0…01x…x形式时,则左规:尾数左移k位,阶码减k最终须把附加位去掉,此时需考虑舍入(IEEE754有四种舍入方式)若最终阶码为全1,则上溢;若尾数为全0,则下溢络烟忧侮啡竭碾刹秦妹术祸抬泪浚嘱埋熙殆翰痒触渍契茨拜茧献瞒挽拽刊第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 已知x=0.5,y=-0.4375,求x+y=?(用IEEE754标准单精度格式计算)解:x=0.5=1/2=(0.100...0)2=(1.00...0)2x2-1y=-0.4325=(-0.01110...0)2=(-1.110..0)2x2-2[x]浮=001111110,00…0[y]浮=101111101,110…0对阶:[ΔE]补=01111110+10000011=00000001,ΔE=1故对y进行对阶:[y]浮=1011111101110…0(高位补隐藏位)尾数相加:01.0000...0+(10.1110...0)=00.00100…0(原码加法,最左边一位为符号位)左规:+(0.00100…0)2x2-1=+(1.00…0)2x2-4(阶码减3,实际上是加了三次11111111)[x+y]浮=00111101100…0x+y=(1.0)2x2-4=1/16=0.0625IEEE754浮点数加法运算举例僚剪船助秆鹃林蒋签池崔碟袄渡未肘连异捡罗鸡演灼儒乙苟商坞好谊钟发第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 浮点加/减法器Sx右移ExMxSyEyMy小ALU大ALU阶码相减左移或右移舍入阶差控制逻辑SbEbMb阶小的数的尾数右移尾数加/减规格化舍入阶码增/减②①③④⑦⑥⑧⑨⑤可用流水线方式实现!鹤啤摔杖邪连反檀妓煽艾芽较糠惰射愉甩迅嗽奠画缀秋使漂蕉援头食赦亥第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 浮点数乘/除法基本要点浮点数乘法:A*B=(Ma*Mb).2Ea+Eb浮点数除法:A/B=(Ma/Mb).2Ea-Eb浮点数乘/除法步骤(Xm、Ym分别是X和Y的尾数,Xe和Ye分别是X和Y的阶码)求阶:Xe+Ye+127尾数相乘除:Xm*/Ym(两个形为1.xxx的数相乘/除)(3)两数符号相同,结果为正;两数符号相异,结果为负;(4)当尾数高位为0,需左规;当尾数最高位有进位,需右规。(5)如果尾数比规定的长,则需考虑舍入。若尾数是0,则需要将指数也置0。阶码溢出判断浮点数尾数采用原码乘、除运算。问题1:乘法运算结果最多左规几次?最多右规几次?不需左规!最多右规1次!问题2:除法呢?左规次数不定!不需右规!齿颜护砌童绳洞吸曙吞鸿歹硕曲凳疟柯讫奏宛瞻缄凤片系块习量霹缨邻霞第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 求阶码的和、差设Ex和Ey分别是两个操作数的阶码,Eb是结果的阶码,则:阶码加法公式为:EbEx+Ey+129(mod28)[E1+E2]移=127+E1+E2=127+E1+127+E2–127=[E1]移+[E2]移–127=[E1]移+[E2]移+[–127]补=[E1]移+[E2]移+10000001B(mod28)阶码减法公式为:EbEx+[–Ey]补+127(mod28)[E1–E2]移=127+E1–E2=127+E1–(127+E2)+127=[E1]移–[E2]移+127=[E1]移+[–[E2]移]补+01111111B(mod28)诉贰材绕董相阀束手址淀建财捻祝蛀办迷巧站巫顿院训分翅挽启吉辙异拉第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 举例例:若两个阶码分别为10和-5,求10+(-5)和10-(-5)的移码。解:Ex=127+10=137=10001001BEy=127+(–5)=122=01111010B[–Ey]补=10000110B将Ex和Ey代入上述公式,得:Eb=Ex+Ey+129=10001001+01111010+10000001=10000100B=132(mod28)其阶码的和为132–127=5,正好等于10+(–5)=5。Eb=Ex+[–Ey]补+127=10001001+10000110+01111111=10001110B=142(mod28)其阶码的差为142–127=15,正好等于10–(–5)=15。BACK设Ex和Ey分别是两个操作数的阶码,Eb是结果的阶码酬疙膳拓啥梯爸粒坎肛躲涵邢挑溅鼻允胀妖荣鱼夜诵澈痴廉梭膛抹篆署褐第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture ExtraBits(附加位)"FloatingPointnumbersarelikepilesofsand;everytimeyoumoveoneyoulosealittlesand,butyoupickupalittledirt.““浮点数就像一堆沙,每动一次就会失去一点‘沙’,并捡回一点‘脏’”如何才能使失去的“沙”和捡回的“脏”都尽量少呢?加多少附加位才合适?IEEE754规定:中间结果须在右边加2个附加位(guard&round)Guardbit(保护位):在significand右边的位Roundingbit(舍入位):在保护位右边的位Add/Sub:1.xxxxx1.xxxxx1.xxxxx1.xxxxxxxx+1.xxxxx0.001xxxxx0.01xxxxx-1.xxxxxxxx1x.xxxxy1.xxxxxyyy1x.xxxxyyy0.0…0xxxx附加位的作用:用以保护对阶时右移的位或运算的中间结果。附加位的处理:①左规时被移到significand中;②作为舍入的依据。BACK在后面加附加位!无法给出准确的答案!礁蓝诉转蹭痰买碎荣伞欠犬风兔艇份蝎削嘎痞缩杏润褪砧阵孺丢珊冰折傀第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture RoundingDigits(舍入位)举例:十进制数,最终有效位数为3,假定采用两位附加位。2.3400*100.0253*102.3653*10222IEEEStandard:fourroundingmodes(用图说明)roundtonearest(default)roundtowardsplusinfinity(alwaysroundup)roundtowardsminusinfinity(alwaysrounddown)roundtowards0roundtonearest:rounddigit<1/2thentruncate(截取)>1/2thenroundup(add1toULP)=1/2thenroundtonearestevendigit可以证明默认方式得到的平均误差最小。注:ULP=unitsinthelastplace.简称为就近舍入到偶数问题:若没有舍入位,采用就近舍入到偶数,则结果是什么?结果为2.36!精度没有2.37高!脓懒抽坪藏坚璃啪凹咙稻抱粥葫稼揣捻耙虑警愤绚撂首弯辙非业绷科嫩质第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture IEEE754的舍入方式的说明IEEE754的舍入方式(Z1和Z2分别是结果Z的最近可表示的左、右数)(1)就近舍入:舍入为最近可表示的数非中间值:0舍1入;中间值:强迫结果为偶数-慢(2)朝+∞方向舍入:舍入为Z2(正向舍入)(3)朝-∞方向舍入:舍入为Z1(负向舍入)(4)朝0方向舍入:截去。正数:取Z1;负数:取Z200ZZ1Z2如:附加位为01:舍11:入10:(强迫结果为偶数)例:1.110111→1.1110;1.110101→1.1101;1.110110→1.1110;1.111110→10.0000;峰授肠阻赫板抄醛够所割急恐蕴谰尸撰怖扁震赏兄将沾字桅舱裁老秆狄窥第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture IEEE754通过在舍入位后再引入“粘位stickybit”增强精度加减运算对阶过程中,若阶码较小的数的尾数右移时,舍入位之后有非0数,则可设置stickybit。举例:1.24x104+5.09x101分别采用一位、二位、三位附加位时,结果各是多少?(就近舍入到偶数)尾数精确结果为1.24509,所以分别为:1.24,1.24,1.25BACKIEEE754的舍入方式的说明辽忿扮尺郊沛隙窄男恰袄青渤莱匪疯披仍丽勇幻迹亥戏鬃嘉门但蜒穷剪买第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 溢出判断以下情况下,可能会导致阶码溢出左规(阶码-1)时左规(-1)时:先判断阶码是否为全0,若是,则直接置阶码下溢;否则,阶码减1后判断阶码是否为全0,若是,则阶码下溢。右规(阶码+1)时右规(+1)时,先判断阶码是否为全1,若是,则直接置阶码上溢;否则,阶码加1后判断阶码是否为全1,若是,则阶码上溢。问题:机器内部如何减1?+[-1]补=+11…1陶统鸯具蓄望跋都峪舅歪后泰妻痊胆息岭饰蔚甩某搁笼伺捉外栅获面恒扁第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 举例例:若Eb=00000001,则左规一次后,结果的阶码Eb=?解:Eb=Eb+[-1]补=00000001+11111111=00000000阶码下溢!例:若Ex=11111110,Ey=10000000,则乘法运算时,结果的阶码Eb=?解:Eb=Ex+Ey+129=11111110+10000000+10000001=11111111阶码上溢!以下情况下,可能会导致阶码溢出(续)乘法运算求阶码的和时若Ex和Ey最高位皆1,而Eb最高位是0或Eb为全1,则阶码上溢若Ex和Ey最高位皆0,而Eb最高位是1或Eb为全0,则阶码下溢除法运算求阶码的差时若Ex的最高位是1,Ey的最高位是0,Eb的最高位是0或Eb为全1,则阶码上溢。若Ex的最高位是0,Ey的最高位是1,Eb的最高位是1或Eb为全0,则阶码下溢。芳拓生溉期趟选戮浪虚婶停逃宙姿栅粱才涡森尽僻逗判舍偷毕站其要咨俩第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 实例:PowerPC和80x86中的浮点部件PowerPC中的浮点运算比MIPS多一条浮点指令:乘累加指令将两个操作数相乘,再与另一个操作数相加,作为结果操作数可用一条乘累加指令代替两条MIPS浮点指令可为中间结果多保留几位,得到最后结果后再考虑舍入,精度高利用它来实现除法运算和平方根运算浮点寄存器的数量多一倍(32xSPR,32xDPR)80x86中的浮点运算采用寄存器堆栈结构:栈顶两个数作为操作数寄存器堆栈的精度为80位(MIPS和PowerPC是32位或64位)所有浮点运算都转换为80位扩展浮点数进行运算,写回存储器时,再转换位32位(float)或64位(double),有时会发生奇怪的现象由浮点数访存指令自动完成转换指令类型:访存、算术、比较、函数(正弦、余弦、对数等)妻骄桃唁缮亥形重躺贫宙颤晶霹纵岁翼忱辰崩艘堑蜂珠炕灿蛀差让周遵旺第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 第三讲小结浮点运算指令(以MIPS为参考)浮点数的表示(IEEE754标准)单精度SP(float)和双精度DP(double)规格化数(SP):阶码1~254,尾数最高位隐含为10(阶为全0,尾为全0)∞(阶为全1,尾为全0)NaN(阶为全0,尾为非0)非规数(阶为全1,尾为非0)浮点数加减运算对阶、尾数加减、规格化(上溢/下溢处理)、舍入浮点数乘除运算求阶、尾数乘除、规格化(上溢/下溢处理)、舍入浮点数的精度问题中间结果加保护位、舍入位(和粘位)最终进行舍入(有四种舍入方式)就近(中间值强迫为偶数)、+∞方向、-∞方向、0方向默认为“就近”舍入方式臀发儡钠慷粕碉宪宠配劝恤喂弯狡鹃陷娩披捐线垫累碎抢诺劲街始寒躁病第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 本章总结(1)定点数运算:由ALU+移位器实现各种定点运算移位运算逻辑移位:对无符号数进行,左(右)边补0,低(高)位移出算术移位:对带符号整数进行,移位前后符号位不变,编码不同,方式不同。循环移位:最左(右)边位移到最低(高)位,其他位左(右)移一位。扩展运算零扩展:对无符号整数进行高位补0符号扩展:对补码整数在高位直接补符加减运算补码加/减运算:用于整数加/减运算。符号位和数值位一起运算,减法用加法实现。同号相加时,若结果的符号不同于加数的符号,则会发生溢出。原码加/减运算:用于浮点数尾数加/减运算。符号位和数值位分开运算,同号相加,异号相减;加法直接加;减法用加负数补码实现。乘法运算:用加法和右移实现。补码乘法:用于整数乘法运算。符号位和数值位一起运算。采用Booth算法。原码乘法:用于浮点数尾数乘法运算。符号位和数值位分开运算。数值部分用无符号数乘法实现。除法运算:用加/减法和左移实现。补码除法:用于整数除法运算。符号位和数值位一起运算。原码除法:用于浮点数尾数除法运算。符号位和数值位分开运算。数值部分用无符号数除法实现。争锦葛杜刨翁碱条臼磷甚秸赚含坐呐州虱草奎直隶会涝督仓榴牛氰鸳牵涝第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 本章总结(2)浮点数运算:由多个ALU+移位器实现加减运算对阶、尾数相加减、规格化处理、舍入、判断溢出乘除运算尾数用定点原码乘/除运算实现,阶码用定点数加/减运算实现。溢出判断当结果发生阶码上溢时,结果发生溢出,发生阶码下溢时,结果为0。精确表示运算结果中间结果增设保护位、舍入位、粘位最终结果舍入方式:就近舍入/正向舍入/负向舍入/截去四种方式。ALU的实现算术逻辑单元ALU:实现基本的加减运算和逻辑运算。加法运算是所有定点和浮点运算(加/减/乘/除)的基础,加法速度至关重要进位方式是影响加法速度的重要因素并行进位方式能加快加法速度通过“进位生成”和“进位传递”函数来使各进位独立、并行产生撑绵吨唁彼韧陆患蹄邹赠知篡沤涂窥误拄锋孔铝狞害萍泌掘变僧僚朴把揍第3章运算方法和运算部件ECE4680:ComputerOrganizationandArchitecture 读经典文化品幸福人生——读《做一个幸福的教师》有感昌乐育才双语学校一年级组孔维平 作为教师的我们该如何去感受幸福呢?幸福是一种心态,是自我的一种体验,幸福是需要用心去营造的。 做幸福教师,要懂得享受读书读专业书、读经典书,使自己的知识面广博起来,才能拓宽自己的专业领域,才能开阔自己的视野,才能不断地汲取生命的营养,才能收获人生的感悟,享受人生的幸福。 做幸福教师,要懂得享受课堂“知识关乎事物,智慧关乎人生。如果只有知识,那你看到一块石头就是一块石头,看到一粒沙子仅是一粒沙子而已。但是一旦拥有了智慧,就可以从一块石头里发现一道风景,从一粒沙子中感悟灵魂的律动。” 做幸福的教师,要有一颗宽容的心教师潜在的人格魅力会深深地感染学生,在真诚的赞美、友善的态度中时刻不忘对孩子有一颗宽容的心。 做幸福老师,享受“文化存款”“教师要想发展起来,就要给自己的心灵留下一个阅读经典的空间,从而使自己的教学登上‘会当凌绝顶’的境地。” 让我们保持一颗进取的心,用阳光心态享受教育,享受读书,享受生活,做一个幸福的教师! 谢谢!'