白中英計(jì)算機(jī)組成原理第2章-運(yùn)算方法與運(yùn)算器.ppt
第2章 運(yùn)算方法和運(yùn)算器,2020年8月12日星期三,2,目錄,2.0 數(shù)據(jù)的類(lèi)型 2.1 數(shù)據(jù)與文字的表示方法 (掌握) 2.2 定點(diǎn)加法、減法運(yùn)算 (掌握) 2.3 定點(diǎn)乘法運(yùn)算 (理解) 2.4 定點(diǎn)除法運(yùn)算 (理解) 2.5 定點(diǎn)運(yùn)算器的組成 (了解) 2.6 浮點(diǎn)運(yùn)算方法和浮點(diǎn)運(yùn)算器(掌握),2020年8月12日星期三,3,學(xué)習(xí)要求,掌握定點(diǎn)和浮點(diǎn)數(shù)的表示方法,表示范圍; 掌握定點(diǎn)數(shù)的補(bǔ)碼加減法、常用的乘除法運(yùn)算方法; 掌握浮點(diǎn)數(shù)的加減運(yùn)算方法; 掌握數(shù)據(jù)校驗(yàn)的方法; 理解溢出判斷方法; 清楚運(yùn)算器部件的組成結(jié)構(gòu)及設(shè)計(jì)方法。,2020年8月12日星期三,4,2.0 數(shù)據(jù)的類(lèi)型(1/2),按數(shù)制分: 十進(jìn)制:在微機(jī)中直接運(yùn)算困難; 二進(jìn)制:占存儲(chǔ)空間少,硬件上易于實(shí)現(xiàn),易于運(yùn)算; 十六進(jìn)制:方便觀察和使用; 二-十進(jìn)制:4位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù),轉(zhuǎn)換簡(jiǎn)單。 按數(shù)據(jù)格式分: 真值:沒(méi)有經(jīng)過(guò)編碼的直觀數(shù)據(jù)表示方式,其值可帶正負(fù)號(hào),任何數(shù)制均可; 機(jī)器數(shù):符號(hào)化編碼后的數(shù)值(包括正負(fù)號(hào)的表示),一般位數(shù)固定(8、16、32),不能隨便忽略任何位置上的0或1;,2020年8月12日星期三,5,2.0 數(shù)據(jù)的類(lèi)型(2/2),按數(shù)據(jù)的表示范圍分: 定點(diǎn)數(shù):小數(shù)點(diǎn)位置固定,數(shù)據(jù)表示范圍??; 浮點(diǎn)數(shù):小數(shù)點(diǎn)位置不固定,數(shù)據(jù)表示范圍較大。 按能否表示負(fù)數(shù)分: 無(wú)符號(hào)數(shù):所有均為表示數(shù)值,直接用二進(jìn)制數(shù)表示; 有符號(hào)數(shù):有正負(fù)之分,最高位為符號(hào)位,其余位表示數(shù)值。 按編碼不同又可分為原碼、反碼、補(bǔ)碼、移碼,2020年8月12日星期三,6,2.1 數(shù)據(jù)與文字的表示方法,2.1.1 數(shù)據(jù)格式 2.1.2 數(shù)的機(jī)器碼表示 2.1.1 數(shù)據(jù)格式 2.1.3 字符與字符串的表示方法 2.1.4 漢字的表示方法 2.1.5 校驗(yàn)碼,2020年8月12日星期三,7,定點(diǎn)數(shù):小數(shù)點(diǎn)固定在某一位置的數(shù)據(jù); 純小數(shù): 表示形式 有符號(hào)數(shù) x=xSx-1x-2x-n 0 |x|1-2-n ;xs為符號(hào)位 無(wú)符號(hào)數(shù) x=x-1x-2x-nx-(n+1) 0 x 1-2-n-1 ;無(wú)符號(hào)位 數(shù)據(jù)表示范圍 0.00= 0 |x| 1-2-n = 0.11 純整數(shù): 表示形式 有符號(hào)數(shù) x=x s x n-1 x 1 x 0 |x|2n-1 ;xs為符號(hào)位無(wú)符號(hào)數(shù) x=x n x n-1 x 1 x 0 0 x2n+1-1 ;xn為數(shù)值位 注意:小數(shù)點(diǎn)的位置是機(jī)器約定好的,并沒(méi)有實(shí)際的保存。,x0 x-1x-2x-3 x-n,xnxn-1xn-2x1x0,2.1.1 數(shù)據(jù)格式定點(diǎn)數(shù),設(shè)采用n+1位數(shù)據(jù),2020年8月12日星期三,8,定點(diǎn)機(jī)的特點(diǎn),所能表示的數(shù)據(jù)范圍小 使用不方便,運(yùn)算精度較低 存儲(chǔ)單元利用率低,2020年8月12日星期三,9,2.1.2 數(shù)的機(jī)器碼表示(有符號(hào)數(shù)),計(jì)算機(jī)中是不會(huì)存儲(chǔ)+號(hào)的,那么怎么表示符號(hào)位呢,怎么讓符號(hào)位同數(shù)值位一道參加運(yùn)算呢。這就是怎么樣把真值轉(zhuǎn)換成機(jī)器碼(原、反、補(bǔ)、移碼) 重點(diǎn): 1、原碼、補(bǔ)碼、移碼的表示形式 2、補(bǔ)碼的定義 3、原碼、補(bǔ)碼、移碼的表示范圍,2020年8月12日星期三,10,1、原碼表示法定義,定義: 定點(diǎn)小數(shù):x原 定點(diǎn)整數(shù):x原 舉例: +0.110 原 0.110 -0.110原 1 - (-0.110) = 1.110 +110原 0110 -110原 23- (-110) 1000 +110 = 1110,x1 x 0 x表示真值,1- x=1+|x| 0 x -1,x2n x 0 n表示數(shù)值位,2n- x=2n+|x| 0 x -2n,實(shí)際機(jī)器中保存時(shí)并不保存小數(shù)點(diǎn),等到的就是機(jī)器碼中的原碼。,xn xn-1xn-2x1x0 Xn是符號(hào)位,0表示正,1表示負(fù),2020年8月12日星期三,11,1、原碼表示法特點(diǎn),0有兩種表示法 +0原 = 0000 ;-0原 = 1000 數(shù)據(jù)表示范圍 定點(diǎn)小數(shù):-1<X<1 定點(diǎn)整數(shù): -2n<X<2n (若數(shù)值位n=3即:-8<X<8) 優(yōu)點(diǎn) 與真值對(duì)應(yīng)關(guān)系簡(jiǎn)單;符號(hào)位+真值的絕對(duì)值 缺點(diǎn) 參與運(yùn)算復(fù)雜,需要將數(shù)值位與符號(hào)位分開(kāi)考慮。減法麻煩,2020年8月12日星期三,12,要將指向5點(diǎn)的時(shí)鐘調(diào)整到3點(diǎn)整,應(yīng)如何處理?,5-2=3,5+10=3(12自動(dòng)丟失。12就是模),補(bǔ)碼表示法的引入(1/3),2020年8月12日星期三,13,繼續(xù)推導(dǎo): 5-2=5+10(MOD 12) 5+(-2)=5+10(MOD 12) -2=10(MOD 12) 結(jié)論:,在模為12的情況下,-2的補(bǔ)碼就是10。一個(gè)負(fù)數(shù)用其補(bǔ)碼代替,同樣可以得到正確的運(yùn)算結(jié)果。,補(bǔ)碼表示法的引入(2/3),2020年8月12日星期三,14,進(jìn)一步結(jié)論: 在計(jì)算機(jī)中,機(jī)器能表示的數(shù)據(jù)位數(shù)是固定的,其運(yùn)算都是有模運(yùn)算。 若是n+1位整數(shù)(包含符號(hào)位),則其模為2n+1; 若是小數(shù),則其模為2。 若運(yùn)算結(jié)果超出了計(jì)算機(jī)所能表示的數(shù)值范圍,則只保留它的小于模的低n位的數(shù)值,超過(guò)n位的高位部分就自動(dòng)舍棄了。,補(bǔ)碼表示法的引入(3/3),2020年8月12日星期三,15,2、補(bǔ)碼表示法定義,定義: 定點(diǎn)小數(shù): x補(bǔ) 定點(diǎn)整數(shù): x補(bǔ) 舉例: +0.110 補(bǔ) 0.110 -0.110 補(bǔ) 10 + (-0.110) = 1.010 +110補(bǔ) 0110 -110 補(bǔ) 24+(-110 ) 10000 -110 = 1010,x 1 x 0,2+x = 2 - |x| 0 x -1,x 2n x 0,2n+1+x = 2n+1-|x| 0 x -2n,x為n+1位,(mod 2) 模+真值,(mod 2n+1),實(shí)際機(jī)器中保存時(shí)并不保存小數(shù)點(diǎn),xnxn-1xn-2x1x0,2020年8月12日星期三,16,2、補(bǔ)碼表示法特點(diǎn),0有唯一的表示法 -0補(bǔ) 24+(-0 ) mod 24 0000 +0補(bǔ) 數(shù)據(jù)表示范圍 定點(diǎn)小數(shù):-1X<1 定點(diǎn)整數(shù): -2nX<2n (若n=3,則-8X<8) 加減運(yùn)算規(guī)則 XY補(bǔ)X補(bǔ) Y補(bǔ) (mod 2) 只要結(jié)果不溢出,可將補(bǔ)碼符號(hào)位與數(shù)值位一起參與運(yùn)算。 x補(bǔ)補(bǔ)x原 補(bǔ)碼除2操作,可通過(guò)算術(shù)右移實(shí)現(xiàn) -0.0110補(bǔ)11010,則(-0.0110)/10補(bǔ) = 11101,真值為-0.0011,比原碼多一個(gè)負(fù)的最小值表示(定點(diǎn)小數(shù)和定點(diǎn)整數(shù)),其編碼為1000,2020年8月12日星期三,17,n位二進(jìn)制數(shù)x,則取反后應(yīng)該是2n1x,再加1就是y=2n1x+1; y取反后應(yīng)該是2n1y,再加1就是z=2n 1y+1; z =2n1(2n1x+1)+1=x;,2020年8月12日星期三,18,0的補(bǔ)碼唯一 純小數(shù)0和0的補(bǔ)碼表示: +0補(bǔ) -0補(bǔ) 20.000=0.000 純整數(shù)0和0的補(bǔ)碼表示: +0補(bǔ) -0補(bǔ) 2n+1 000= 000,-1和-2n 的表示: -1補(bǔ)=2+(-1)=10.000+(-1.000)=1.000 - 2n補(bǔ) = 2n+1 +(- 2n) = 10000+(-1000) = 1000,2020年8月12日星期三,19,由原碼求補(bǔ)碼,由原碼求補(bǔ)碼的簡(jiǎn)便原則(負(fù)數(shù)) 除符號(hào)位以外,其余各位按位取反,末位加1; 從最低位開(kāi)始,遇到的第一個(gè)1以前的各位保持不變,之后各位取反。,例:X原= 1 1 0 1 1 0 1 0 0,X補(bǔ)=,1 0 1 0 0 1,1 0 0,2020年8月12日星期三,20,由X補(bǔ)求-X補(bǔ) 連符號(hào)位一起各位求反,末位加1。 例:X補(bǔ)=1.1010101 解:,由-X補(bǔ)求X補(bǔ),此規(guī)則同樣適用。,求相反數(shù)的補(bǔ)碼,X補(bǔ)= 1 1 0 1 0 1 0 1,0 0 1 0 1 0 1 0,+,1,-X補(bǔ)= 0 0 1 0 1 0 1 1,2020年8月12日星期三,21,3、移碼表示法,移碼通常用于表示浮點(diǎn)數(shù)的階碼 用定點(diǎn)整數(shù)形式的移碼 把真值平移2n個(gè)單位 定義:x移=2n+x2n x -2n 與x補(bǔ)的區(qū)別:符號(hào)位相反 優(yōu)點(diǎn): 可以比較直觀地判斷兩個(gè)數(shù)據(jù)的大??; 浮點(diǎn)數(shù)運(yùn)算時(shí),容易進(jìn)行對(duì)階操作; 表示浮點(diǎn)數(shù)階碼時(shí),容易判斷是否下溢; 當(dāng)階碼為全0時(shí),浮點(diǎn)數(shù)下溢。,4位補(bǔ)碼與移碼,xnxn-1xn-2x1x0,2020年8月12日星期三,22,原、補(bǔ)、移碼的編碼形式,正數(shù): 原、補(bǔ)碼的編碼完全相同; 補(bǔ)碼和移碼的符號(hào)位相反,數(shù)值位相同; 負(fù)數(shù): 原碼: 符號(hào)位為1 數(shù)值部分與真值的絕對(duì)值相同 補(bǔ)碼: 符號(hào)位為1數(shù)值部分與原碼各位相反,且末位加1 移碼: 符號(hào)位與補(bǔ)碼相反,數(shù)值位與補(bǔ)碼相同,2020年8月12日星期三,23,課本P22例6以定點(diǎn)整數(shù)為例,用數(shù)軸形式說(shuō)明原碼、反碼、補(bǔ)碼、移碼表示范圍和可能的數(shù)碼組合情況。,2020年8月12日星期三,24,2020年8月12日星期三,24,課本P22例7將十進(jìn)制真值(127,1,0,1,127)列表表示成二進(jìn)制數(shù)及原碼、反碼、補(bǔ)碼、移碼值。,符號(hào)位+0;- 1,數(shù)值位各位取反,數(shù)值位末位加1,符號(hào)位(正負(fù)數(shù))取反,負(fù)數(shù)時(shí),2020年8月12日星期三,25,P22例8設(shè)機(jī)器字長(zhǎng)16位,定點(diǎn)表示,尾數(shù)15位,數(shù)符1位,問(wèn): (1)定點(diǎn)原碼整數(shù)表示時(shí),最大正數(shù)是多少?最小負(fù)數(shù)是多少? (2)定點(diǎn)原碼小數(shù)表示時(shí),最大正數(shù)是多少?最小負(fù)數(shù)是多少?,(215-1) = +32767,-(215-1) = -32767,(1-2-15) = +(1-1/32768),-(1-2-15) = -(1-1/32768),定點(diǎn)原碼整數(shù) 最大正數(shù) 最小負(fù)數(shù) 定點(diǎn)原碼小數(shù) 最大正數(shù) 最小負(fù)數(shù),2020年8月12日星期三,26,2.1.1 數(shù)據(jù)格式浮點(diǎn)數(shù),浮點(diǎn)數(shù):小數(shù)點(diǎn)位置可變,形如科學(xué)計(jì)數(shù)法中的數(shù)據(jù)表示。 浮點(diǎn)數(shù)格式定義: N= Re M M:尾數(shù)(mantissa) ,是一個(gè)純小數(shù)(整數(shù)部分為0的小數(shù)),表示數(shù)據(jù)的全部有效數(shù)位,決定著數(shù)值的精度; R:基數(shù)(radix) ,可以取2、8、10、16,表示當(dāng)前的數(shù)制; 微機(jī)中,一般默認(rèn)為2,隱含表示。 e: 階碼(exponent) ,是一個(gè)整數(shù),用于指出小數(shù)點(diǎn)在該數(shù)中的位置,決定著數(shù)據(jù)數(shù)值的大小。 機(jī)器數(shù)的一般表示形式,2020年8月12日星期三,27,科學(xué)計(jì)數(shù)法的表示,一個(gè)十進(jìn)制數(shù)可以表示成不同的形式: 同理,一個(gè)二進(jìn)制數(shù)也可以有多種表示:,2020年8月12日星期三,28,浮點(diǎn)數(shù)規(guī)格化,浮點(diǎn)數(shù)的表示 1.1120=0.11121=11.12-1 規(guī)格化的目的 保證浮點(diǎn)數(shù)表示的唯一性; 保留更多地有效數(shù)字,提高運(yùn)算的精度。 規(guī)格化要求 1/R|尾數(shù)|<1;R為基數(shù),如2,即大于1/2 規(guī)格化處理: 尾數(shù)向左移n位(小數(shù)點(diǎn)右移),同時(shí)階碼減n; 尾數(shù)向右移n位(小數(shù)點(diǎn)左移),同時(shí)階碼加n。,右規(guī),左規(guī),2020年8月12日星期三,29,浮點(diǎn)數(shù)的規(guī)格化,尾數(shù)用原碼表示時(shí) 尾數(shù)數(shù)值最高數(shù)值位為1; 尾數(shù)形如0.1(正);或1.1(負(fù)); 例如,0.01125要規(guī)格化則變?yōu)?.1124; 0.01125要規(guī)格化則變?yōu)?.1124; 尾數(shù)用補(bǔ)碼表示時(shí) 尾數(shù)最高數(shù)值位和尾數(shù)符號(hào)位相反; 尾數(shù)形如0.1(正);或1.0(負(fù)) 例如,0.01125要規(guī)格化,則變?yōu)?.1124; 0.01125要規(guī)格化,則變?yōu)?.0124;,2020年8月12日星期三,30,浮點(diǎn)數(shù)的數(shù)據(jù)表示范圍 N= Re M,0,最大負(fù)數(shù),最小正數(shù),最小負(fù)數(shù),最大正數(shù),下溢區(qū),上溢區(qū),上溢區(qū),負(fù)數(shù)區(qū),正數(shù)區(qū),浮點(diǎn)數(shù)的溢出:階碼溢出 上溢:階碼大于所能表示的最大值;無(wú)窮 下溢:階碼小于所能表示的最小值; 0 機(jī)器零: 尾數(shù)為 0,或階碼小于所能表示的最小值;,2e,0,2020年8月12日星期三,31,浮點(diǎn)數(shù)的最值 N= M Re,設(shè)浮點(diǎn)數(shù)格式為,移碼表示-2m,+(2m-1),補(bǔ)碼表示-1,+(1-2-n),-12+( 2m-1 ),-2-n2-2m,+2-n2-2m,+(1-2-n)2+(2m-1),1 ,111;1.0000,0,000;1.1111,0, 000;0.0001,1,111;0.1111,同左,同左,0 000;1 0111,-(2-1+2-n)2-2m,+2-12-2m,同左,同左,0 000;0 1000,2020年8月12日星期三,32,【例1】設(shè)浮點(diǎn)數(shù)的階碼6位(含符號(hào)位),尾數(shù)為10位(含符號(hào)位),階碼采用補(bǔ)碼表示,尾數(shù)采用原碼表示,分析其浮點(diǎn)數(shù)表示范圍。,最大正數(shù) N= MRe 最大正數(shù)為0.11120111 即(129)231 該浮點(diǎn)數(shù)即為規(guī)格化數(shù)形式;,階碼補(bǔ)碼,尾數(shù)原碼,2020年8月12日星期三,33,【例1】設(shè)浮點(diǎn)數(shù)的階碼6位(含符號(hào)位),尾數(shù)為10位(含符號(hào)位),階碼采用補(bǔ)碼表示,尾數(shù)采用原碼表示,分析其浮點(diǎn)數(shù)表示范圍。,最小正數(shù)N= MRe 非規(guī)格化數(shù)形式 最小正數(shù)為0.0012100 即29 2(25)= 29 2-32 規(guī)格化數(shù)形式 最小正數(shù)為0.12100 21 2(25) 233,階碼補(bǔ)碼,尾數(shù)原碼,2020年8月12日星期三,34,【例1】設(shè)浮點(diǎn)數(shù)的階碼6位(含符號(hào)位),尾數(shù)為10位(含符號(hào)位),階碼采用補(bǔ)碼表示,尾數(shù)采用原碼表示,分析其浮點(diǎn)數(shù)表示范圍。,最小負(fù)數(shù)N= MRe 最小負(fù)數(shù)為0.112011 即(129)2(251)= (129) 231 該浮點(diǎn)數(shù)即為規(guī)格化數(shù)形式;,階碼補(bǔ)碼,尾數(shù)原碼,2020年8月12日星期三,35,【例1】設(shè)浮點(diǎn)數(shù)的階碼6位(含符號(hào)位),尾數(shù)為10位(含符號(hào)位),階碼采用補(bǔ)碼表示,尾數(shù)采用原碼表示,分析其浮點(diǎn)數(shù)表示范圍。,最大負(fù)數(shù) 非規(guī)格化數(shù)形式 最大負(fù)數(shù)為0.0012100 即 29 2(25)= 29 2-32 規(guī)格化數(shù)形式 最大負(fù)數(shù)為0. 12100 即 21 2(25)= 2-1 232,階碼補(bǔ)碼,尾數(shù)原碼,2020年8月12日星期三,36,【例2】設(shè)浮點(diǎn)數(shù)的階碼6位(含符號(hào)位),尾數(shù)為10位(含符號(hào)位),階碼和尾數(shù)均采用補(bǔ)碼表示,分析其規(guī)格化浮點(diǎn)數(shù)表示范圍。,最大正數(shù) 階碼最大、尾數(shù)最大 最大正數(shù)為0.1112111 (129)231 最小正數(shù) (規(guī)格化后) 最小正數(shù)為0.1000232 即2-3221 2-33 注意:不是 因?yàn)?.01 2-32不是規(guī)格化數(shù)。,階碼補(bǔ)碼,尾數(shù)補(bǔ)碼,2020年8月12日星期三,37,【例2】設(shè)浮點(diǎn)數(shù)的階碼6位(含符號(hào)位),尾數(shù)為10位(含符號(hào)位),階碼和尾數(shù)均采用補(bǔ)碼表示,分析其規(guī)格化浮點(diǎn)數(shù)表示范圍。,最小的負(fù)數(shù) 最小負(fù)數(shù)為1.000231 即231(1)= 231 最大的負(fù)數(shù) 最大負(fù)數(shù)為0.1001232 即( 29+ 21 )232 注意:因有規(guī)格化要求,不是,階碼補(bǔ)碼,尾數(shù)補(bǔ)碼,2020年8月12日星期三,38,浮點(diǎn)數(shù)的IEEE754標(biāo)準(zhǔn)表示,IEEE(Institute of Electrical and Electronics Engineers) 美國(guó)電氣及電子工程師學(xué)會(huì) IEEE是一家總部在美國(guó)的工程技術(shù)和電子專(zhuān)家的組織; IEEE致力于電氣、電子、計(jì)算機(jī)工程和與科學(xué)有關(guān)的領(lǐng)域的開(kāi)發(fā)和研究,也是計(jì)算機(jī)網(wǎng)絡(luò)標(biāo)準(zhǔn)的主要制定者。 為便于軟件移植,按照 IEEE754 標(biāo)準(zhǔn),實(shí)際機(jī)器內(nèi)32位浮點(diǎn)數(shù)和64位浮點(diǎn)數(shù)的標(biāo)準(zhǔn)格式如下:,0,22,23,30,31,23位尾數(shù),僅為數(shù)值部分,8位階碼,包括階符,1位數(shù)符,32位浮點(diǎn)數(shù),0,51,52,62,63,64位浮點(diǎn)數(shù),11位階碼,包括階符,52位尾數(shù),僅為數(shù)值部分,1位數(shù)符,2020年8月12日星期三,39,32位浮點(diǎn)數(shù)的IEEE754 標(biāo)準(zhǔn)表示,數(shù)符S:表示浮點(diǎn)數(shù)的符號(hào),占1位,0正數(shù)、1負(fù)數(shù); 尾數(shù)M:23位,原碼純小數(shù)表示,小數(shù)點(diǎn)在尾數(shù)域的最前面; 由于原碼表示的規(guī)格化浮點(diǎn)數(shù)要求,最高數(shù)值位始終為1,因此該標(biāo)準(zhǔn)中隱藏最高數(shù)值位(1),尾數(shù)的實(shí)際值為1.M; 階碼E:8 位,采用有偏移值的移碼表示; 移127碼,即E=e+127,E的8位二進(jìn)制數(shù)即為移127碼的編碼; 浮點(diǎn)數(shù)的真值:N=(-1)S(1.M)2E-127,階碼移碼,尾數(shù)原碼,2020年8月12日星期三,40,IEEE754 標(biāo)準(zhǔn)格式 (64位格式),其真值表示為: x=(1)S(1.M)2E1023 eE1023,2020年8月12日星期三,41,IEEE754 標(biāo)準(zhǔn)的數(shù)據(jù)表示,IEEE754 標(biāo)準(zhǔn)中的階碼E 正零、負(fù)零 E與M均為零,正負(fù)之分由數(shù)據(jù)符號(hào)確定; 正無(wú)窮、負(fù)無(wú)窮 E為全1,M為全零,正負(fù)之分由數(shù)據(jù)符號(hào)確定; 階碼E的其余值(0000 00011111 1110)為規(guī)格化數(shù)據(jù); 真正的指數(shù)e的范圍為-126+127,E=0000 0000,M=0000 0000,E=1111 1111,M=0000 0000,0000 0000 1111 1111,2020年8月12日星期三,42,IEEE754 標(biāo)準(zhǔn)對(duì)特殊數(shù)據(jù)的表示,2020年8月12日星期三,43,課本P18 例1,例1 若浮點(diǎn)數(shù)的754標(biāo)準(zhǔn)存儲(chǔ)格式為(41360000)16,求其浮點(diǎn)數(shù)的十進(jìn)制數(shù)值。 解: (41360000)16 = 0100 0001 0011 0110 0000 0000 0000 0000 指數(shù)e=E-127= 1000 0010 0111 1111=0000 0011=3 尾數(shù)1.M=1.011 0110 0000 0000 0000 0000=1.011011 浮點(diǎn)數(shù) N =(-1)S(1.M)2e = (-1)0(1. 011011)23 已經(jīng)是標(biāo)準(zhǔn)化 = (11.375)10,數(shù)符S,階碼E,尾數(shù)M,2020年8月12日星期三,44,課本P18 例2,例2 將(20.59375)10轉(zhuǎn)換成754標(biāo)準(zhǔn)的32位浮點(diǎn)數(shù)的二進(jìn)制存儲(chǔ)格式。 解: (20.59375)10(10100.10011)2 將尾數(shù)規(guī)范為1.M的形式: 10100.100111.01001001124e4 可得:M 010010011 S 0E 41271311000 0011 故,32位浮點(diǎn)數(shù)的754標(biāo)準(zhǔn)格式為: 0100 0001 1010 0100 1100 0000 0000 0000(41A4C000)16,2020年8月12日星期三,45,單精度浮點(diǎn)數(shù)與雙精度浮點(diǎn)數(shù),高級(jí)語(yǔ)言的float、double使用的即是IEEE754規(guī)定的格式。 float :32位浮點(diǎn)值,也叫單精度浮點(diǎn)數(shù)(4字節(jié)保存) double:64位浮點(diǎn)值,也叫雙精度浮點(diǎn)數(shù)(8字節(jié)保存) 單精度浮點(diǎn)數(shù)的例子:,1位 8位 7位 8位 8位,-1100,0.01,2020年8月12日星期三,46,單精度浮點(diǎn)數(shù)與雙精度浮點(diǎn)數(shù),除0之外,IEEE754標(biāo)準(zhǔn)中單精度浮點(diǎn)數(shù)所能表示的絕對(duì)值最小的規(guī)格化浮點(diǎn)數(shù)的格式為: S 0000 0001 00000000000000000000000 V=(-1)S2-126(1.M)= (-1)S2-126(1+0.000),除之外,IEEE754標(biāo)準(zhǔn)中單精度浮點(diǎn)數(shù)所能表示的絕對(duì)值最大的規(guī)格化浮點(diǎn)數(shù)的格式為: S 1111 1110 11111111111111111111111 V=(-1)S2+127(1.M)= (-1)S2-126(1+1.111),2020年8月12日星期三,47,求解技巧,例如:將下列十進(jìn)制數(shù)表示成IEEE754格式的32位浮點(diǎn)數(shù)二進(jìn)制存儲(chǔ)形式。 27/32 11/512 求解: 27/32=27*(1/32) = (0001 1011)2*2-5 尾數(shù):1.1011;階碼:e=-5+4=-1 ,E=e+127=126 IEEE754數(shù)據(jù):0 0111 1110 1011 0000 0000 0000 0000 000 11/512= (0000 1011)2*2-9 尾數(shù):1.011;階碼:e=-9+3=-6 ,E=e+127=121 IEEE754數(shù)據(jù):0 0111 1001 0110 0000 0000 0000 0000 00,2020年8月12日星期三,48,例:將十進(jìn)制數(shù)-54表示成二進(jìn)制定點(diǎn)數(shù)(16位)和浮點(diǎn)數(shù)(16位,其中數(shù)值部分10位,階碼部分4位,階符和數(shù)符各取1位),并寫(xiě)出它在定點(diǎn)機(jī)和浮點(diǎn)機(jī)中的機(jī)器數(shù)形式。,令 x = -54,則x = -110110 16位定點(diǎn)數(shù)真值表示: x = -000 0000 0011 0110 定點(diǎn)機(jī)器數(shù)形式 x原: x補(bǔ): 浮點(diǎn)數(shù)規(guī)格化表示:x = -(0.1101100000)2110 浮點(diǎn)機(jī)器數(shù)形式 x原: x補(bǔ):,非IEEE754標(biāo)準(zhǔn),1 000 0000 0011 0110,1 111 1111 1100 1010,0 0110 ; 1 11 0110 0000,0 0110 ; 1 00 1010 0000,2020年8月12日星期三,49,最大正數(shù): x=1+(1-2-23) 2127 最小正數(shù): x=1.0 2-128 最小負(fù)數(shù): x=-1+(1-2-23) 2127 最大負(fù)數(shù): x=-1.0 2-128,課本P23例9假設(shè)一個(gè)32位非零規(guī)格化浮點(diǎn)數(shù),真值表示為:?jiǎn)枺核硎镜囊?guī)格化的最大正數(shù)、最小正數(shù)、最大負(fù)數(shù)、最小負(fù)數(shù)是多少?(尾數(shù)用原碼表示,類(lèi)似IEEE,但不是),0,1111 1111 1111 1111 1111 111,1111 1111,0,0000 0000 0000 0000 0000 000,0000 0000,1,1111 1111 1111 1111 1111 111,1111 1111,1,0000 0000 0000 0000 0000 000,0000 0000,2020年8月12日星期三,50,浙江大學(xué)考研試題,計(jì)算機(jī)儲(chǔ)存程序的特點(diǎn)之一是把數(shù)據(jù)和指令都作為二進(jìn)制信號(hào)看待。今有一計(jì)算機(jī)字長(zhǎng)32bit,數(shù)符位是第31bit;單精度浮點(diǎn)數(shù)格式如圖所示。 對(duì)于二進(jìn)制數(shù)1000 1111 1110 1111 1100 0000 0000 0000 表示一個(gè)補(bǔ)碼整數(shù),其十進(jìn)制值是多少? 表示一個(gè)無(wú)符號(hào)整數(shù),其十進(jìn)制值是多少? 表示一個(gè)IEEE754標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù),其值是多少?,2020年8月12日星期三,51,二進(jìn)制數(shù)1000 1111 1110 1111 1100 0000 0000 0000,表示一個(gè)補(bǔ)碼整數(shù),其十進(jìn)制值是多少? 作為補(bǔ)碼整數(shù),其對(duì)應(yīng)的原碼是1111 0000 0001 0000 0100 0000 0000 0000 十進(jìn)制值是 -(230+ 229 +228 + 220 + 214 ) 表示一個(gè)無(wú)符號(hào)整數(shù),其十進(jìn)制值是多少? 作為無(wú)符號(hào)整數(shù),其十進(jìn)制值是231+ 227+ 226 +225 + 224 + 223+ 222 +221 + 219 +218 + 217 +216 + 215 +214,2020年8月12日星期三,52,二進(jìn)制數(shù)1 000 1111 1 110 1111 1100 0000 0000 0000,作為IEEE754標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù) 階碼E是0001 1111 指數(shù)e階碼E1270001 11110111 1111 -1100000B-96D 尾數(shù)M=110 1111 1100 0000 0000 0000 則1.M=1. 110 1111 1100 0000 0000 0000=1.110 1111 11 單精度浮點(diǎn)數(shù)值為: X (-1)s1.M2e-(1.110 1111 11)2-96 -(0.1110 1111 11)2-95 -(1416-11516-21216-3)2-95 -0.31152-95,2020年8月12日星期三,53,2009考研真題,12.一個(gè)C語(yǔ)言程序在一臺(tái)32位機(jī)器上運(yùn)行。程序中定義了三個(gè)變量x,y和z,其中x和z是int型,y為short型。當(dāng)x=127,y=-9時(shí),執(zhí)行賦值語(yǔ)句z=x+y后,x、y和z的值分別是: x=0000007FH , y=FFF9H , z=00000076H x=0000007FH , y=FFF9H , z=FFFF0076H x=0000007FH , y=FFF7H , z=FFFF0076H x=0000007FH , y=FFF7H , z=00000076H,2020年8月12日星期三,54,2010考研真題,14.假定變量i,f,d數(shù)據(jù)類(lèi)型分別為int, float, double(int用補(bǔ)碼表示,float和double用IEEE754單精度和雙精度浮點(diǎn)數(shù)據(jù)格式表示),已知i=785,f=1.5678e3,d=1.5e100,若在32位機(jī)器中執(zhí)行下列關(guān)系表達(dá)式,則結(jié)果為真的是() (I) i=(int)(float)i (II)f=(float)(int)f (III)f=(float)(double)f (IV)(d+f)-d=f A. 僅I和II B. 僅I和III C. 僅II和III D. 僅III和IV,關(guān)鍵是“=”兩端的數(shù)據(jù)類(lèi)型是否一致!,2020年8月12日星期三,55,2.1.1數(shù)據(jù)格式十進(jìn)制數(shù)串的表示方法,字符串形式 每個(gè)十進(jìn)制數(shù)位占用一個(gè)字節(jié); 除保存各數(shù)位,還需要指明該數(shù)存放的起始地址和總位數(shù); 主要用于非數(shù)值計(jì)算的應(yīng)用領(lǐng)域。 壓縮的十進(jìn)制數(shù)串形式 采用BCD(二 - 十編碼)碼表示,一個(gè)字節(jié)可存放兩個(gè)十進(jìn)制數(shù)位;4:1 節(jié)省存儲(chǔ)空間,便于直接完成十進(jìn)制數(shù)的算術(shù)運(yùn)算; 用特殊的二進(jìn)制編碼表示數(shù)據(jù)正負(fù),如1100正、1101負(fù),2020年8月12日星期三,56,2.1.3 字符與字符串的表示方法,ASCII碼(美國(guó)國(guó)家信息交換標(biāo)準(zhǔn)字符碼) 包括128個(gè)字符,共需7位編碼; ASCII碼規(guī)定:最高位為0,余下7位作為128個(gè)字符的編碼。 最高位的作用:奇偶校驗(yàn);擴(kuò)展編碼。 字符串 指連續(xù)的一串字符, 每個(gè)字節(jié)存一個(gè)字符。 當(dāng)存儲(chǔ)字長(zhǎng)為2、或4個(gè)字節(jié)時(shí),在同一個(gè)存儲(chǔ)單元中; 可按從低位字節(jié)向高位字節(jié)的順序存放字符串的內(nèi)容; 或按從高位字節(jié)向低位字節(jié)的次序順序存放字符串的內(nèi)容。,2020年8月12日星期三,57,2.1.4 漢字的表示方法,漢字的輸入編碼 目的:直接使用西文標(biāo)準(zhǔn)鍵盤(pán)把漢字輸入到計(jì)算機(jī) 。 分類(lèi):主要有數(shù)字編碼、拼音碼 、字形編碼三類(lèi)。 漢字內(nèi)碼 用于漢字信息的存儲(chǔ)、交換、檢索等操作的機(jī)內(nèi)代碼 一般采用兩個(gè)字節(jié)表示,為了和ASCII區(qū)別,最高位為1。 漢字字模碼 用點(diǎn)陣表示的漢字字形代碼,用于漢字的輸出。,2020年8月12日星期三,58,中文編碼,字符代碼化(輸入),數(shù)字碼 拼音碼 字形碼,2020年8月12日星期三,59,漢字字模碼,2020年8月12日星期三,60,2.1.5 校驗(yàn)碼(數(shù)據(jù)校驗(yàn)),數(shù)據(jù)校驗(yàn)原因 為減少和避免數(shù)據(jù)在計(jì)算機(jī)系統(tǒng)運(yùn)行或傳送過(guò)程中發(fā)生錯(cuò)誤,在數(shù)據(jù)的編碼上提供了檢錯(cuò)和糾錯(cuò)的支持。 數(shù)據(jù)校驗(yàn)碼的定義 能夠發(fā)現(xiàn)某些錯(cuò)誤或具有自動(dòng)糾錯(cuò)能力的數(shù)據(jù)編碼; 也稱(chēng)檢錯(cuò)碼; 數(shù)據(jù)校驗(yàn)的基本原理是擴(kuò)大碼距; 碼距:任意兩個(gè)合法碼之間不同的二進(jìn)制位的最少位數(shù); 僅有一位不同時(shí),稱(chēng)其碼距為1。,2020年8月12日星期三,61,碼距及作用,設(shè)用四位二進(jìn)制表示16種狀態(tài) 16種編碼都用到了,此時(shí)碼距為1; 任何一種狀態(tài)的四位碼中的一位或幾位出錯(cuò),就變成另一個(gè)合法碼; 無(wú)查錯(cuò)能力。 若用四位二進(jìn)制表示8個(gè)狀態(tài) 只用其中的8種編碼,而把另8種編碼作為非法編碼; 可使碼距擴(kuò)大為2; 注意:并不是任選8種編碼都可擴(kuò)大碼距;,2020年8月12日星期三,62,校驗(yàn)碼的類(lèi)型,奇偶校驗(yàn)碼 判斷數(shù)據(jù)中1的個(gè)數(shù)設(shè)置1位校驗(yàn)位; 分奇校驗(yàn)和偶校驗(yàn)兩種,只能檢錯(cuò),無(wú)糾錯(cuò)能力; 海明校驗(yàn)碼 在奇偶校驗(yàn)的基礎(chǔ)上增加校驗(yàn)位而得; 具有檢錯(cuò)和糾錯(cuò)的能力; 循環(huán)冗余校驗(yàn)碼(CRC) 通過(guò)模2的除法運(yùn)算建立數(shù)據(jù)信息和校驗(yàn)位之間的約定關(guān)系; 具有很強(qiáng)的檢錯(cuò)糾錯(cuò)能力。,2020年8月12日星期三,63,奇偶校驗(yàn)碼概念,奇偶校驗(yàn)原理 在數(shù)據(jù)中增加1個(gè)冗余位,使碼距由1增加到2; 如果合法編碼中有奇數(shù)個(gè)位發(fā)生了錯(cuò)誤,就將成為非法代碼。 增加的冗余位稱(chēng)為奇偶校驗(yàn)位。 校驗(yàn)的類(lèi)型 偶校驗(yàn):每個(gè)碼字(包括校驗(yàn)位)中1的數(shù)目為偶數(shù)。 奇校驗(yàn):每個(gè)碼字(包括校驗(yàn)位)中1的數(shù)目為奇數(shù)。 校驗(yàn)過(guò)程 發(fā)送端:按照校驗(yàn)類(lèi)型,在發(fā)送數(shù)據(jù)后添加校驗(yàn)位P; 接收端:對(duì)接收到的數(shù)據(jù)(包括校驗(yàn)位)進(jìn)行同樣類(lèi)型的校驗(yàn),決定數(shù)據(jù)傳輸中是否存在錯(cuò)誤;,2020年8月12日星期三,64,奇偶校驗(yàn)碼校驗(yàn)原理,偶校驗(yàn):在接收端求校驗(yàn)位 P=D7D6D5D4D3D2 D1 D0 P 若P0,則無(wú)錯(cuò);若P1,則有錯(cuò)。 奇校驗(yàn):在接收端求校驗(yàn)位 P=D7D6D5D4D3D2 D1 D0 P 若P1,則無(wú)錯(cuò);若P0,則有錯(cuò)。 電路實(shí)現(xiàn): 一般采用異或電路得到校驗(yàn)位。,1010 1011,求校驗(yàn)碼,偶校驗(yàn)碼 1010 1011 1,奇校驗(yàn)碼 1010 1011 0,2020年8月12日星期三,65,接收端,字,校驗(yàn)位,校驗(yàn)碼,例1: 數(shù)據(jù) 0010 0001,奇校驗(yàn)碼,0010 0001,1,偶校驗(yàn)碼,0010 0001,0,例2:數(shù)據(jù) : 0111 0101,偶校驗(yàn)碼,0111 0101,1,發(fā)送端,(門(mén)電路),0110 0101,1,出錯(cuò)!,奇偶校驗(yàn)碼 例題(1/2),2020年8月12日星期三,66,例3:數(shù)據(jù) : 0111 0101,奇校驗(yàn)碼,0111 0101,0,發(fā)送端,(門(mén)電路),0110 0111,0,接收端,正確,奇偶校驗(yàn)只能發(fā)現(xiàn) 奇數(shù)個(gè)錯(cuò)誤,且不能 糾正錯(cuò)誤!,奇偶校驗(yàn)碼例題(1/2),2020年8月12日星期三,67,海明碼,海明碼是1950年提出的; 只要增加少數(shù)的幾位校驗(yàn)碼,即可檢測(cè)出多位出錯(cuò),并能自動(dòng)恢復(fù)一或幾位出錯(cuò)信息; 實(shí)現(xiàn)原理: 在一個(gè)數(shù)據(jù)中加入幾個(gè)校驗(yàn)位,每個(gè)校驗(yàn)位和某幾個(gè)特定的信息位構(gòu)成偶校驗(yàn)的關(guān)系; 接收端對(duì)每個(gè)偶關(guān)系進(jìn)行校驗(yàn),產(chǎn)生校驗(yàn)因子; 通過(guò)校正因子區(qū)分無(wú)錯(cuò)和碼字中的n個(gè)不同位置的錯(cuò)誤; 不同代碼位上的錯(cuò)誤會(huì)得出不同的校驗(yàn)結(jié)果;,2020年8月12日星期三,68,海明碼確定校驗(yàn)位的位數(shù),設(shè)K為有效信息的位數(shù),r為校驗(yàn)位的位數(shù),則整個(gè)碼字的位數(shù)N應(yīng)滿(mǎn)足不等式: NKr2r1 通常稱(chēng)為(N,K)海明碼 設(shè)某(7,4)海明碼表示的碼字長(zhǎng)度為 位,校驗(yàn)位數(shù)為 位。 例如:數(shù)據(jù)D3D2D1D0 =1001 K=4,r+5 2r ; 可知,需要校驗(yàn)位3位P3P2P1 ;,7,3,2020年8月12日星期三,69,海明碼確定校驗(yàn)位的位置,數(shù)據(jù)表示 數(shù)據(jù)位D(DiDi-1D1D0) 、校驗(yàn)位P(PjPj-1P2P1) 海明碼H (包括數(shù)據(jù)位和校驗(yàn)位):HmHm-1H2H1; 分組原則 每個(gè)校驗(yàn)位Pi從低到高被分在海明碼中位號(hào)2i-1的位置; 例如:數(shù)據(jù)D3D2D1D0 =1001,校驗(yàn)位P3P2P1 海明碼共7位H7H6H2H1 ,各位分配如下:,P1,P2,P3,D0,D1,D2,D3,2020年8月12日星期三,70,海明碼校驗(yàn)分組,校驗(yàn)原則 海明碼的每一位Hi有多個(gè)校驗(yàn)位校驗(yàn),其關(guān)系是被校驗(yàn)的每一位位號(hào)等于校驗(yàn)它的各校驗(yàn)位的位號(hào)之和; 每個(gè)信息位的位置寫(xiě)成用2的冪次之和的形式 ; 例如 H7參與H1、H2、H4的校驗(yàn); H6參與H2、H4的校驗(yàn); H5參與H1、H4的校驗(yàn); H3參與H1、H2的校驗(yàn); 分組情況,P1,P2,P3,D0,D1,D2,D3,第一組P1,第二組P2,第三組P3,第一組(P1、D3、D1、D0) 第二組(P2、D3、D2、D0 ) 第三組(P3、D3、D2、D1 ),2020年8月12日星期三,71,海明碼校驗(yàn)位的形成,校驗(yàn)位形成公式 P1第一組中所有位(除P1)求異或 Pj 第j組中所有位(除Pj)求異或 為了能檢測(cè)兩個(gè)錯(cuò)誤,增加一位校驗(yàn)Pj1,放在最高位。 Pj 1所有位(包括P1,P2 , , Pj)求異或 例如: P1D3D1 D0 =1 0 1=0 P2D3D2 D0 =1 0 1=0 P3D3D2 D1 =1 0 0=1 P4D3D2D1D0P3P2P1=1001001=1,第一組(P1、D3、D1、D0) 第二組(P2、D3、D2、D0 ) 第三組(P3、D3、D2、D1 ),但不能糾錯(cuò)!,2020年8月12日星期三,72,海明碼接收端校驗(yàn)(1/2),接收端接收到數(shù)據(jù)后,分別求S1,S2,S3,Sj S1第一組中所有位(包括P1)求異或 Sj第j組中所有位(包括Pj)求異或 Sj 1 Pj 1 所有位(包括P1,P2 , , Pj)求異或 當(dāng)Sj 11時(shí),有一位出錯(cuò); 由Sj S3 S2S1 的編碼指出出錯(cuò)位號(hào),將其取反,即可糾錯(cuò)。 當(dāng)Sj 10時(shí),無(wú)錯(cuò)或有偶數(shù)個(gè)錯(cuò)(兩個(gè)錯(cuò)的可能性比較大); 當(dāng)Sj S3 S2S1 0 0 00時(shí),接收的數(shù)無(wú)錯(cuò),否則有兩個(gè)錯(cuò)。,2020年8月12日星期三,73,同上例,接收端接收的數(shù)據(jù)為 接收端求S S10101=0 S20101=0 S31100=0 S411001 100 =0 若接收端接收到錯(cuò)誤的數(shù)據(jù) S10101=0 S20111=1 S31110=1 S411101 100 =1,海明碼接收端校驗(yàn)(2/2),第一組(P1、D3、D1、D0) 第二組(P2、D3、D2、D0 ) 第三組(P3、D3、D2、D1 ),無(wú)錯(cuò)誤!,1,S4=1,有錯(cuò)誤! S3S2S1=110,H6位有錯(cuò),應(yīng)取反!,2020年8月12日星期三,74,【練習(xí)】設(shè)待校驗(yàn)的數(shù)據(jù)為D7D010101011,寫(xiě)出其海明校驗(yàn)碼。,【解】 確定海明校驗(yàn)位的位數(shù) 因?yàn)镵8, 由NKr 2r1,得9r 2r,校驗(yàn)位的位數(shù)為r4。 確定校驗(yàn)位的位置 i:12 11 10 9 8 7 6 5 4 3 2 1 D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1 分組(N位分r組),2020年8月12日星期三,75,【練習(xí)】設(shè)待校驗(yàn)的數(shù)據(jù)為D7D010101011,寫(xiě)出其海明校驗(yàn)碼。,校驗(yàn)位的形成 P1=D6 D4 D3 D1 D0 1; P2=D6 D5 D3 D2 D0 1 P3=D7 D3 D2 D1 1 ; P4=D7 D6 D5 D4 0 所以,信息碼10101011的海明校驗(yàn)碼為:1010 0 101 1 1 11,2020年8月12日星期三,76,海明碼的糾錯(cuò)與檢錯(cuò)能力,一個(gè)系統(tǒng)能糾正一位差錯(cuò)時(shí),碼距最小是3; 碼距為3時(shí),或能糾正一位錯(cuò),或能檢測(cè)二位錯(cuò); 但不能同時(shí)糾正一位錯(cuò)并檢測(cè)二位錯(cuò)。 碼距為1至7時(shí),海明碼的糾錯(cuò)和檢錯(cuò)能力如右表: 碼距越大,糾錯(cuò)能力越強(qiáng),但數(shù)據(jù)冗余也越大,即編碼效率低了。,2020年8月12日星期三,77,CRC校驗(yàn),CRC的工作方法 在發(fā)送端產(chǎn)生一個(gè)循環(huán)冗余碼,附加在信息位后面一起發(fā)送到接收端; 接收端收到的信息按發(fā)送端形成循環(huán)冗余碼同樣的算法進(jìn)行校驗(yàn); 若無(wú)錯(cuò),則接收;若有錯(cuò),需重發(fā)。 CRC的特點(diǎn) 可檢測(cè)出所有奇數(shù)位錯(cuò); 可檢測(cè)出所有雙比特的錯(cuò); 可檢測(cè)出所有小于、等于校驗(yàn)位長(zhǎng)度的突發(fā)錯(cuò)。 CRC碼的信息字段和校驗(yàn)字段的長(zhǎng)度可以任意選定。,2020年8月12日星期三,78,2.2 定點(diǎn)加法、減法運(yùn)算,2.2.1 補(bǔ)碼加法 2.2.2 補(bǔ)碼減法 2.2.3 溢出概念與檢驗(yàn)方法 2.2.4 基本的二進(jìn)制加法、減法器,2020年8月12日星期三,79,2.2.1 補(bǔ)碼加法,補(bǔ)碼加法運(yùn)算基本公式 定點(diǎn)整數(shù): x+y補(bǔ) x補(bǔ) + y補(bǔ) (mod 2n+1)定點(diǎn)小數(shù): x+y補(bǔ) x補(bǔ) + y補(bǔ) (mod 2) 證明 (1)證明依據(jù):補(bǔ)碼的定義(以定點(diǎn)小數(shù)為例) (2)證明思路:分三種情況。 (a) x、y均為正值(0,0) (b) x、y一正一負(fù)(0,0 或者0) (c) x、y均為負(fù)值(<0,<0),2020年8月12日星期三,80,補(bǔ)碼加法公式證明(1/2),證明: (a)0,0 補(bǔ)補(bǔ)補(bǔ)(mod 2) (b)<0,<0 x補(bǔ)=2+x , y補(bǔ)=2+y x補(bǔ)+ y補(bǔ)= 2+x+2+y =2+ (2+x+y) = 2+x+y補(bǔ) (mod 2) = x+y補(bǔ),2020年8月12日星期三,81,補(bǔ)碼加法公式證明(2/2),(c)0,0 (0的證明與此相同) x補(bǔ)=x , y補(bǔ)=2+y x補(bǔ)+ y補(bǔ)= x+2+y =2+ (x+y) 當(dāng)x+y0時(shí),2+(x+y) 2 ,進(jìn)位2必丟失; 因(x+y) 0 ,故x補(bǔ)+y補(bǔ)= x+y =x+y補(bǔ) (mod 2) 當(dāng)x+y<0時(shí),2+(x+y) < 2 因(x+y) < 0 ,故x補(bǔ)+ y補(bǔ)= 2+(x+y) =x+y補(bǔ) (mod 2),2020年8月12日星期三,82,定點(diǎn)數(shù)補(bǔ)碼加法舉例,例11 +1001, +0101, 求。 解: 補(bǔ)0 1001, 補(bǔ)0 0101 補(bǔ) 0 1001 補(bǔ)0 0101 補(bǔ) 0 1110 所以1110,例12 x1011, 0101, 求。 解: 補(bǔ)0 1011, 補(bǔ)1 1011 補(bǔ)0 1011 補(bǔ)1 1011 補(bǔ) 10 0110 所以+ 0110,2020年8月12日星期三,83,2.2.2 補(bǔ)碼減法,補(bǔ)碼減法運(yùn)算基本公式 定點(diǎn)整數(shù):x - y補(bǔ)x補(bǔ) - y補(bǔ)x補(bǔ) + -y補(bǔ) (mod 2n+1) 定點(diǎn)小數(shù):x - y補(bǔ)x補(bǔ) - y補(bǔ)x補(bǔ) + -y補(bǔ) (mod 2) 證明:只需要證明 補(bǔ)補(bǔ) 已證明x+y補(bǔ) x補(bǔ) + y補(bǔ) ,故y補(bǔ)x+y補(bǔ)x補(bǔ) 又xy補(bǔ) x補(bǔ) + y補(bǔ) ,故y補(bǔ)xy補(bǔ)x補(bǔ) 可得y補(bǔ) + y補(bǔ)x+y補(bǔ)+ xy補(bǔ)x補(bǔ) x補(bǔ) x + y + xy補(bǔ)x補(bǔ) x補(bǔ) x + x補(bǔ)x補(bǔ) x補(bǔ)0 補(bǔ)等于補(bǔ)的各位取反,末位加1。,2020年8月12日星期三,84,定點(diǎn)數(shù)補(bǔ)碼減法舉例例13 已知1 1110,2 + 1101, 求:1補(bǔ),1補(bǔ),2補(bǔ),2補(bǔ)。,解: 1補(bǔ) 1 0010 1補(bǔ) 1補(bǔ)1 0 11010 00010 1110 2補(bǔ) 0 1101 2補(bǔ)2補(bǔ)1 1 00100 00011 0011,注意課本上的錯(cuò)誤!,注意課本上的錯(cuò)誤!,2020年8月12日星期三,85,定點(diǎn)數(shù)補(bǔ)碼減法舉例 例14 1101,0110,求。,解: 補(bǔ)0 1101,補(bǔ)0 0110,補(bǔ)1 1010 補(bǔ) 補(bǔ)補(bǔ) 0 1101 1 1010 10 0111 0 0111 0111,0 1101,) 1 1010,1 0 0111,2020年8月12日星期三,86,2020年8月12日星期三,86,定點(diǎn)數(shù)補(bǔ)碼加減法運(yùn)算,基本公式 定點(diǎn)整數(shù):x y補(bǔ) x補(bǔ) + y補(bǔ) (mod 2n+1) 定點(diǎn)小數(shù):x y補(bǔ) x補(bǔ) + y補(bǔ) (mod 2) 定點(diǎn)數(shù)補(bǔ)碼加減法運(yùn)算 符號(hào)位和數(shù)值位可同等處理; 只要結(jié)果不溢出,將結(jié)果按2n+1或2取模,即為本次運(yùn)算結(jié)果。,2020年8月12日星期三,87,例 設(shè)機(jī)器字長(zhǎng)為8位,補(bǔ)1010 0011, 補(bǔ)0010 1101 ,求xy。,解: 補(bǔ)1101 0011 補(bǔ) 補(bǔ)補(bǔ) 1010 0011 1101 0011 1 0111 0110 0111 0110 118,1010 0011,) 1101 0011,1 0111 0110,x= 93,y= +45 計(jì)算過(guò)程中,產(chǎn)生了溢出! 9345=-138 < 128,2020年8月12日星期三,88,2.2.3 溢出概念與檢測(cè)方法,溢出 在定點(diǎn)數(shù)機(jī)器中,數(shù)的大小超出了定點(diǎn)數(shù)能表示的范圍。 上溢 數(shù)據(jù)大于機(jī)器所能表示的最大正數(shù); 下溢 數(shù)據(jù)小于機(jī)器所能表示的最小負(fù)數(shù); 例如,4位補(bǔ)碼表示的定點(diǎn)整數(shù),范圍為-8,+7 若x = 5,y = 4,則x+y產(chǎn)生上溢 若x = -5,y = -4,則x+y產(chǎn)生下溢 若x = 5,y = -4,則x-y產(chǎn)生上溢,2020年8月12日星期三,88,2020年8月12日星期三,89,例題,例15 +1011, +1001,求。 解:補(bǔ)0.1011 補(bǔ)0.1001 補(bǔ)0.1011 補(bǔ)0.1001 補(bǔ)1.0100,例16 -1101, -1111,求。 解:補(bǔ)1.0011 補(bǔ)1.0001 補(bǔ)1.0011 補(bǔ)1.0001 補(bǔ) 0.0101,正數(shù)+正數(shù)=負(fù)數(shù),負(fù)數(shù)+負(fù)數(shù)=正數(shù),溢出!,2020年8月12日星期三,90,溢出判別方法直接判別法,方法: 同號(hào)補(bǔ)碼相加,結(jié)果符號(hào)位與加數(shù)相反; 異號(hào)補(bǔ)碼相減,結(jié)果符號(hào)位與減數(shù)相同; 特點(diǎn):硬件實(shí)現(xiàn)較復(fù)雜; 舉例: 若x補(bǔ)=0101,y補(bǔ)=0100,則x+y補(bǔ)=1001 若x補(bǔ)=1011,y補(bǔ)=1100,則x+y補(bǔ)=0111 若x補(bǔ)=0101,y補(bǔ)=1100 ,則x-y補(bǔ)=1001,上溢,下溢,上溢,2020年8月12日星期三,91,溢出判別方法變形補(bǔ)碼判別法,變形補(bǔ)碼,也叫模4補(bǔ)碼:采用雙符號(hào)位表示補(bǔ)碼 判別方法: 特點(diǎn):硬件實(shí)現(xiàn)簡(jiǎn)單,只需對(duì)結(jié)果符號(hào)位進(jìn)行異或 舉例: 若x補(bǔ)=00101,y補(bǔ)=00100,則x+y補(bǔ)=01001 若x補(bǔ)=11011,y補(bǔ)=11100,則x+y補(bǔ)=10111 若x補(bǔ)=00101,y補(bǔ)=11100 ,則x-y補(bǔ)=01001,上溢,下溢,上溢,2020年8月12日星期三,92,2020年8月12日星期三,92,溢出判別方法進(jìn)位判別法,0101,) 0100,1001,1,0,0001,) 0100,0101,0,0,V=01=1,V=00=0,判別方法: 最高數(shù)值位的進(jìn)位與符號(hào)位的進(jìn)位是否相同; 判別公式 溢出標(biāo)志V=Cf Cn-1 其中Cf為符號(hào)位產(chǎn)生的進(jìn)位, Cn-1為最高數(shù)值位產(chǎn)生的進(jìn)位。 舉例:,2020年8月12日星期三,93,回顧邏輯門(mén)圖形符號(hào),2020年8月12日星期三,94,2.2.4 基本的二進(jìn)制加法/減法器,一位二進(jìn)制數(shù)據(jù)的半加器: 加數(shù):Ai、Bi 結(jié)果:Si(和) Ci+1(本位向高位的進(jìn)位) 一位半加器示意圖:,一位二進(jìn)制數(shù)據(jù)的全加器: 加數(shù):Ai、Bi Ci(低位向本位的進(jìn)位) 結(jié)果:Si(和) Ci+1(本位向高位的進(jìn)位) 一位全加器示意圖:,2020年8月12日星期三,95,一位二進(jìn)制數(shù)據(jù)的全加器的邏輯結(jié)構(gòu),全加運(yùn)算的真值表如右所示: 兩個(gè)輸出端的邏輯表達(dá)式 SiAiBiCi Ci1AiBiBiCiCiAi 全加器邏輯結(jié)構(gòu):,3T+1T+1T,3T+3T,2020年8月12日星期三,96,多位二進(jìn)制數(shù)據(jù)加法器,兩個(gè)n位的數(shù)據(jù)A=An-1An-2A1A0,B=Bn-1Bn-2B1B0 和S=Sn-1Sn-2S1S0 采用進(jìn)位判別法判斷運(yùn)算的溢出: V=CnCn-1,2020年8月12日星期三,97,多位二進(jìn)制數(shù)據(jù)加法/減法器,將減法轉(zhuǎn)換成加法 A補(bǔ) - B補(bǔ) A補(bǔ) + -B補(bǔ) 由B補(bǔ) 求-B補(bǔ) B補(bǔ) 求各位取反,末位加1; 將加減法電路合二為一 使用異或運(yùn)算; 當(dāng)M=0時(shí),Bi=Bi 當(dāng)M=1時(shí),Bi=Bi ;,2020年8月12日星期三,98,多位二進(jìn)制數(shù)據(jù)加法/減法器,3T+5T =1*2T+6T,(1*2T+6T)+2T =2*2T+6T,(n-1)*2T+6T,(n*2T+6T)+3T =2nT+9T,動(dòng)畫(huà)演示: 2-1.swf,n*2T+6T,2020年8月12日星期三,99,多位二進(jìn)制加法/減法器的輸出延遲,假如每位均采用一位全加器并考慮溢出檢測(cè),n位行波進(jìn)位加法器的延遲時(shí)間ta為: tan*2T9T(2n9)T 如果不考慮溢出,則延遲時(shí)間ta由Sn-1的輸出延遲決定: ta (n-1)*2T6T + 3T (2(n-1)9)T 延遲時(shí)間ta 輸入穩(wěn)定后,在最壞情況下加法器得到穩(wěn)定的輸出所需的最長(zhǎng)時(shí)間。 顯然這個(gè)時(shí)間越小越好。,2020年8月12日星期三,100,2.3 定點(diǎn)乘法運(yùn)算,2.3.0 串行乘法 2.3.1 原碼并行乘法 2.3.2 直接補(bǔ)碼并行乘法,2020年8月12日星期三,101,2.3.0 串行乘法,1. 分析筆算乘法,A = 0.1101 B = 0.1011,AB = 0.10001111,0 . 1 1 0 1,0 . 1 0 1 1,1 1 0 1,1 1 0 1,0 0 0 0,1 1 0 1,0 . 1 0 0 0 1 1 1 1,符號(hào)位單獨(dú)處理,乘數(shù)的某一位決定是否加被乘數(shù),4個(gè)位積一起相加,乘積的位數(shù)擴(kuò)大一倍,乘積的符號(hào)心算求得,?,2020年8月12日星期三,102,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.010 A + 0. 1( A +0.1A),= 0.1A +0.1 0 A+0.1(A + 0.1A),= 2-1A +2-1 0 A+2-1(A + 2-1(A+0),第一步 被乘數(shù)A + 0,第二步 部分積右移1位,得新的部分積,第八步 部分積右移1位,得結(jié)果,第三步 部分積 + 被乘數(shù),2. 筆算乘法改進(jìn),2020年8月12日星期三,103,0 . 0 0 0 0,0 . 1 1 0 1,0 . 1 1 0 1,0 . 1 1 0 1,0 . 0 0 0 0,0 . 1 1 0 1,初態(tài),部分積 = 0,乘數(shù)為 1,加被乘數(shù),乘數(shù)為 1,加被乘數(shù),乘數(shù)為 0,加 0,乘數(shù)為 1,加 被乘數(shù),3. 改進(jìn)后的筆算乘法過(guò)程(豎式),2020年8月12日星期三,104,小結(jié),乘法運(yùn)算 加法移位。 若乘數(shù)數(shù)值位n = 4,則累加 4 次,移位4 次; 乘法過(guò)程 由乘數(shù)的末位決定被乘數(shù)是否與原部分積相加; 被乘數(shù)只與部分積的高位相加 部分積右移一位形成新的部分積; 同時(shí)乘數(shù)右移一位(末位移丟); 空出高位存放部分積的低位。 硬件構(gòu)成 3個(gè)具有移位功能的寄存器、一個(gè)全加器,2020年8月12日星期三,105,A、X、Q 均 n+1 位,移位和加受末位乘數(shù)控制,串行乘法的硬件配置,運(yùn)算前為: n+1位部分積 初值為0 運(yùn)算后為: 乘積高n+1位,被乘數(shù) 乘運(yùn)算時(shí)用到的加數(shù),運(yùn)算前為: n+1位乘數(shù) 運(yùn)算后為: 乘積低n+1位,2020年8月12日星期三,106,常用的串行乘法運(yùn)算,原碼乘法(符號(hào)位和數(shù)值位必須分開(kāi)計(jì)算) 原碼一位乘 一次判斷1位,需判斷n次(乘數(shù)位數(shù)為n); 原碼兩位乘 一次判斷2位,可提高乘法的運(yùn)算速度; 補(bǔ)碼乘法(符號(hào)位和數(shù)值位可以等同處理) 補(bǔ)碼一位乘 結(jié)果修正法需區(qū)分乘數(shù)正負(fù)號(hào),復(fù)雜 Booth算法比較法,符號(hào)位直接參與運(yùn)算 補(bǔ)碼兩位乘,2020年8月12日星期三,107,原碼一位乘法,設(shè)XXf . X1X2Xn, YYf . Y1Y2Yn,乘積的符號(hào)位為Pf,則 PfXfYf |P|X|Y| 求|P|的運(yùn)算規(guī)則如下 被乘數(shù)和乘數(shù)均取絕對(duì)值參加運(yùn)算,符號(hào)位單獨(dú)考慮; 被乘數(shù)取雙符號(hào)位,部分積的長(zhǎng)度同被乘數(shù),初值為0; 從乘數(shù)的最低位Yn開(kāi)始判斷: 若Yn1,則部分積加上被乘數(shù)|X|,然后右移一位; 若Yn0,則部分積加上0,然后右移一位。 重復(fù),判斷n次,例 題,2020年8月12日星期三,108,部分積 乘數(shù) Yn 說(shuō) 明 0 0. 0 0 0 0 0. 1 0 1 1,例1.若X=0.1101,Y=-0.1011,用原碼一位乘法求XY原。,【解答】|X|=00.1101(用雙符號(hào)位表示),|Y|=0.1011(用單符號(hào)位), 0 0. 1 0 0 0 1 1 1 1 0 右移一位得P4,由于Pf=XfYf=01=1,|P|X|*|Y|=0.10001111,XY原= 1.1000111