第三章運算方法和運算部件_第1頁
第三章運算方法和運算部件_第2頁
第三章運算方法和運算部件_第3頁
第三章運算方法和運算部件_第4頁
第三章運算方法和運算部件_第5頁
已閱讀5頁,還剩109頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第三章運算方法和運算部件第一頁,共一百一十四頁,編輯于2023年,星期四第一講:不同層次程序員看到的運算及ALU主要內(nèi)容C語言程序中涉及的運算整數(shù)算術(shù)運、浮點數(shù)算術(shù)運算按位、邏輯、移位、位擴(kuò)展和位截斷指令集中與運算相關(guān)的指令(以MIPS為參考)涉及到的定點數(shù)運算算術(shù)運算帶符號整數(shù)運算:取負(fù)/符號擴(kuò)展/加/減/乘/除/算術(shù)移位無符號整數(shù)運算:0擴(kuò)展/加/減/乘/除邏輯運算邏輯操作:與/或/非/…移位操作:邏輯左移/邏輯右移涉及到的浮點數(shù)運算:加、減、乘、除基本運算部件ALU的設(shè)計第二頁,共一百一十四頁,編輯于2023年,星期四C語言程序中涉及的運算算術(shù)運算(最基本的運算)無符號數(shù)、帶符號整數(shù)、浮點數(shù)的運算按位運算用途對位串實現(xiàn)“掩碼”(mask)操作或相應(yīng)的其他處理(主要用于對多媒體數(shù)據(jù)或控制信息進(jìn)行處理)操作按位或:“|”按位與:“&”按位取反:“~”按位異或:“^”問題:如何從一個16位采樣數(shù)據(jù)y中提取高位字節(jié),并使低字節(jié)為0?可用“&”實現(xiàn)“掩碼”操作:y&0xFF00例如,當(dāng)y=0x2C0B時,通過掩碼操作得到結(jié)果為:0x2C00第三頁,共一百一十四頁,編輯于2023年,星期四C語言程序中涉及的運算邏輯運算用途用于關(guān)系表達(dá)式的運算例如,if(x>yandi<100)then……中的“and”運算操作“‖”表示“OR”運算“&&”表示“AND”運算

例如,if((x>y)&&(i<100))then……“!”表示“NOT”運算與按位運算的差別符號表示不同:&~&&;|~‖;……運算過程不同:按位~整體結(jié)果類型不同:位串~邏輯值第四頁,共一百一十四頁,編輯于2023年,星期四C語言程序中涉及的運算移位運算用途提取部分信息擴(kuò)大或縮小數(shù)值的2、4、8…倍操作左移::x<<k;右移:x>>k不區(qū)分是邏輯移位還是算術(shù)移位,由x的類型確定無符號數(shù):邏輯左移、邏輯右移高(低)位移出,低(高)位補(bǔ)0,可能溢出!問題:何時可能發(fā)生溢出?如何判斷溢出?若高位移出的是1,則左移時發(fā)生溢出帶符號整數(shù):算術(shù)左移、算術(shù)右移左移:高位移出,低位補(bǔ)0??赡芤绯觯?/p>

溢出判斷:若移出的位不等于新的符號位,則溢出。右移:低位移出,高位補(bǔ)符,可能發(fā)生數(shù)據(jù)丟失。第五頁,共一百一十四頁,編輯于2023年,星期四C語言程序中涉及的運算位擴(kuò)展和位截斷運算用途類型轉(zhuǎn)換時可能需要數(shù)據(jù)擴(kuò)展或截斷操作沒有專門操作運算符,根據(jù)類型轉(zhuǎn)換前后數(shù)據(jù)長短確定是擴(kuò)展還是截斷擴(kuò)展:短轉(zhuǎn)長無符號數(shù):0擴(kuò)展,前面補(bǔ)0帶符號整數(shù):符號擴(kuò)展,前面補(bǔ)符截斷:長轉(zhuǎn)短

強(qiáng)行將高位丟棄,故可能發(fā)生“溢出”例1:在大端機(jī)上輸出si,usi,i,ui的十進(jìn)制和十六進(jìn)制值是什么?shortsi=-12345;unsignedshortusi=si;inti=si;unsingnedui=usi;si=-12345CFC7usi=53191CFC7i=-12345FFFFCFC7ui=531910000CFC7例2:i和j是否相等?inti=53191;shortsi=(short)i;intj=si;不相等!i=531910000CFC7si=-12345CFC7j=-12345FFFFCFC7原因:對i截斷時發(fā)生了“溢出”,即:53191截斷為16位數(shù)時,有效數(shù)據(jù)丟失,無法被正確表示!第六頁,共一百一十四頁,編輯于2023年,星期四MIPS定點算術(shù)運算指令I(lǐng)nstruction Example Meaning Commentsadd add$1,$2,$3 $1=$2+$3 3operands;exceptionpossiblesubtract sub$1,$2,$3 $1=$2–$3 3operands;exceptionpossibleaddimmediate addi$1,$2,100 $1=$2+100 +constant;exceptionpossibleaddunsigned addu$1,$2,$3 $1=$2+$3 3operands;noexceptionssubtractunsigned subu$1,$2,$3 $1=$2–$3 3operands;noexceptionsaddimm.unsign. addiu$1,$2,100 $1=$2+100 +constant;noexceptionsmultiply mult$2,$3 Hi,Lo=$2x$3 64-bitsignedproductmultiplyunsigned multu$2,$3 Hi,Lo=$2x$3 64-bitunsignedproductdivide div$2,$3 Lo=$2÷$3, Lo=quotient,Hi=remainder Hi=$2mod$3divideunsigned divu$2,$3 Lo=$2÷$3, Unsignedquotient&remainder Hi=$2mod$3涉及到的操作數(shù):32/16位無符號數(shù),32/16位帶符號數(shù)涉及到的操作:加/減/乘/除(有符號/無符號)第七頁,共一百一十四頁,編輯于2023年,星期四MIPS邏輯運算指令涉及到的操作數(shù):32/16位邏輯數(shù)涉及到的操作:按位與/按位或/按位或非/左移/右移第八頁,共一百一十四頁,編輯于2023年,星期四MIPS定點比較和分支指令涉及到的操作數(shù):32/16位無符號數(shù),32/16位帶符號數(shù)涉及到的操作:大小比較和相等比較(有符號/無符號)通過減法運算實現(xiàn)“比較”操作!第九頁,共一百一十四頁,編輯于2023年,星期四MIPS定點數(shù)據(jù)傳送指令涉及到的操作數(shù):32/16位帶符號數(shù)(偏移量可以是負(fù)數(shù))涉及到的操作:加/減/符號擴(kuò)展/0擴(kuò)展第十頁,共一百一十四頁,編輯于2023年,星期四MIPS中的浮點算術(shù)運算指令涉及到的浮點操作數(shù):32位單精度/64位雙精度浮點數(shù)涉及到的浮點操作:加/減/乘/除

