计算机组成原理 No4 数据的表示和运算-3

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机组成原理PrinciplesofComputerComposition2第二部分数据的表示和运算2.1数制与编码2.2定点数表示和运算2.3浮点数表示和运算2.4算术逻辑单元ALU32.2定点数表示和运算2.2.1定点数的表示1、无符号数的表示;2、有符号数的表示。2.2.2定点数的运算1、定点数的位移运算;2、原码定点数的加/减运算;3、补码定点数的加/减运算;4、定点数的乘法运算4回顾1、移位运算对有符号数的移位运算成为算术移位。对无符号数的移位运算成为逻辑移位。算术移位的特点:对于正数,三种机器数算术移位后符号位均不变,左移最高位丢1,结果错误;右移最低位丢1,影响精度。对于负数,三种机器数算术移位后符号位不变。原码左移,高位丢1,结果出错;原码右移低位丢1,影响精度。补码左移,高位丢0,结果出错;补码右移低位丢1,影响精度。反码左移,高位丢0,结果出错;反码右移低位丢0,影响精度。5回顾2、补码定点数的加/减运算补码加法补码加法的特点:–符号位作为数的一部分参加运算,符号位的进位丢掉。–运算结果为补码形式整数[A]补+[B]补=[A+B]补(mod2n+1)小数[A]补+[B]补=[A+B]补(mod2)补码减法因为A–B=A+(–B),所以有补码减法:整数[A–B]补=[A+(–B)]补=[A]补+[–B]补(mod2n+1)小数[A–B]补=[A+(–B)]补=[A]补+[–B]补(mod2)从[Y]补求[-Y]补的法则是:对[Y]补包括符号位“求反且最末位加1”6回顾3、溢出的检测溢出:运算结果超出机器的表数范围定点加减法溢出条件:–★同号数相加或异号数相减。–★运算结果超载。1)溢出的检测–可能产生溢出的情况两正数加,变负数,上溢(大于机器所能表示的最大数)两负数加,变正数,下溢(小于机器所能表示的最小数)2)溢出的检测方法双符号位法(参与加减运算的数采用变形补码表示)单符号位法7回顾4、反码加减法运算(1)反码加法运算反码加法运算遵循[X]反+[Y]反=[X+Y]反规则。符号位参加运算。符号位相加后,如果有进位,则把该进位的数字加到数的最低位,即循环进位。(2)反码减法两个反码表示的数相减,类似于补码减法,将减数变符号,并根据变号后的减数取反,按反码加法进行。82.2.2定点数的运算7、定点数的乘法运算分析笔算乘法A=–0.1101B=0.1011A×B=–0.100011110.11010.101111011101000011010.10001111×乘积的符号心算求得符号位单独处理乘数的某一位决定是否加被乘数4个位积一起相加乘积的位数扩大一倍?92.2.2定点数的运算笔算乘法改进A•B=A•0.1011=0.1A+0.00A+0.001A+0.0001A=0.1A+0.00A+0.001(A+0.1A)=0.1A+0.01[0•A+0.1(A+0.1A)]=0.1{A+0.1[0•A+0.1(A+0.1A)]}=2-1{A+2-1[0•A+2-1(A+2-1(A+0))]}第一步被乘数A+0第二步1,得新的部分积第八步1,得结果第三步部分积+被乘数…右移一位102.2.2定点数的运算改进后的笔算乘法过程112.2.2定点数的运算1)定点原码乘法(1)原码一位乘运算规则(以小数为例)设[x]原=x0.x1x2xn…[y]原=y0.y1y2yn…=(x0y0).x*y*[x•y]原=(x0y0).(0.x1x2xn)(0.y1y2yn)……式中x*=0.x1x2xn为x的绝对值…y*=0.y1y2yn为y的绝对值…乘积的符号位单独处理x0y0数值部分为绝对值相乘x*•y*122.2.2定点数的运算原码一位乘递推公式x*•y*=x*(0.y1y2yn)…=x*(y12-1+y22-2++yn2-n)…=2-1(y1x*+2-1(y2x*+2-1(ynx*+0)))……z1znz0=0z1=2-1(ynx*+z0)z2=2-1(yn-1x*+z1)zn=2-1(y1x*+zn-1)………z0132.2.2定点数的运算右图是一个32位乘法器的结构框图,其中32位被乘数放在R2中,运算开始时32位乘数放在R1中,运算结束时64位乘积的高位放在R0中,低位放在R1中,R0和R1串联移位。在该乘法过程中,每次操作是根据乘数的一位进行操作,对于32位数的乘法,需要循环32次完成一个乘法操作,因此称为一位乘法。142.2.2定点数的运算完成这个定点原码一位乘法的运算规则可以用如下图所示的逻辑流程图表示。152.2.2定点数的运算已知x=–0.1110y=0.1101求[x•y]原逻辑右移逻辑右移162.2.2定点数的运算①乘积的符号位x0y0=10=1②数值部分按绝对值相乘x*•y*=0.10110110则[x•y]原=1.10110110特点绝对值运算用移位的次数判断乘法是否结束逻辑移位172.2.2定点数的运算原码一位乘的硬件配置0An加法器控制门0Xn移位和加控制计数器CSGM0Qn右移A、X、Q均n+1位移位和加受末位乘数控制182.2.2定点数的运算(2)原码两位乘原码两位乘与原码一位乘一样,符号位的运算和数值部分是分开进行的,但原码两位乘是用两位乘数的状态来决定新的部分积如何形成,因此可提高运算速度。一位乘符号位和数值位部分分开运算两位乘每次用乘数的2位判断原部分积是否加和如何加被乘数192.2.2定点数的运算两位乘数共有4种状态,对应这4种状态可得下表。11100100新的部分积乘数yn-1yn加“0”2加1倍的被乘数2加2倍的被乘数2加3倍的被乘数2202.2.2定点数的运算原码两位乘运算规则111110101100011010001000操作内容标志位Cj乘数判断位yn-1ynz2,y*2,Cj保持“0”z2,y*2,Cj保持“1”z–x*2,y*2,Cj保持“1”z+2x*2,y*2,Cj保持“0”z+x*2,y*2,Cj保持“0”z–x*2,y*2,置“1”Cjz+2x*2,y*2,置“0”Cjz+x*2,y*2,置“0”Cj共有操作+x*+2x*–x*2实际操作+[x*]补+[2x*]补+[–x*]补2补码移212.2.2定点数的运算例:已知x=0.111111y=–0.111001求[x·y]原补码右移222.2.2定点数的运算②数值部分的运算①乘积的符号位x0y0=01=1x*•y*=0.111000000111则[x•y]原=1.111000000111特点绝对值的补码运算算术移位用移位的次数判断乘法是否结束232.2.2定点数的运算原码两位乘和原码一位乘比较符号位操作数移位移位次数最多加法次数x0y0x0y0绝对值绝对值的补码逻辑右移算术右移nnn2(n为偶数)n2+1(n为偶数)原码一位乘原码两位乘n为奇数时,原码两位乘移n/2+1次最多加n/2+1次242.2.2定点数的运算2)补码乘法(1)补码与真值的关系设[x]补=x0.x1x2…xn当X≥0时,x0=0,[x]补=0.x1x2…xn=∑xi2-i=x当x0时,x0=1,[x]补=1.x1x2…xn=2+x所以x=1.x1x2…xn–2=-1+0.x1x2…xn=-1+∑xi2-i得出x=-x0+∑xi2-ini=1ni=1ni=1252.2.2定点数的运算(2)补码的右移正数右移一位,相当于乘1/2。负数用补码表示,右移一位,是否也相当于乘1/2?设[x]补=x0.x1x2…xn因为x=-x0+∑xi2-i所以x=-x0+∑xi2-i=-x0+x0+∑xi2-i=-x0+∑xi2-(i+1)即[x]补=x0.x0x1x2…xnni=112ni=1121212ni=1ni=012262.2.2定点数的运算(3)补码一位乘运算规则设被乘数[x]补=x0.x1x2…xn乘数[y]补=y0.y1y2…yn均为任意符号,则有补码乘法算式:[x.y]补=[x]补.y证明:①被乘数任意,乘数为正根据补码定义,有[x]补=2+x=2n+1+x(mod2)[y]补=y所以,[x]补.[y]补=2n+1.y+x.y=2(y1y2…yn)+x.y由于(y1y2…yn)是大于0的正整数,所以,2(y1y2…yn)=2(mod2)故[x]补.[y]补=2+x.y=[x.y]补即[x.y]补=[x]补.[y]补=[x]补.y272.2.2定点数的运算同原码乘但加和移位按补码规则运算乘积的符号自然形成运算规律:282.2.2定点数的运算②被乘数任意,乘数为负[x]补=x0.x1x2…xn[y]补=1.y1y2…yn=2+y(mod2)因为y=[y]补–2=0.y1y2…yn-1所以x.y=x(0.y1y2…yn)–x[x.y]补=[x(0.y1y2…yn)]补+[–x]补因为0.y1y2…yn0[x(0.y1y2…yn)]补=[x]补(0.y1y2…yn)所以[x.y]补=[x]补(0.y1y2…yn)+[–x]补292.2.2定点数的运算乘数[y]补,去掉符号位,操作同①最后加[–x]补,校正运算规律:302.2.2定点数的运算③被乘数、乘数符号任意设[x]补=x0.x1x2…xn[y]补=y0.y1y2…yn综合①②,得到补码乘法统一算式[x·y]补=[x]补(0.y1…yn)+[–x]补·y0当y0时,y0=0[x.y]补=[x]补.y当y0时,y0=1[x.y]补=[x]补(0.y1y2…yn)+[–x]补31补码比较法(Booth算法)设[x]补=x0.x1x2xn[y]补=y0.y1y2yn……[x·y]补=[x]补(0.y1yn)–[x]补·y0…=[x]补(y12-1+y22-2++yn2-n)–[x]补·y0…=[x]补(–y0+y12-1+y22-2++yn2-n)…=[x]补[–y0+(y1–y12-1)+(y22-1–y22-2)++(yn2-(n-1)–yn2-n)]…=[x]补[(y1–y0)+(y2–y1)2-1++(yn–yn-1)2-(n-1)+(0–yn)2-n)]…y12-1++…yn2-n–[x]补=+[–x]补2-1=20–2-12-2=2-1–2-2=[x]补[(y1–y0)+(y2–y1)2-1++(yn+1–yn)2-n]…附加位yn+132Booth算法递推公式[z0]补=0[z1]补=2-1{(yn+1–yn)[x]补+[z0]补}yn+1=0[zn]补=2-1{(y2–y1)[x]补+[zn-1]补}…[x·y]补=[zn]补+(y1–y0)[x]补最后一步不移位如何实现yi+1–yi?000110111+[x]补1+[–x]补11yiyi+1操作yi+1–yi01-1033例已知x=+0.0011y=–0.1011求[x·y]补解:00.000011.110111.110100.001111.110100.001111.11011.0101000.0001111.11011100.000111111.11011111[x]补=0.0011[y]补=1.0101[–x]补=1.1101+[–x]补11.11101101011+[x]补00.00001110101+[–x]补11.1110111101100.00001111101+[–x]补+[x]补∴[x·y]补=1.11011111最后一步不移位342.2.2定点数的运算Booth算法的硬件配置A、X、Q均n+2位移位和加受末两位乘数控制0An+1n+2位加法器控制门0Xn+10Qnn+1移位和加控制逻辑计数器CGM00,110110右移352.2.2定点数的运算补码两位乘补码两位乘运算规则是根据补码一位乘的规则,把比较yiyi+1的状态应执行的操作和比较yi-1yi的状态应执行的操作合并成一步,便可得出补码两位乘的运算方法。判断位yi-1yiyi+1操作内容000[zi

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功