MIPS提供專門的浮點數(shù)寄存器:32個32位單精度浮點數(shù)寄存器:$f0,$f1,……,$f31連續(xù)兩個寄存器(一偶一奇)存放一個雙精度浮點數(shù)第十一頁,共一百一十四頁,編輯于2023年,星期四MIPS中的浮點數(shù)傳送指令涉及到的浮點操作數(shù):32位單精度浮點數(shù)涉及到的浮點操作:傳送操作(與定點傳送一樣)還涉及到定點操作:加/減(用于地址運算)例:將兩個浮點數(shù)從內(nèi)存取出相加后再存到內(nèi)存的指令序列為:lwcl$f1,x($s1)lwcl$f2,y($s2)add.s$f4,$f1,$f2swlc$f4,z(s3)第十二頁,共一百一十四頁,編輯于2023年,星期四MIPS中的浮點數(shù)比較和分支指令涉及到的浮點操作數(shù):32位單精度浮點數(shù)/64位雙精度浮點數(shù)涉及到的浮點操作:比較操作(用

減法來實現(xiàn)比較)還涉及到的定點操作:加/減(用于地址運算)

有一個專門的浮點標(biāo)志cond,無需在指令中明顯給出cond第十三頁,共一百一十四頁,編輯于2023年,星期四MIPS指令考察的結(jié)果涉及到的操作數(shù):無符號整數(shù)、帶符號整數(shù)邏輯數(shù)浮點數(shù)涉及到的運算定點數(shù)運算帶符號整數(shù)運算:取負(fù)/符號擴(kuò)展/加/減/乘/除/算術(shù)移位無符號整數(shù)運算:0擴(kuò)展/加/減/乘/除邏輯運算邏輯操作:與/或/非/…移位操作:邏輯左移/邏輯右移浮點數(shù)運算:加、減、乘、除實現(xiàn)MIPS定點運算指令的思路:先實現(xiàn)一個能進(jìn)行基本算術(shù)運算(加/減)和基本邏輯運算、并生成基本條件碼(ZF/OF/CF/NF)的ALU,再由ALU和移位器實現(xiàn)乘、除運算器。ALU是運算部件的核心!以下介紹ALU的實現(xiàn)。第十四頁,共一百一十四頁,編輯于2023年,星期四ALU的功能說明ALUControlLines(ALUop)Function000 And001 Or010 Add110 Subtract111 Set-on-less-thanALUNNNABResultOverflowZero3ALUopCarryOutALU可進(jìn)行基本的加/減算術(shù)運算、基本邏輯運算。其核心部件是加法器。有關(guān)串行加法器和并行加法器的原理在數(shù)字邏輯電路課已講過,在此僅簡單回顧。第十五頁,共一百一十四頁,編輯于2023年,星期四回顧:串行進(jìn)位加法器假定與/或門延遲為1ty,異或門3ty,則“和”與“進(jìn)位”的延遲為多少?FA全加器符號:串行加法器的缺點:進(jìn)位按串行方式傳遞,速度慢!問題:n位串行加法器從C0到Cn的延遲時間為多少?最后一位和數(shù)的延遲時間為多少?2n+1級門延遲!2n級門延遲!Sum延遲為6ty;Carryout延遲為2ty。FAFAFAn位串行(行波)加法器:C0Cn第十六頁,共一百一十四頁,編輯于2023年,星期四回顧:并行進(jìn)位加法器(CLA加法器)為什么用先行進(jìn)位方式?串行進(jìn)位加法器采用串行逐級傳遞進(jìn)位,電路延遲與位數(shù)成正比關(guān)系。

因此,現(xiàn)代計算機(jī)采用一種先行進(jìn)位(Carrylookahead)方式。如何產(chǎn)生先行進(jìn)位?定義輔助函數(shù):Gi=XiYi…進(jìn)位生成函數(shù)Pi=Xi+Yi…進(jìn)位傳遞函數(shù)(或Pi=Xi⊕Yi)

通常把實現(xiàn)上述邏輯的電路稱為進(jìn)位生成/傳遞部件

全加邏輯方程:Si=Pi⊕CiCi+1=Gi+PiCi(i=0,1,…n)

設(shè)n=4,則:C1=G0+P0C0C2=G1+P1C1=G1+P1G0+P1P0C0

C3=G2+P2C2=G2+P2G1+P2P1G0+P2P1P0C0

C4=G3+P3C3=G3+P3G2+P3P2G1+P3P2P1G0+P3P2P1P0C0由上式可知:各進(jìn)位之間無等待,相互獨立并同時產(chǎn)生。通常把實現(xiàn)上述邏輯的電路稱為4位CLA部件由此,根據(jù)Si=Pi⊕Ci,可并行求出各位和。通常把實現(xiàn)Si=Pi⊕Ci的電路稱為求和部件CLA加法器由“進(jìn)位生成/傳遞部件”、“CLA部件”和“求和部件”構(gòu)成。

第十七頁,共一百一十四頁,編輯于2023年,星期四回顧:8位全先行進(jìn)位加法器進(jìn)位生成/傳遞部件A7A0B7B0P7P1P0G7G1G08位CLA部件C0求和部件P7P1P0C0C1C7C8S7S0S13ty2ty3ty和的總延遲:3+2+3=8ty;進(jìn)位C8的延遲:3+2=5ty第十八頁,共一百一十四頁,編輯于2023年,星期四回顧:局部先行進(jìn)位加法器問題:所有和數(shù)產(chǎn)生的延遲為多少?或稱單級先行進(jìn)位加法器5+2+2+5=14ty第十九頁,共一百一十四頁,編輯于2023年,星期四

多級先行進(jìn)位加法器單級(局部)先行進(jìn)位加法器的進(jìn)位生成方式:“組內(nèi)并行、組間串行”所以,單級先行進(jìn)位加法器雖然比行波加法器延遲時間短,但高位組進(jìn)位依賴低位組進(jìn)位,故仍有較長的時間延遲通過引入組進(jìn)位生成/傳遞函數(shù)實現(xiàn)“組內(nèi)并行、組間并行”進(jìn)位方式設(shè)n=4,則:C1=G0+P0C0C2=G1+P1C1=G1+P1G0+P1P0C0

C3=G2+P2C2=G2+P2G1+P2P1G0+P2P1P0C0

G3*=G3+P3C3=G3+P3G2+P3P2G1+P3P2P1G0

P3*=P3P2P1P0所以C4=G3*+P3*C0。把實現(xiàn)上述邏輯的電路稱為4位BCLA部件?;仡櫍憾嗉壪刃羞M(jìn)位加法器第二十頁,共一百一十四頁,編輯于2023年,星期四回顧:多級先行進(jìn)位加法器關(guān)鍵路徑長度為多少?最終進(jìn)位的延遲為多少?4位成組先行進(jìn)位部件(4位BCLA部件)4位CLA加法器4位CLA加法器4位CLA加法器4位CLA加法器16位兩級先行進(jìn)位加法器3+2+3=8ty3+2=5ty第二十一頁,共一百一十四頁,編輯于2023年,星期四A4-bitALU

1-bitALU 4-bit串行ALUABFACarryOutMuxCarryInResultA0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut3MUX是什么?(數(shù)字電路課學(xué)過)關(guān)鍵路徑延遲長,速度慢!第二十二頁,共一百一十四頁,編輯于2023年,星期四先行進(jìn)位ALU先行進(jìn)位ALU芯片(SN74181)四位ALU芯片,中規(guī)模集成電路。在先行進(jìn)位加法器基礎(chǔ)上附加部分線路,具有基本的算術(shù)運算和邏輯運算功能。SN74181的邏輯圖和功能表SN74182是4位BCLA(成組先行進(jìn)位)芯片。多芯片級聯(lián)構(gòu)成先行進(jìn)位ALU1個SN74181芯片直接構(gòu)成一個4位全先行進(jìn)位ALU4個SN74181芯片串行構(gòu)成一個16位單級先行進(jìn)位ALU4個SN74181芯片與1個SN74182芯片可構(gòu)成16位兩級先行進(jìn)位ALU16個SN74181芯片與5個SN74182芯片可構(gòu)成64位先行進(jìn)位ALUSKIPALU中的“加”運算電路相當(dāng)于n檔二進(jìn)制加法算盤。所有其他運算都以ALU中“加”運算為基礎(chǔ)!第二十三頁,共一百一十四頁,編輯于2023年,星期四SN74181的引腳輸入端:Ai和Bi分別為第1和2操作數(shù),Cn為低位進(jìn)位,M為功能選擇線,Si為操作選擇線,共4位,故最多有16種運算。輸出端:Fi為運算結(jié)果,Cn+4、P和G為進(jìn)位,“A=B”為相等標(biāo)志P輸入端輸出端第二十四頁,共一百一十四頁,編輯于2023年,星期四SN74181邏輯電路圖第二十五頁,共一百一十四頁,編輯于2023年,星期四SN74181正邏輯功能表BACK第二十六頁,共一百一十四頁,編輯于2023年,星期四SN74182芯片的引腳輸入端:Pi和Gi分別為第i組的組內(nèi)進(jìn)位傳遞函數(shù)和進(jìn)位生成函數(shù),Cn為低位進(jìn)位。輸出端:Cn+4、Cn+8、Cn+12為相應(yīng)組的組內(nèi)進(jìn)位,P*和G*分別為整個大組的組進(jìn)位傳遞函數(shù)和進(jìn)位生成函數(shù)。第二十七頁,共一百一十四頁,編輯于2023年,星期四SN74182芯片的邏輯電路圖BACK第二十八頁,共一百一十四頁,編輯于2023年,星期四SN74181和SN74182組成16位先行進(jìn)位ALU4位ALU4位ALU4位ALU4位ALU16位兩級先行進(jìn)位ALUBACK第二十九頁,共一百一十四頁,編輯于2023年,星期四第一講小結(jié)C語言程序中涉及的運算整數(shù)算術(shù)運算、浮點數(shù)算術(shù)運算按位、邏輯、移位、位擴(kuò)展和位截斷指令集中與運算相關(guān)的指令(以MIPS為參考)涉及到的定點數(shù)運算算術(shù)運算帶符號整數(shù):取負(fù)/符號擴(kuò)展/加/減/乘/除/算術(shù)移位無符號整數(shù):0擴(kuò)展/加/減/乘/除邏輯運算邏輯操作:與/或/非/…移位操作:邏輯左移/邏輯右移涉及到的浮點數(shù)運算:加、減、乘、除基本運算部件ALU的設(shè)計全加器、串行加法器、先行進(jìn)位加法器串行ALU、先行進(jìn)位ALU(單級/多級)定點運算包括:無符號數(shù)

按位邏輯運算邏輯移位運算位擴(kuò)展和截斷運算加/減/乘/除運算帶符號整數(shù)

算術(shù)移位運算擴(kuò)展運算和截斷運算

補(bǔ)碼加/減/乘/除運算浮點運算包括:

原碼加/減/乘/除運算

移碼加/減運算是一種模運算系統(tǒng)!第三十頁,共一百一十四頁,編輯于2023年,星期四第二講:定點數(shù)運算及運算部件主要內(nèi)容加/減運算及其運算部件補(bǔ)碼/原碼/移碼加減運算乘法運算及其運算部件原碼/補(bǔ)碼乘法運算快速乘法器除法運算及其運算部件原碼/補(bǔ)碼除法運算快速除法器定點運算器十進(jìn)制加減運算注:無符號數(shù)的按位邏輯運算可用邏輯門電路實現(xiàn);無符號數(shù)的邏輯移位運算可用專門的移位器或斜送結(jié)果等多種方式來實現(xiàn);帶符號數(shù)的算術(shù)移位運算、無符號數(shù)和帶符號整數(shù)的位擴(kuò)展運算和截斷運算也可用簡單電路很容易地實現(xiàn)。第三十一頁,共一百一十四頁,編輯于2023年,星期四補(bǔ)碼加/減運算及其部件補(bǔ)碼加減運算公式[A+B]補(bǔ)

=[A]補(bǔ)

+[B]補(bǔ)

(MOD2n)[A–B]補(bǔ)

=[A]補(bǔ)

+[–B]補(bǔ)

(MOD2n)補(bǔ)碼加減運算要點和運算部件加、減法運算統(tǒng)一采用加法來處理符號位(最高有效位MSB)和數(shù)值位一起參與運算直接用ALU實現(xiàn)兩個數(shù)的加運算(模運算系統(tǒng))

問題:模是多少?運算結(jié)果高位丟棄,保留低n位,相當(dāng)于取模2n

實現(xiàn)減法的主要工作在于:求[–B]補(bǔ)問題:如何求[–B]補(bǔ)?[–B]補(bǔ)=B+1ALU444AResultZeroCarryInCarryOut4B401MuxSelSubBoverflow補(bǔ)碼加減運算部件當(dāng)控制端Sub為1時,做減法當(dāng)控制端Sub為0時,做加法第三十二頁,共一百一十四頁,編輯于2023年,星期四補(bǔ)碼加/減運算與“溢出”判斷Ex1:-7-6=-7+(-6)=+3-3-5=-3+(-5)=-811++00011110011101111000100011Ex2:用8位補(bǔ)碼計算107+46=?結(jié)果錯誤:107+46=-103.10710=0110101124610=001011102

0

10011001進(jìn)位是真正的符號:+15311溢出現(xiàn)象:(1)最高位和次高位的進(jìn)位不同(2)和的符號位和加數(shù)的符號位不同X√問題:若采用變形補(bǔ)碼結(jié)果怎樣?采用變形補(bǔ)碼時“溢出”判斷條件:結(jié)果的兩個符號位不同變形補(bǔ)碼可保留運算中間結(jié)果。從乘除運算過程可看出這點!第三十三頁,共一百一十四頁,編輯于2023年,星期四OverflowDetectionLogic(溢出判斷邏輯)CarryintoMSB!=CarryoutofMSBForaN-bitALU:Overflow=CarryIn[N-1]XORCarryOut[N-1]OverflowXYXXORY00011101110A0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut30也可以用其他實現(xiàn)方式。第三十四頁,共一百一十四頁,編輯于2023年,星期四ZeroDetectionLogic(判0邏輯)ZeroA0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut3

除Result、Zero、Overflow外,許多機(jī)器還生成進(jìn)/借位標(biāo)志(CF)、符號標(biāo)志(NF/SF)等。標(biāo)志在運算電路中產(chǎn)生,被記錄到專門的寄存器中,以便在分支指令中被用來作為條件。存放標(biāo)志的寄存器通常稱為程序/狀態(tài)字寄存器或標(biāo)志寄存器。每個標(biāo)志對應(yīng)標(biāo)志寄存器中的一個標(biāo)志位。

問題:MIPS指令“bne$1,$2,25”的含義為“If($1!=$2)gotoPC+4+100elsegotoPC+4”,則執(zhí)行bne指令需判斷什么標(biāo)志?第三十五頁,共一百一十四頁,編輯于2023年,星期四原碼加/減運算用于浮點數(shù)尾數(shù)運算符號位和數(shù)值部分分開處理僅對數(shù)值部分進(jìn)行加減運算,符號位起判斷和控制作用規(guī)則如下:比較兩數(shù)符號,對加法實行“同號求和,異號求差”,對減法實行“異號求和,同號求差”。求和:數(shù)值位相加,若最高位產(chǎn)生進(jìn)位,則結(jié)果溢出。和的符號取被加數(shù)(被減數(shù))的符號。求差:被加數(shù)(被減數(shù))加上加數(shù)(減數(shù))的補(bǔ)碼。最高數(shù)值位產(chǎn)生進(jìn)位表明加法結(jié)果為正,所得數(shù)值位正確。最高數(shù)值位沒產(chǎn)生進(jìn)位表明加法結(jié)果為負(fù),得到的是數(shù)值位的補(bǔ)碼形式,需對結(jié)果求補(bǔ),還原為絕對值形式的數(shù)值位。差的符號位:a)情況下,符號位取被加數(shù)(被減數(shù))的符號;

b)情況下,符號位為被加數(shù)(被減數(shù))的符號取反。第三十六頁,共一百一十四頁,編輯于2023年,星期四原碼加/減運算例1:已知[X]原

=1.0011,[Y]原

=1.1010,要求計算[X+Y]原解:由原碼加減運算規(guī)則知:同號相加,則求和,和的符號同被加數(shù)符號。所以:和的數(shù)值位為:0011+1010=1101(ALU中無符號數(shù)相加)和的符號位為:1

[X+Y]原

=1.1101例2:已知[X]原

=1.0011,[Y]原

=1.1010,要求計算[X–Y]原

解:由原碼加減運算規(guī)則知:同號相減,則求差(補(bǔ)碼減法)差的數(shù)值位為:0011+(1010)補(bǔ)

=0011+0110=1001

最高數(shù)值位沒有產(chǎn)生進(jìn)位,表明加法結(jié)果為負(fù),需對1001求補(bǔ),還原為絕對值形式的數(shù)值位。即:(1001)補(bǔ)=0111差的符號位為[X]原的符號位取反,即:0

[X–Y]原

=0.0111思考題:如何設(shè)計一個基于ALU的原碼加/減法器?求和:直接加,有進(jìn)位則溢出,符號同被求差:加補(bǔ)碼,不會溢出,符號分情況第三十七頁,共一百一十四頁,編輯于2023年,星期四移碼加/減運算用于浮點數(shù)階碼運算符號位和數(shù)值部分可以一起處理運算公式(假定在一個n位ALU中進(jìn)行加法運算)[E1]移+[E2]移=2n-1+E1+2n-1+E2=2n+E1+E2=[E1+E2]補(bǔ)(mod2n)

[E1]移–[E2]移=[E1]移+[–[E2]移]補(bǔ)=2n-1+E1+2n–[E2]移

=2n-1+E1+2n–2n-1–E2=2n+E1–E2=[E1–E2]補(bǔ)(mod2n)

結(jié)論:移碼的和、差等于和、差的補(bǔ)碼!運算規(guī)則①加法:直接將[E1]移和[E2]移進(jìn)行模2n加,然后對結(jié)果的符號取反。②減法:先將減數(shù)[E2]移求補(bǔ)(各位取反,末位加1),然后再與被減數(shù)[E1]移進(jìn)行模2n相加,最后對結(jié)果的符號取反。③溢出判斷:進(jìn)行模2n相加時,如果兩個加數(shù)的符號相同,并且與和數(shù)的符號也相同,則發(fā)生溢出。補(bǔ)碼和移碼的關(guān)系:符號位相反、數(shù)值位相同!第三十八頁,共一百一十四頁,編輯于2023年,星期四移碼加/減運算例1:用四位移碼計算“–7+(–6)”和“–3+6”的值。解:[–7]移

=0001[–6]移=0010 [–3]移=0101 [6]移=1110[–7]移+[–6]移

=0001+0010=0011(兩個加數(shù)與結(jié)果符號都為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。第三十九頁,共一百一十四頁,編輯于2023年,星期四無符號數(shù)的乘法運算Paperandpencilexample: Multiplicand1000

Multiplierx1001

1000

0000

0000

1000Product(積)0.1001000假定:[X]原=x0.x1xn,[Y]原=y0.y1yn

,求[x×Y]原數(shù)值部分z1z2n=(0.x1xn)×(0.y1yn)(小數(shù)點位置約定,不區(qū)分小數(shù)還是整數(shù))X×y4×2-4X×y3×2-3X×y2×2-2X×y1×2-1

4X×Y=(X×yi×2-i)i=1整個運算過程中用到兩種操作:加法+左移因而,也可用ALU和移位器來實現(xiàn)乘法運算第四十頁,共一百一十四頁,編輯于2023年,星期四無符號數(shù)的乘法運算手工乘法的特點:每步計算:X×yi,若yi=0,則得0;若yi=1,則得X把①求得的各項結(jié)果X×yi逐次左移,可表示為X×yi×2-i

對②中結(jié)果求和,即

(X×yi×2-i),這就是兩個無符號數(shù)的乘積計算機(jī)內(nèi)部稍作以下改進(jìn):每次得X×yi后,與前面所得結(jié)果累加,得到Pi,稱之為部分積。因為不等到最后一次求和,減少了保存各次相乘結(jié)果X×yi的開銷。每次得X×yi后,不將它左移與前次部分積Pi相加,而將部分積Pi右移后與X×yi相加。因為加法運算始終對部分積中高n位進(jìn)行。故用n位加法器可實現(xiàn)二個n位數(shù)相乘。對乘數(shù)中為“1”的位執(zhí)行加法和右移,對為“0”的位只執(zhí)行右移,而不執(zhí)行加法運算。第四十一頁,共一百一十四頁,編輯于2023年,星期四無符號乘法運算的算法推導(dǎo)上述思想可寫成如下數(shù)學(xué)推導(dǎo)過程: 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上述推導(dǎo)過程具有明顯的遞歸性質(zhì),因此,無符號數(shù)乘法過程可歸結(jié)為循環(huán)計算下列算式的過程:設(shè)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迭代過程從乘數(shù)最低位yn和P0=0開始,經(jīng)n次“判斷–加法–右移”循環(huán),直到求出Pn為止。第四十二頁,共一百一十四頁,編輯于2023年,星期四寫使能控制邏輯右移32位ALU被乘數(shù)寄存器X乘積寄存器P3264位323232加計數(shù)器Cn時鐘C乘數(shù)寄存器Y32位乘法運算的硬件實現(xiàn)被乘數(shù)寄存器X:存放被乘數(shù)乘積寄存器P:開始置初始部分積P0=0;結(jié)束時,存放的是64位乘積的高32位乘數(shù)寄存器Y:開始時置乘數(shù);結(jié)束時,存放的是64位乘積的低32位進(jìn)位觸發(fā)器C:保存加法器的進(jìn)位信號循環(huán)次數(shù)計數(shù)器Cn:存放循環(huán)次數(shù)。初值32,每循環(huán)一次,Cn減1,Cn=0時結(jié)束ALU:乘法核心部件。在控制邏輯控制下,對P和X的內(nèi)容“加”,在“寫使能”控制下運算結(jié)果被送回P,進(jìn)位位在C中每次循環(huán)都要對進(jìn)位位C、乘積寄存器P和乘數(shù)寄存器實現(xiàn)同步“右移”

第四十三頁,共一百一十四頁,編輯于2023年,星期四Example:無符號整數(shù)乘法運算舉例說明:設(shè)A=1110B=1101應(yīng)用遞推公式:Pi=2-1(Abi+Pi-1)C乘積P乘數(shù)R000001101+1110011101101001110110000111011+1110100011011010001101+1110101101101010110110可用一個雙倍字長的乘積寄存器;也可用兩個單倍字長的寄存器。部分積初始為0。保留進(jìn)位位。右移時進(jìn)位、部分積和剩余乘數(shù)一起進(jìn)行邏輯右移。驗證:A=14,B=13,AxB=182第四十四頁,共一百一十四頁,編輯于2023年,星期四原碼乘法算法用于浮點數(shù)尾數(shù)乘運算符號與數(shù)值分開處理:積符異或得到,數(shù)值用無符號乘法運算例:設(shè)[x]原=0.1110,[y]原=1.1101,計算[X×Y]原

解:數(shù)值部分用無符號數(shù)乘法算法計算:1110×1101=10110110符號位:01=1,所以:[X×Y]原=1.10110110原碼一位乘法:每次只取乘數(shù)的一位判斷,需n次循環(huán),速度慢。原碼兩位乘法:每次取乘數(shù)兩位判斷,只需n/2次循環(huán),快一倍。原碼兩位乘法遞推公式:00:Pi+1=2-2Pi

01: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操作迭代公式0000010100111001011101110T+X0T+X0T+2X0T+2X0T–X1T–X1T1T

2-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觸發(fā)器用來記錄下次是否要執(zhí)行“+X”“–X”運算用“+[-X]補(bǔ)”實現(xiàn)!3X時,本次-X,下次+X!P.94表3.3第四十五頁,共一百一十四頁,編輯于2023年,星期四原碼兩位乘法舉例已知[X]原=0.111001,[Y]原=0.100111,用原碼兩位乘法計算[X×Y]原解:先用無符號數(shù)乘法計算111001×100111,原碼兩位乘法過程如下:若用模4補(bǔ)碼,則P和Y同時右移2位時,得到的P3是負(fù)數(shù),這顯然是錯誤的!需要再增加一位符號。采用補(bǔ)碼右移為模8補(bǔ)碼形式(三位符號位),為什么?第四十六頁,共一百一十四頁,編輯于2023年,星期四補(bǔ)碼乘法運算用于定點整數(shù)乘法運算符號與數(shù)值統(tǒng)一處理假定:[X]補(bǔ)=xn-1xn-2……

x1x0,

[

Y]補(bǔ)=yn-1yn-2……

y1y0,求:[X

x

Y]補(bǔ)=?基于以下補(bǔ)碼性質(zhì):令[Y]補(bǔ)=yn-1yn-2……

y1y0,則Y=-yn-1.2n-1+yn-2.2n-2+

……

y1.21+

y0.20令:y-1

=0,則:當(dāng)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推導(dǎo)如下:因為[XxY]補(bǔ)[X]補(bǔ)

x[Y]補(bǔ),故不能直接用無符號乘法計算。2-32.[XxY]補(bǔ)=

(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)第四十七頁,共一百一十四頁,編輯于2023年,星期四Booth’s算法實質(zhì)當(dāng)前位

右邊位 操作 Example 1 0 減被乘數(shù) 0001111000 1 1 加0(不操作) 0001111000 0 1 加被乘數(shù) 0001111000 0 0 加0(不操作) 0001111000最初提出這種想法是因為在Booth的機(jī)器上移位操作比加法更快!在“1串”中,第一個1時做減法,最后一個1做加法,其余情況只要移位。同前面算法一樣,將乘積寄存器右移一位。(這里是算術(shù)右移)0

1111

0beginningofrunendofrunmiddleofrun第四十八頁,共一百一十四頁,編輯于2023年,星期四布斯算法舉例已知[X]補(bǔ)

=1101,[Y]補(bǔ)

=0110,計算[X×Y]補(bǔ)

驗證:X

=-3,Y

=6,X×Y=-0010010B=-18,結(jié)果正確!

[-X]補(bǔ)

=0011第四十九頁,共一百一十四頁,編輯于2023年,星期四BoothsExample:2x–31a.P=P-m 1110+ 1110 111011010 shiftP(signext)1b. 0010 11110110

1 01->add +0010 2a. 00010110

1 shiftP2b. 0010 00001011

0 10->sub + 11103a. 0010 11101011

0 shift3b. 0010 11110101

1 11->nop4a 11110101

1 shift4b. 0010 11111010

1 done Operation Multiplicand Product next?0.initialvalue 0010 000011010 10->submythicalbit最后乘積第五十頁,共一百一十四頁,編輯于2023年,星期四補(bǔ)碼兩位乘法補(bǔ)碼兩位乘可用布斯算法推導(dǎo)如下:[Pi+1]補(bǔ)

=2-1([Pi]補(bǔ)

+(yi-1–yi)[X]補(bǔ))[Pi+2]補(bǔ)

=2-1([Pi+1]補(bǔ)

+(yi–yi+1)[X]補(bǔ))=2-1(2-1([Pi]補(bǔ)

+(yi-1–yi)[X]補(bǔ))+(yi–yi+1)[X]補(bǔ))=2-2([Pi]補(bǔ)+(yi-1+yi–2yi+1)[X]補(bǔ))開始置附加位y-1為0,乘積寄存器最高位前面添加一位附加符號位0。最終的乘積高位部分在乘積寄存器P中,低位部分在乘數(shù)寄存器Y中。因為字長總是8的倍數(shù),所以補(bǔ)碼的位數(shù)n應(yīng)該是偶數(shù),因此,總循環(huán)次數(shù)為n/2。yi+1yiyi-1操作迭代公式0000010100111001011101110+[X]補(bǔ)+[X]補(bǔ)+2[X]補(bǔ)+2[-X]

補(bǔ)+[-X]補(bǔ)+[-X]補(bǔ)02-2[Pi]補(bǔ)2-2{[Pi]補(bǔ)+[X]補(bǔ)}2-2{[Pi]補(bǔ)+[X]補(bǔ)}2-2{[Pi]補(bǔ)+2[X]補(bǔ)}2-2{[Pi]補(bǔ)+2[-X]補(bǔ)}2-2{[Pi]補(bǔ)+[-X]補(bǔ)}2-2{[Pi]補(bǔ)+[-X]補(bǔ)}2-2[Pi]補(bǔ)第五十一頁,共一百一十四頁,編輯于2023年,星期四補(bǔ)碼兩位乘法舉例已知[X]補(bǔ)

=1101,[Y]補(bǔ)

=0110,用補(bǔ)碼兩位乘法計算[X×Y]補(bǔ)。解:[–X]補(bǔ)=0011,用補(bǔ)碼二位乘法計算[X×Y]補(bǔ)的過程如下。

PnPYy-1

說明

0000001100

開始,設(shè)y-1=0,[P0]補(bǔ)

=0+00110y1y0y-1=100,+2[-X]補(bǔ)00110P和Y同時右移二位0000110011得[P2]補(bǔ)+11010y3y2y1=011,+2[X]補(bǔ)11011P和Y同時右移二位111101110得[P4]補(bǔ)因此[X×Y]補(bǔ)=11101110,與一位補(bǔ)碼乘法(布斯乘法)所得結(jié)果相同,但循環(huán)次數(shù)減少了一半。驗證:-3×6=-18(-10010B)第五十二頁,共一百一十四頁,編輯于2023年,星期四快速乘法器前面介紹的乘法部件的特點:通過一個ALU多次“加/減+右移”來實現(xiàn)一位乘法:約n次“加+右移”兩位乘法:約n/2次“加+右移”存在瓶頸:所需時間隨位數(shù)增多而加長設(shè)計快速乘法部件的必要性:大約1/3是乘法運算快速乘法器的實現(xiàn)流水線方式硬件疊加方式(如:陣列乘法器)陣列乘法器用一個實現(xiàn)特定功能的組合邏輯單元構(gòu)成一個陣列第五十三頁,共一百一十四頁,編輯于2023年,星期四流水線方式的快速乘法器為乘數(shù)的每位提供一個n位加法器每個加法器的兩個輸入端分別是:本次乘數(shù)對應(yīng)的位與被乘數(shù)相與的結(jié)果(即:0或被乘數(shù))上次部分積每個加法器的輸出分為兩部分:和的最低有效位(LSB)作為本位乘積進(jìn)位和高31位的和數(shù)組成一個32位數(shù)作為本次部分積1第五十四頁,共一百一十四頁,編輯于2023年,星期四陣列乘法器的實現(xiàn)手算乘法過程陣列乘法器全加器被乘數(shù)X部分積輸入AiBi進(jìn)位輸入進(jìn)位輸出

部分積輸出B00P7P6P5P4P3P2P1P0B10B20B30A3A2A1A00000速度僅取決于邏輯門和加法器的傳輸延遲

無符號陣列乘法器增加符號處理電路、乘前及乘后求補(bǔ)電路,即可實現(xiàn)帶符號數(shù)乘法器。第五十五頁,共一百一十四頁,編輯于2023年,星期四Divide:Paper&Pencil1001 Quotient(商)Divisor1000

1001010 Dividend(被除數(shù))

-1000

10

101

1010

-1000

10 Remainder(余數(shù))手算除法的基本要點被除數(shù)與除數(shù)相減,夠減則上商為1;不夠減則上商為0。每次得到的差為中間余數(shù),將除數(shù)右移后與上次的中間余數(shù)比較。用中間余數(shù)減除數(shù),夠減則上商為1;不夠減則上商為0。重復(fù)執(zhí)行第②步,直到求得的商的位數(shù)足夠為止。中間余數(shù)第五十六頁,共一百一十四頁,編輯于2023年,星期四定點除法運算除前預(yù)處理①若被除數(shù)=0且除數(shù)≠0,或定點整數(shù)除法|被除數(shù)|<|除數(shù)|,則商為0,不再繼續(xù)②若被除數(shù)≠0、除數(shù)=0,則發(fā)生“除數(shù)為0”異常③若被除數(shù)和除數(shù)都為0,則有些機(jī)器產(chǎn)生一個不發(fā)信號的NaN,即“quietNaN”

當(dāng)被除數(shù)和除數(shù)都≠

0,且商≠

0時,才進(jìn)一步進(jìn)行除法運算。計算機(jī)內(nèi)部無符號數(shù)除法運算與手算一樣,通過被除數(shù)(中間余數(shù))減除數(shù)來得到每一位商

夠減上商1;不夠減上商0基本操作為減法(用加法實現(xiàn))和移位,故可與乘法合用同一套硬件第五十七頁,共一百一十四頁,編輯于2023年,星期四完全模擬手工的無符號數(shù)除法硬件實現(xiàn)64位除數(shù)R,后n位為064位余數(shù)R,初始為被除數(shù)32位商R,初始值為0RemainderQuotientDivisor64-bitALUShiftRightShiftLeftWriteControl32bits64bits64bits兩個n位數(shù)相除的情況:(1)定點正整數(shù)(即無符號數(shù))相除:在被除數(shù)的高位添n個0(2)定點正小數(shù)(即原碼小數(shù))相除:在被除數(shù)的低位添加n個0

這樣,就將所有情況都統(tǒng)一為:一個2n位數(shù)除以一個n位數(shù)以下是64位數(shù)除以32位數(shù)的除法器邏輯結(jié)構(gòu)第五十八頁,共一百一十四頁,編輯于2023年,星期四1.SubtracttheDivisorregisterfromthe

Remainderregister,andplacetheresultinthe

Remainderregister.TestRemainderRemainder<0Remainder>=02a.ShifttheQuotientregistertotheleft

settingthenewrightmostbitto1.2b.RestoretheoriginalvaluebyaddingtheDivisorregtotheRemainderregandplacethesumintheRemainderreg.AlsoshifttheQuotientregistertotheleft,settingthenewLSBto03.ShifttheDivisorregisterright1bit.33rd

repetition?No:<33

repetitionsDoneYes:33

repetitionsStart手工DivideAlgorithmn位除法需n+1步舉例:7/2=3余1要點:1.余數(shù)-除數(shù)=新余數(shù)2(a)新余數(shù)<0,商左移上0并恢復(fù)余數(shù)2(b)新余數(shù)>=0,商左移上13.除數(shù)右移第五十九頁,共一百一十四頁,編輯于2023年,星期四DivideAlgorithm--example

Q:0000 D:00100000 R:00000111–D=111000001:R=R–DQ:0000D:00100000 R:111001112b:+D,slQ,0Q:0000

D:00100000 R:000001113:ShrD Q:0000 D:00010000 R:00000111–D=111100001:R=R–DQ:0000 D:00010000 R:111101112b:+D,slQ,0Q:0000 D:00010000 R:000001113:ShrD Q:0000 D:00001000 R:00000111–D=111110001:R=R–DQ:0000 D:00001000 R:111111112b:+D,slQ,0Q:0000 D:00001000 R:000001113:ShrD Q:0000 D:00000100 R:00000111–D=111111001:R=R–DQ:0000 D:00000100 R:000000112a:slQ,1Q:0001 D:00000100 R:000000113:ShrD Q:0001 D:00000010 R:00000011–D=111111101:R=R–DQ:0001 D:00000010 R:000000012a:slQ,1Q:0011 D:00000010 R:000000013:ShrD Q:0011D:00000001 R:00000001驗證:7/2=3余1問題:Q中第一個“0”說明什么?說明沒有“溢出”,它不是真正的商!第六十頁,共一百一十四頁,編輯于2023年,星期四完全模擬手工的無符號數(shù)除法硬件實現(xiàn)問題:第一次試商為1,說明什么?若是無符號整數(shù)運算(2n位除以n位),則說明將會得到多于n+1位的商,因而結(jié)果“溢出”。若是兩個n位數(shù)相除,則肯定不會溢出,為什么?若是浮點數(shù)中尾數(shù)原碼小數(shù)運算,則說明尾數(shù)部分有“溢出”,可通過浮點數(shù)的“右規(guī)”消除“溢出”。所以,在浮點數(shù)運算器中,第一次得到的商“1”要保留。最大商為:00001111/0001=1111溢出!例:0.11110000/0.1000=+1.1110例:11111111/0001=11111111第六十一頁,共一百一十四頁,編輯于2023年,星期四對手算除法算法的觀察1/2bitsindivisor(除數(shù)寄存器)always0能否考慮只用32位除數(shù)寄存器和32位ALU?可用余數(shù)左移代替除數(shù)右移可使商通過和余數(shù)一起左移來取消商寄存器開始時先使余數(shù)左移一位

(問題:為什么可這樣做?)兩個寄存器的結(jié)合以及循環(huán)內(nèi)次序的調(diào)換使得余數(shù)被多左移了一次。所以最后一步余數(shù)寄存器的左半邊的余數(shù)必須向右移一位。RemainderQuotientDivisor64-bitALUShiftRightShiftLeftWriteControl32bits64bits64bits因為結(jié)果肯定不“溢出”,故第1次商肯定為0,不用先做減法試商,而將第一步換成先左移,可減少一次迭代第六十二頁,共一百一十四頁,編輯于2023年,星期四無符號數(shù)除法算法的硬件實現(xiàn)除數(shù)寄存器Y:存放除數(shù)。余數(shù)寄存器R:初始時高位部分為高32位被除數(shù);結(jié)束時是余數(shù)。余數(shù)/商寄存器Q:初始時為低32位被除數(shù);結(jié)束時是32位商。循環(huán)次數(shù)計數(shù)器Cn:存放循環(huán)次數(shù)。初值是32,每循環(huán)一次,Cn減1,當(dāng)Cn=0時,除法運算結(jié)束。ALU:除法核心部件。在控制邏輯控制下,對于寄存器R和Y的內(nèi)容進(jìn)行“加/減”運算,在“寫使能”控制下運算結(jié)果被送回寄存器R。

R和Q同步“左移”,Q空出位上“商”,商的各位逐次左移到Q中。由控制邏輯根據(jù)ALU結(jié)果的符號決定商為0還是1。第六十三頁,共一百一十四頁,編輯于2023年,星期四DivideAlgorithmexample

D:0010 R:00000111ShlR D:0010 R:00001110R=R–D D:0010 R:11101110+D,slR,0 D:0010 R:00011100R=R–D D:0010R:11111100+D,slR,0 D:0010 R:00111000R=R–D D:0010 R:00011000slR,1D:0010 R:00110001R=R–DD:0010R:00010001slR,1 D:0010 R:00100011ShrR(rh) D:0010 R:00010011驗證:7/2=3余1從例子可看出:每次上商為0時,需做加法以“恢復(fù)余數(shù)”。所以,稱為“恢復(fù)余數(shù)法也可在下一步運算時把當(dāng)前多減的除數(shù)補(bǔ)回來。這種方法稱為“不恢復(fù)余數(shù)法”,又稱“加減交替法”。–D=1110

最后余數(shù)需向右移一位。和書中的例子稍有不同,書中沒有省略判斷溢出的過程。第六十四頁,共一百一十四頁,編輯于2023年,星期四不恢復(fù)余數(shù)除法(加減交替法)根據(jù)恢復(fù)余數(shù)法(設(shè)B為除數(shù),Ri為第i次中間余數(shù)),有:若Ri<0,則商上“0”,做加法恢復(fù)余數(shù),即:Ri+1=2(Ri+2n|B|)-2n|B|=2Ri+2n|B|(“負(fù),0,加”)若Ri>0,則商上“1”,不需恢復(fù)余數(shù),即:Ri+1=2Ri-2n|B|(“正,1,減”)省去了恢復(fù)余數(shù)的過程注意:最后一次上商為“0”的話,需要“糾余”處理,即把試商時被減掉的除數(shù)加回去,恢復(fù)真正的余數(shù)。不恢復(fù)余數(shù)法也稱為加減交替法恢復(fù)余數(shù)法可進(jìn)一步簡化為“加減交替法”第六十五頁,共一百一十四頁,編輯于2023年,星期四帶符號數(shù)除法原碼除法商符和商值分開處理商的數(shù)值部分由無符號數(shù)除法求得商符由被除數(shù)和除數(shù)的符號確定:同號為0,異號為1余數(shù)的符號同被除數(shù)的符號補(bǔ)碼除法方法1:同原碼除法一樣,先轉(zhuǎn)換為正數(shù),先用無符號數(shù)除法,然后修正商和余數(shù)。方法2:直接用補(bǔ)碼除法,符號和數(shù)值一起進(jìn)行運算,商符直接在運算中產(chǎn)生。兩個n位補(bǔ)碼整數(shù)除法運算,被除數(shù)需要進(jìn)行符號擴(kuò)展。若被除數(shù)為2n位,除數(shù)為n位,則被除數(shù)無需擴(kuò)展。第六十六頁,共一百一十四頁,編輯于2023年,星期四原碼除法舉例已知[X]原

=0.1011[Y]原

=1.1101用恢復(fù)余數(shù)法計算[X/Y]原解:商的符號位:01=1減法操作用補(bǔ)碼加法實現(xiàn),是否夠減通過中間余數(shù)的符號來判斷,所以中間余數(shù)要加一位符號位。

[|X|]補(bǔ)

=0.1011[|Y|]補(bǔ)

=0.1101[–|Y|]補(bǔ)

=1.0011小數(shù)在低位擴(kuò)展0思考:若實現(xiàn)無符號數(shù)相除,即1011除以1101,則有何不同?結(jié)果是什么?確認(rèn)不溢出時可省略第六十七頁,共一百一十四頁,編輯于2023年,星期四原碼除法舉例已知[X]原

=0.1011[Y]原

=1.1101用加減交替法計算[X/Y]原解:[|X|]補(bǔ)

=0.1011[|Y|]補(bǔ)

=0.1101[–|Y|]補(bǔ)

=1.0011

“加減交替法”的要點:

正、1、減負(fù)、0、加得到的結(jié)果與恢復(fù)余數(shù)法一樣!問題:用被除數(shù)(中間余數(shù))減除數(shù)試商時,怎樣確定是否“夠減”?中間余數(shù)的符號!補(bǔ)碼除法能否這樣來判斷呢?第六十八頁,共一百一十四頁,編輯于2023年,星期四實現(xiàn)補(bǔ)碼除法的基本思想(自學(xué))補(bǔ)碼除法判斷是否“夠減”的規(guī)則(1)當(dāng)被除數(shù)(或中間余數(shù))與除數(shù)同號時,做減法,若新余數(shù)的符號與除數(shù)符號一致表示夠減,否則為不夠減;(2)當(dāng)被除數(shù)(或中間余數(shù))與除數(shù)異號時,做加法,若得到的新余數(shù)的符號與除數(shù)符號一致表示不夠減,否則為夠減。中間余數(shù)R除數(shù)Y新中間余數(shù):R–Y(正商)新中間余數(shù):R+Y(負(fù)商)010100110101夠減不夠減不夠減夠減夠減不夠減不夠減夠減上述判斷規(guī)則用表表示為:SKIP第六十九頁,共一百一十四頁,編輯于2023年,星期四實現(xiàn)補(bǔ)碼除法的基本思想(自學(xué))從上表可得到補(bǔ)碼除法的基本算法思想:(1)運算規(guī)則:

當(dāng)被除數(shù)(或中間余數(shù))與除數(shù)同號時,做減法;異號時,做加法。(2)上商規(guī)則:

若余數(shù)符號不變,則夠減,商1;否則不夠減,商0。

商為正時:若新余數(shù)與除數(shù)符號一致,則夠減,商1;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論