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

下載本文檔

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

文檔簡介

第一講

不同層次程序員看到的運算及ALU

第二講定點數(shù)運算及其運算部件

第三講浮點數(shù)運算及其運算部件Ch3:ArithmeticandLogicOperateandALU

運算方法和運算部件第一講:不同層次程序員看到的運算及ALU主要內(nèi)容高級語言程序中涉及的運算(以C語言為例)整數(shù)算術(shù)運算、浮點數(shù)算術(shù)運算按位、邏輯、移位、位擴展和位截斷指令集中涉及到的運算(以MIPS為例)涉及到的定點數(shù)運算算術(shù)運算帶符號整數(shù)運算:取負/符號擴展/加/減/乘/除/算術(shù)移位無符號整數(shù)運算:0擴展/加/減/乘/除邏輯運算邏輯操作:與/或/非/…移位操作:邏輯左移/邏輯右移涉及到的浮點數(shù)運算:加、減、乘、除基本運算部件ALU的設(shè)計為什么房子里要有廚房、衛(wèi)生間、臥室?CPU中需提供哪些運算部件?Why?人的需要!

程序的需要!我們從程序?qū)\算的需求開始分析。浮點數(shù)有沒有移位操作和擴展操作?為什么?C語言程序中涉及的運算算術(shù)運算(最基本的運算)無符號數(shù)、帶符號整數(shù)、浮點數(shù)的+、-、*、/運算等按位運算用途對位串實現(xiàn)“掩碼”(mask)操作或相應(yīng)的其他處理(主要用于對多媒體數(shù)據(jù)或狀態(tài)/控制信息進行處理)操作按位或:“|”按位與:“&”按位取反:“~”按位異或:“^”問題:如何從16位采樣數(shù)據(jù)y中提取高位字節(jié),并使低字節(jié)為0?可用“&”實現(xiàn)“掩碼”操作:y&0xFF00例如,當y=0x2C0B時,得到結(jié)果為:0x2C00C語言程序中涉及的運算邏輯運算用途用于關(guān)系表達式的運算例如,if(x>yandi<100)then……中的“and”運算操作“‖”表示“OR”運算“&&”表示“AND”運算

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

溢出判斷:若移出的位不等于新的符號位,則溢出。右移:低位移出,高位補符,可能發(fā)生有效數(shù)據(jù)丟失。如何從16位采樣數(shù)據(jù)y中提取高位字節(jié)?某字長為8的機器中,x、y和z都是8位帶符號整數(shù)(char型),已知x=-81,則y=x/2=?z=2x=?(y>>8)送8位寄存器[x]補=10101111y=-40?z=-162?x思考題:因為當帶符號整數(shù)不能整除2k時右移的結(jié)果不對,編譯器該如何處理?C語言程序中涉及的運算位擴展和位截斷運算用途類型轉(zhuǎn)換時可能需要數(shù)據(jù)擴展或截斷操作沒有專門操作運算符,根據(jù)類型轉(zhuǎn)換前后數(shù)據(jù)長短確定是擴展還是截斷擴展:短轉(zhuǎn)長無符號數(shù):0擴展,前面補0帶符號整數(shù):符號擴展,前面補符截斷:長轉(zhuǎn)短

強行將高位丟棄,故可能發(fā)生“溢出”例1(擴展操作):在大端機上輸出si,usi,i,ui的十進制和十六進制值是什么?shortsi=-32768;unsignedshortusi=si;inti=si;unsingned

ui=usi;si=-327688000usi=327688000i=-32768FFFF8000ui=3276800008000例2(截斷操作):i和j是否相等?inti=32768;shortsi=(short)i;intj=si;不相等!i=3276800008000si=-327688000j=-32768FFFF8000原因:對i截斷時發(fā)生了“溢出”,即:32768截斷為16位數(shù)時,因其超出16位能表示的最大值,故無法截斷為正確的16位數(shù)!如何實現(xiàn)高級語言源程序中的運算?總結(jié):C語言程序中的基本數(shù)據(jù)類型及其基本運算類型基本數(shù)據(jù)類型無符號數(shù)、帶符號整數(shù)、浮點數(shù)、位串、字符(串)基本運算類型算術(shù)、按位、邏輯、移位、擴展和截斷、匹配計算機如何實現(xiàn)高級語言程序中的運算?將各類表達式編譯(轉(zhuǎn)換)為指令序列計算機直接執(zhí)行指令來完成運算例:C語言賦值語句“f=(g+h)–(i+j);”中變量i、j、f、g、h由編譯器分別分配給MIPS寄存器$t0~$t4。寄存器$t0~$t7的編號對應(yīng)8~15,上述程序段對應(yīng)的MIPS機器代碼和匯編表示(#后為注釋)如下:00000001011

011000110100000100000add$t5,$t3,$t4#g+h00000001000010010111000000100000add$t6,$t0,$t1#i+j00000001101011100101000000100010sub$t2,$t5,$t6#f=(g+h)–(i+j)下面以MIPS為例,看指令中會提供哪些運算?能否完全支持高級語言需求?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ù)涉及到的操作:(帶符號整數(shù)/無符號數(shù))加/減/乘/除問題:IA-32指令如何區(qū)分無符號數(shù)加(減)法和帶符號數(shù)加(減)法?例如,若(AH)=A0H,(BH)=7EH,則ADDAH,BH的值為多少?

無符:160+126=30(循環(huán)隊列指針時正確);帶符:-96+126=30(正確)硬件不區(qū)分,由軟件處理。問題:為什么加減運算可以不區(qū)分無符和帶符數(shù),而乘除運算一定要區(qū)分?MIPS邏輯運算指令涉及到的操作數(shù):32/16位邏輯數(shù)(位串)涉及到的操作:按位與/按位或/按位或非/左移/右移MIPS定點比較和分支指令涉及到的操作數(shù):32/16位無符號數(shù),32/16位帶符號整數(shù)涉及到的操作:大小比較和相等比較(帶符號/無符號)通過減法運算實現(xiàn)“比較”操作!MIPS定點數(shù)據(jù)傳送指令涉及到的操作數(shù):32/16位帶符號整數(shù)(偏移量可以是負數(shù))涉及到的操作:加/減/符號擴展/0擴展問題:IA-32指令如何區(qū)分裝入/存儲?如何區(qū)分傳送不同寬度數(shù)據(jù)?

體會不同ISA的不同做法,以比較各自的優(yōu)缺點!

如果你來設(shè)計一臺機器時,你也可以有你的做法!MIPS中的浮點算術(shù)運算指令涉及到的浮點操作數(shù):32位單精度/64位雙精度浮點數(shù)涉及到的浮點操作:加/減/乘/除

MIPS提供專門的浮點數(shù)寄存器:32個32位單精度浮點數(shù)寄存器:$f0,$f1,……,$f31連續(xù)兩個寄存器(一偶一奇)存放一個雙精度浮點數(shù)MIPS中的浮點數(shù)傳送指令涉及到的浮點操作數(shù):32位單精度浮點數(shù)涉及到的浮點操作:傳送操作(與定點傳送一樣)還涉及到定點操作:加/減(用于地址運算)例:將兩個浮點數(shù)從內(nèi)存取出相加后再存到內(nèi)存的指令序列為:

lwc1$f1,x($s1)lwc1$f2,y($s2)

add.s$f4,$f1,$f2swc1$f4,z(s3)MIPS中的浮點數(shù)比較和分支指令涉及到的浮點操作數(shù):32位單精度浮點數(shù)/64位雙精度浮點數(shù)涉及到的浮點操作:比較操作(用

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

有一個專門的浮點標志cond,無需在指令中明顯給出condMIPS指令考察的結(jié)果涉及到的操作數(shù):無符號整數(shù)、帶符號整數(shù)邏輯數(shù)(位串)浮點數(shù)涉及到的運算定點數(shù)運算帶符號整數(shù)運算:取負/符號擴展/加/減/乘/除/算術(shù)移位無符號數(shù)運算:0擴展/加/減/乘/除邏輯運算邏輯操作:與/或/非/…移位操作:邏輯左移/邏輯右移浮點數(shù)運算:加、減、乘、除實現(xiàn)MIPS定點和浮點運算指令的思路:先實現(xiàn)一個能進行基本算術(shù)運算(加/減)和基本邏輯運算,并生成基本條件碼(ZF/OF/CF/NF)的ALU,再由ALU和移位器實現(xiàn)乘、除、浮點運算器。ALU是運算部件的核心!以下介紹ALU的實現(xiàn)。完全能夠支持高級語言對運算的需求?。栴}:計算機是如何實現(xiàn)各種運算功能的?這就是本章后面將要介紹的內(nèi)容!ALU的功能說明ALUControlLines(ALUop)Function000 And001 Or010 Add110 Subtract111 Set-on-less-thanALUNNNABResultOverflowZero3ALUopCarryOutALU可進行基本的加/減算術(shù)運算和邏輯運算。其核心部件是加法器。有關(guān)串行加法器和并行加法器的原理在數(shù)字邏輯電路課已講過,在此僅簡單回顧。回顧:串行進位加法器假定與/或門延遲為1ty,異或門3ty,則“和”與“進位”的延遲為多少?FA全加器符號:串行加法器的缺點:進位按串行方式傳遞,速度慢!問題:n位串行加法器從C0到Cn的延遲時間為多少?最后一位和數(shù)的延遲時間為多少?2n+1級門延遲!2n級門延遲!Sum延遲為6ty;Carryout延遲為2ty。FAFAFAn位串行(行波)加法器:C0Cn回顧:并行進位加法器(CLA加法器)為什么用先行進位方式?串行進位加法器采用串行逐級傳遞進位,電路延遲與位數(shù)成正比關(guān)系。

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

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

回顧:8位全先行進位加法器進位生成/傳遞部件A7A0B7B0P7P1P0G7G1G08位CLA部件C0求和部件P7P1P0C0C1C7C8S7S0S11ty(或3ty)2ty3ty和的總延遲多少?進位C8的延遲多少?和的總延遲:1+2+3=6ty;進位C8的延遲:1+2=3tyPi=Ai+Bi------1ty

Pi=Ai⊕Bi----3ty回顧:局部(單級)先行進位加法器問題:所有和數(shù)產(chǎn)生的延遲為多少?或稱單級先行進位加法器3+2+2+5=12ty

多級先行進位加法器單級(局部)先行進位加法器的進位生成方式:“組內(nèi)并行、組間串行”所以,單級先行進位加法器雖然比行波加法器延遲時間短,但高位組進位依賴低位組進位,故仍有較長的時間延遲通過引入組進位生成/傳遞函數(shù)實現(xiàn)“組內(nèi)并行、組間并行”進位方式設(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位加法器回顧:多級先行進位加法器關(guān)鍵路徑長度為多少?最終進位的延遲為多少?4位成組先行進位部件(4位BCLA部件)4位CLA加法器4位CLA加法器4位CLA加法器4位CLA加法器16位兩級先行進位加法器3+2+3=8ty3+2=5tyA4-bitALU

1-bitALU 4-bit串行ALUABFACarryOutMuxCarryInResultA0B01-bitALUResult0CarryIn0CarryOut0A1B11-bitALUResult1CarryIn1CarryOut1A2B21-bitALUResult2CarryIn2CarryOut2A3B31-bitALUResult3CarryIn3CarryOut3MUX是什么?(數(shù)字電路課學(xué)過)關(guān)鍵路徑延遲長,速度慢!2ALUop先行進位ALU先行進位ALU

芯片(SN74181)四位ALU芯片,中規(guī)模集成電路。在先行進位加法器基礎(chǔ)上附加部分線路,具有基本的算術(shù)運算和邏輯運算功能。SN74181的邏輯圖和功能表SN74182是4位BCLA(成組先行進位)芯片。多芯片級聯(lián)構(gòu)成先行進位ALU(用于專用場合,如教學(xué)機等)1個SN74181芯片直接構(gòu)成一個4位全先行進位ALU4個SN74181芯片串行構(gòu)成一個16位單級先行進位ALU4個SN74181芯片與1個SN74182芯片可構(gòu)成16位兩級先行進位ALU16個SN74181芯片與5個SN74182芯片可構(gòu)成64位先行進位ALU現(xiàn)代主流計算機中ALU是否通過芯片級聯(lián)而成?SKIPALU的“加”運算電路相當于n檔二進制加法算盤。所有其他運算都以ALU中“加”運算為基礎(chǔ)!無需芯片級聯(lián)!一個CPU芯片中有多個處理器核,一個核中有多個ALU!回顧:SN74181的引腳輸入端:Ai和Bi分別為第1和2操作數(shù),Cn為低位進位,M為功能選擇線,Si為操作選擇線,共4位,故最多有16種運算。輸出端:Fi為運算結(jié)果,Cn+4、P和G為進位,“A=B”為相等標志P輸入端輸出端回顧:SN74181正邏輯功能表BACK回顧:SN74182芯片的引腳輸入端:Pi和Gi分別為第i組的組內(nèi)進位傳遞函數(shù)和進位生成函數(shù),Cn為低位進位。輸出端:Cn+4、Cn+8、Cn+12為相應(yīng)組的組內(nèi)進位,P*和G*分別為整個大組的組進位傳遞函數(shù)和進位生成函數(shù)。SN74182芯片的邏輯電路圖BACKSN74181和SN74182組成16位先行進位ALU4位ALU4位ALU4位ALU4位ALU16位兩級先行進位ALUBACK例:實現(xiàn)某11條MIPS指令的ALU在第6章CPU設(shè)計時詳細介紹!第一講小結(jié)高級語言程序中涉及的運算(C語言為例)整數(shù)算術(shù)運算、浮點數(shù)算術(shù)運算按位、邏輯、移位、位擴展和位截斷指令集中與運算相關(guān)的指令(MIPS為例)涉及到的定點數(shù)運算算術(shù)運算帶符號整數(shù):取負、符號擴展、加、減、乘、除、算術(shù)移位無符號數(shù):0擴展、加、減、乘、除邏輯運算邏輯操作:與、或、非…移位操作:邏輯左移、邏輯右移涉及到的浮點數(shù)運算:加、減、乘、除基本運算部件ALU的設(shè)計全加器、串行加法器、先行進位加法器串行ALU、先行進位ALU(單級/多級)MSI芯片級聯(lián)、直接做在CPU芯片內(nèi)定點運算:無符號數(shù)

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

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

補碼加/減/乘/除運算浮點運算:

原碼加/減/乘/除運算

移碼加/減運算是一種模運算系統(tǒng)!下一講開始介紹上述這些運算算法及其運算電路需求轉(zhuǎn)換需求轉(zhuǎn)換CPU中需提供哪些運算?Why?第二講:定點數(shù)運算及運算部件主要內(nèi)容加/減運算及其運算部件補碼/原碼/移碼加減運算乘法運算及其運算部件原碼/補碼乘法運算快速乘法器除法運算及其運算部件原碼/補碼除法運算快速除法器定點運算器十進制加減運算注:無符號數(shù)的按位邏輯運算可用邏輯門電路實現(xiàn);無符號數(shù)的邏輯移位運算可用專門的移位器或斜送結(jié)果等多種方式來實現(xiàn);帶符號數(shù)的算術(shù)移位運算、無符號數(shù)和帶符號整數(shù)的位擴展運算和截斷運算也可用簡單電路很容易地實現(xiàn)。為什么無需移碼乘、除運算?補碼加/減運算及其部件補碼加減運算公式[A+B]補

=[A]補

+[B]補

(MOD2n)[A–B]補

=[A]補

+[–B]補

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

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

實現(xiàn)減法的主要工作在于:求[–B]補問題:如何求[–B]補?[–B]補=B+1SumAdder444AZeroCinCout4B401MuxSelSubBoverflow整數(shù)加/減運算部件當控制端Sub為1時,做減法當控制端Sub為0時,做加法問題:Adder中執(zhí)行的是什么運算?相當于無符號數(shù)加!B'條件標志位(條件碼CC)

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

如,IA-32中的EFLAGS寄存器SumAdder444AZeroCinCout4B401MuxSelSubBoverflow整數(shù)加/減運算部件SFCF問題:OF=?ZF=?SF=?CF=?OF:若A與B’同號但與Sum不同號,則1;否則0。SF:sum符號ZF:如Sum為0,則1,否則0。CF:Cout

subB'這就是計算機中的算盤。所有其他運算都基于整數(shù)加/減運算器來實現(xiàn)。標志信息是干什么的?Ex1:-7-6=-7+(-6)=+3-3-5=-3+(-5)=-8

9-6=3

13-5=811++00011110011101111000100011Ex2:用8位機器數(shù)計算107+46=?結(jié)果錯誤:107+46=-103.進位是真正的符號:+15311溢出現(xiàn)象:(1)最高位和次高位的進位不同(2)和的符號位和加數(shù)的符號位不同X√10710=0110101124610=001011102

0

10011001溢出標志OF=1、零標志ZF=0、符號標志SF=1、進位標志CF=0做減法以比較大小,規(guī)則:Unsigned:CF=0時,大于Signed:OFNF=0時,大于OF=0、ZF=0、SF=1、借位CF=0OF=1ZF=0SF=0借位CF=0√√例子:程序的機器級表示與執(zhí)行例:

floatsum(inta[],unsigned

len){

inti,sum=0;for(i=0;i<=len–1;i++) sum+=a[i];returnsum;}當參數(shù)len為0時,返回值應(yīng)該是0,但是在機器上執(zhí)行時,卻發(fā)生了存儲器訪問異常。

Why?i在EAX中,len在EDX中EAX:0000……0000EDX:0000……0000subl

指令的執(zhí)行結(jié)果是什么?cmpl

指令的執(zhí)行結(jié)果是什么?subl$1,%edx指令的執(zhí)行結(jié)果“subl$1,%edx”執(zhí)行時:A=00000000H,B為00000001H,Sub=1,因此Result是32個1。Result加法器nnnAZFCiConBn01多路選擇器SubBOF加/減運算部件CF=CoSubSF當Sub為1時,做減法當Sub為0時,做加法已知EDX中為len=0000……0000Hcpml%edx,%eax指令的執(zhí)行結(jié)果“cmpl%edx,%eax”執(zhí)行時:A=00000000H,B為FFFFFFFFH,Sub=1,因此Result是0…01,CF=1,ZF=0,OF=0,SF=0

Result加法器nnnAZFCiConBn01多路選擇器SubBOF加/減運算部件CF=CoSubSF當Sub為1時,做減法當Sub為0時,做加法已知EDX中為len-1=FFFF……FFFFH

EAX中為i=0000……0000Hjb.L3指令的執(zhí)行結(jié)果指令轉(zhuǎn)移條件說明JA/JNBElabelCF=0ANDZF=0無符號數(shù)A>BJAE/JNBlabelCF=0ORZF=1無符號數(shù)A≥BJB/JNAElabelCF=1ANDZF=0無符號數(shù)A<BJBE/JNAlabelCF=1ORZF=1無符號數(shù)A≤BJG/JNLElabelSF=OFANDZF=0有符號數(shù)A>BJGE/JNLlabelSF=OFORZF=1有符號數(shù)A≥BJL/JNGElabelSF≠OFANDZF=0有符號數(shù)A<BJLE/JNGlabelSF≠OFORZF=1有符號數(shù)A≤B“cmpl%edx,%eax”執(zhí)行結(jié)果是CF=1,ZF=0,OF=0,SF=0,說明滿足條件,應(yīng)轉(zhuǎn)移到.L3執(zhí)行!顯然,對于每個i都滿足條件,因為任何無符號數(shù)都比32個1小,因此循環(huán)體被不斷執(zhí)行,最終導(dǎo)致數(shù)組訪問越界而發(fā)生存儲器訪問異常。例子:程序的機器級表示與執(zhí)行正確的做法是將參數(shù)len聲明為int型。

Why?len在EAX中,i在M[EBP-4]中i:0000……0000len:0000……0000subl

指令的執(zhí)行結(jié)果是什么?cmpl

指令的執(zhí)行結(jié)果是什么?例:

floatsum(inta[],int

len){

inti,sum=0;for(i=0;i<=len–1;i++) sum+=a[i];returnsum;}subl$1,%eax指令的執(zhí)行結(jié)果“subl$1,%eax”執(zhí)行時:A=00000000H,B為00000001H,Sub=1,因此Result是32個1。Result加法器nnnAZFCiConBn01多路選擇器SubBOF加/減運算部件CF=CoSubSF當Sub為1時,做減法當Sub為0時,做加法已知EAX中為len=0000……0000Hcpml-4(%ebp),%eax指令的執(zhí)行結(jié)果“cmpl-4(%ebp),%eax”執(zhí)行時A=FFFFFFFFH,B為00000000H,Sub=1,因此Result是1…11,CF=0,ZF=0,OF=0,SF=1Result加法器nnnAZFCiConBn01多路選擇器SubBOF加/減運算部件CF=CoSubSF當Sub為1時,做減法當Sub為0時,做加法已知M[EBP-4]為i=0000……0000H

EAX中為len-1=FFFF……FFFFHjg.L3指令的執(zhí)行結(jié)果指令轉(zhuǎn)移條件說明JA/JNBElabelCF=0ANDZF=0無符號數(shù)A>BJAE/JNBlabelCF=0ORZF=1無符號數(shù)A≥BJB/JNAElabelCF=1ANDZF=0無符號數(shù)A<BJBE/JNAlabelCF=1ORZF=1無符號數(shù)A≤BJG/JNLElabelSF=OFANDZF=0有符號數(shù)A>BJGE/JNLlabelSF=OFORZF=1有符號數(shù)A≥BJL/JNGElabelSF≠OFANDZF=0有符號數(shù)A<BJLE/JNGlabelSF≠OFORZF=1有符號數(shù)A≤B“cmpl-4(%ebp),%eax”執(zhí)行結(jié)果是CF=0,

ZF=0,OF=0,SF=1

,說明不滿足條件,應(yīng)跳出循環(huán)執(zhí)行,執(zhí)行結(jié)果正常。原碼加/減運算((自學(xué),不作要求)用于浮點數(shù)尾數(shù)運算符號位和數(shù)值部分分開處理僅對數(shù)值部分進行加減運算,符號位起判斷和控制作用規(guī)則如下:比較兩數(shù)符號,對加法實行“同號求和,異號求差”,對減法實行“異號求和,同號求差”。求和:數(shù)值位相加,和的符號取被加數(shù)(被減數(shù))的符號。若最高位產(chǎn)生進位,則結(jié)果溢出。求差:被加數(shù)(被減數(shù))加上加數(shù)(減數(shù))的補碼。最高數(shù)值位產(chǎn)生進位表明加法結(jié)果為正,所得數(shù)值位正確。最高數(shù)值位沒產(chǎn)生進位表明加法結(jié)果為負,得到的是數(shù)值位的補碼形式,需對結(jié)果求補,還原為絕對值形式的數(shù)值位。差的符號位:a)情況下,符號位取被加數(shù)(被減數(shù))的符號;

b)情況下,符號位為被加數(shù)(被減數(shù))的符號取反。原碼加/減運算(自學(xué),不作要求)例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ī)則知:同號相減,則求差(補碼減法)

差的數(shù)值位為:0011+(1010)求補

=0011+0110=1001

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

[X–Y]原

=0.0111思考題:如何設(shè)計一個基于加法器的原碼加/減法器?求和:直接加,有進位則溢出,符號同被求差:加補碼,不會溢出,符號分情況移碼加/減運算(自學(xué),不作要求)用于浮點數(shù)階碼運算符號位和數(shù)值部分可以一起處理運算公式(假定在一個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)

結(jié)論:移碼的和、差等于和、差的補碼!運算規(guī)則①加法:直接將[E1]移和[E2]移進行模2n加,然后對結(jié)果的符號取反。②減法:先將減數(shù)[E2]移求補(各位取反,末位加1),然后再與被減數(shù)[E1]移進行模2n相加,最后對結(jié)果的符號取反。③溢出判斷:進行模2n相加時,如果兩個加數(shù)的符號相同,并且與和數(shù)的符號也相同,則發(fā)生溢出。補碼和移碼的關(guān)系:符號位相反、數(shù)值位相同!移碼加/減運算(不作要求)例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。思考題:如何設(shè)計一個基于加法器的移碼加/減法器?在補碼加/減法器結(jié)果的最高位(MSB)加一個反相器!無符號數(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)乘法運算n=4無符號數(shù)的乘法運算手工乘法的特點:每步計算:X×yi,若yi=0,則得0;若yi=1,則得X把①求得的各項結(jié)果X×yi

逐次左移,可表示為X×yi×2-i

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

(X×yi×2-i),這就是兩個無符號數(shù)的乘積計算機內(nèi)部稍作以下改進:每次得X×yi后,與前面所得結(jié)果累加,得到Pi,稱之為部分積。因為不等到最后一次求和,減少了保存各次相乘結(jié)果X×yi的開銷。每次得X×yi后,不將它左移與前次部分積Pi相加,而將部分積Pi右移后與X×yi相加。因為加法運算始終對部分積中高n位進行。故用n位加法器可實現(xiàn)二個n位數(shù)相乘。對乘數(shù)中為“1”的位執(zhí)行加法和右移,對為“0”的位只執(zhí)行右移,而不執(zhí)行加法運算。無符號乘法運算的算法推導(dǎo)上述思想可寫成如下數(shù)學(xué)推導(dǎo)過程: X×Y=X×(0.y1y2…yn) =X×y1×2-1+X×y2×2-2+……+X×yn-1×2-(n-1)+X×yn×2-n

=2-n×X×yn+2-(n-1)×

X×yn-1+……+2-2×X×y2+2-1×X×y1=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為止。寫使能控制邏輯右移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位進位觸發(fā)器C:保存加法器的進位信號循環(huán)次數(shù)計數(shù)器Cn:存放循環(huán)次數(shù)。初值32,每循環(huán)一次,Cn減1,Cn=0時結(jié)束ALU:乘法核心部件。在控制邏輯控制下,對P和X的內(nèi)容“加”,在“寫使能”控制下運算結(jié)果被送回P,進位位在C中每次循環(huán)都要對進位位C、乘積寄存器P和乘數(shù)寄存器實現(xiàn)同步邏輯“右移”

Example:無符號整數(shù)乘法運算舉例說明:若需計算z=x*y;x、y和z都是unsigned類型。設(shè)x=1110y=1101應(yīng)用遞推公式:Pi=2-1(x*yi+Pi-1)C乘積P乘數(shù)R000001101+1110011101101001110110000111011+1110100011011010001101+1110101101101010110110可用一個雙倍字長的乘積寄存器;也可用兩個單倍字長的寄存器。部分積初始為0。保留進位位。右移時進位、部分積和剩余乘數(shù)一起進行邏輯右移。驗證:x=14,y=13,z=x*y=182當z取4位時,結(jié)果發(fā)生溢出,因為高4位不為全0!原碼乘法算法用于浮點數(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-1

yi

T操作迭代公式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]補”實現(xiàn)!3X時,本次-X,下次+X!部分積右移兩位,相當于4XP.94表3.3原碼兩位乘法舉例(自學(xué),不作要求)已知[X]原=0.111001,[Y]原=0.100111,用原碼兩位乘法計算[X×Y]原解:先用無符號數(shù)乘法計算111001×100111,原碼兩位乘法過程如下:若用模4補碼,則P和Y同時右移2位時,得到的P3是負數(shù),這顯然是錯誤的!需要再增加一位符號。采用補碼算術(shù)右移,與一位乘法不同,Why?為模8補碼形式(三位符號位),Why?速度快,但代價也大補碼乘法運算(自學(xué),不作要求)用于對什么類型數(shù)據(jù)計算?帶符號整數(shù)!如int型假定:[X]補=xn-1xn-2……

x1x0,

[Y]補=yn-1yn-2……

y1y0,求:[XxY]補=?基于以下補碼性質(zhì):

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推導(dǎo)如下:因為[XxY]補

[X]補x[Y]補,故不能直接用無符號數(shù)乘法計算。例如,若x=-5,求x*x=?2-32.[XxY]補=

(y30-y31)X.2-1+(y29-y30)X.2-2+……+(y0–y1)X.2-31+(y-1-y0)X.2-32=

2-1(2-1…(2-1(y-1-y0)X)+

(y0–y1)X)+…+

(y30-y31)X)符號與數(shù)值統(tǒng)一處理SKIP如何求補碼的真值(自學(xué),不作要求)根據(jù)補碼各位上的“權(quán)”,可以求出一個補碼的值真值范圍:

令:[A]補=an-1an-2……

a1a0則:A=-an-1.2n-1+an-2.2n-2+

……

a1.21+

a0.20

符號為0,則為正數(shù),數(shù)值部分同符號為1,則為負數(shù),數(shù)值各位取反,末位加1例如:補碼“11010110”的真值為:-0101010=-(32+8+2)=-42BACKBooth’s算法實質(zhì)(自學(xué),不作要求)當前位

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

1111

0beginningofrunendofrunmiddleofrun布斯算法舉例(自學(xué),不作要求)已知[X]補

=1101,[Y]補

=0110,計算[X×Y]補

驗證:當X×Y取8位時,結(jié)果-0010010B=-18;為4位時,結(jié)果溢出![-X]補

=00111111X

=-3,Y

=6,X×Y=-18,[X×Y]補應(yīng)等于11101110或結(jié)果溢出

如何判斷結(jié)果是否溢出?高4位是否全為符號位!補碼兩位乘法(自學(xué),不作要求)補碼兩位乘可用布斯算法推導(dǎo)如下:[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中,低位部分在乘數(shù)寄存器Y中。因為字長總是8的倍數(shù),所以補碼的位數(shù)n應(yīng)該是偶數(shù),因此,總循環(huán)次數(shù)為n/2。yi+1

yi

yi-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]補補碼兩位乘法舉例(自學(xué),不作要求)已知[X]補

=1101,[Y]補

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

PnPYy-1

說明

0000001100

開始,設(shè)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

,與一位補碼乘法(布斯乘法)所得結(jié)果相同,但循環(huán)次數(shù)減少了一半。驗證:-3×6=-18(-10010B)22快速乘法器(自學(xué),不作要求)前面介紹的乘法部件的特點通過一個ALU多次做“加/減+右移”來實現(xiàn)一位乘法:約n次“加+右移”兩位乘法:約n/2次“加+右移”所需時間隨位數(shù)增多而加長,由時鐘和控制電路控制設(shè)計快速乘法部件的必要性大約1/3是乘法運算快速乘法器的實現(xiàn)(由特定功能的組合邏輯單元構(gòu)成)流水線方式硬件疊加方式(如:陣列乘法器)流水線方式的快速乘法器(自學(xué),不作要求)為乘數(shù)的每位提供一個n位加法器每個加法器的兩個輸入端分別是:本次乘數(shù)對應(yīng)的位與被乘數(shù)相與的結(jié)果(即:0或被乘數(shù))上次部分積每個加法器的輸出分為兩部分:和的最低有效位(LSB)作為本位乘積進位和高31位的和數(shù)組成一個32位數(shù)作為本次部分積1組合邏輯電路!無需控制器控制陣列乘法器的實現(xiàn)(自學(xué),不作要求)手算乘法過程陣列乘法器全加器被乘數(shù)X部分積輸入AiBi進位輸入進位輸出

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

無符號陣列乘法器增加符號處理電路、乘前及乘后求補電路,即可實現(xiàn)帶符號數(shù)乘法器。Divide:Paper&Pencil

1001 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ù)定點除法運算除前預(yù)處理①若被除數(shù)=0且除數(shù)≠0,或定點整數(shù)除法時|被除數(shù)|<|除數(shù)|,則商為0,不再繼續(xù)②若被除數(shù)≠0、除數(shù)=0,則發(fā)生“除數(shù)為0”異常③若被除數(shù)和除數(shù)都為0,則有些機器產(chǎn)生一個不發(fā)信號的NaN,即“quietNaN”

當被除數(shù)和除數(shù)都≠

0,且商≠

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

夠減上商1;不夠減上商0(從msb→lsb得到各位商)基本操作為減法和移位,故可與乘法合用同一套硬件兩個n位數(shù)相除的情況:(1)定點正整數(shù)(即無符號數(shù))相除:在被除數(shù)的高位添n個0(2)定點正小數(shù)(即原碼小數(shù))相除:在被除數(shù)的低位添加n個0

這樣,就將所有情況都統(tǒng)一為:一個2n位數(shù)除以一個n位數(shù)第一次試商為1時的情況問題:第一次試商為1,說明什么?若是2n位除以n位的無符號整數(shù)運算,則說明將會得到多于n+1位的商,因而結(jié)果“溢出”(即:無法用n位表示商)。若是兩個n位數(shù)相除,則第一位商為0,且肯定不會溢出,為什么?若是浮點數(shù)中尾數(shù)原碼小數(shù)運算,第一次試商為1,則說明尾數(shù)部分有“溢出”,可通過浮點數(shù)的“右規(guī)”消除“溢出”。所以,在浮點數(shù)運算器中,第一次得到的商“1”要保留。最大商為:00001111/0001=1111商有n+1位數(shù),因而溢出!例:0.11110000/0.1000=+1.1110例:11111111/1111=10001無符號數(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,當Cn=0時,除法運算結(jié)束。ALU:除法核心部件。在控制邏輯控制下,對于寄存器R和Y的內(nèi)容進行“加/減”運算,在“寫使能”控制下運算結(jié)果被送回寄存器R。

R和Q同步“左移”,Q空出位上“商”,商的各位逐次左移到Q中。由控制邏輯根據(jù)ALU結(jié)果的符號決定商為0還是1。減----試商,加----恢復(fù)余數(shù)。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:00100011Shr

R(rh) D:0010 R:00010011驗證:7/2=3余1從例子可看出:每次上商為0時,需做加法以“恢復(fù)余數(shù)”。所以,稱為“恢復(fù)余數(shù)法也可在下一步運算時把當前多減的除數(shù)補回來。這種方法稱為“不恢復(fù)余數(shù)法”,又稱“加減交替法”。–D=1110

開始余數(shù)先左移了一位,故最后余數(shù)需向右移一位。這里是兩個n位無符號數(shù)相除,肯定不會溢出,故余數(shù)先左移而省略判斷溢出過程。不恢復(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|

(“負,0,加”)若Ri>=0,則商上“1”,不需恢復(fù)余數(shù),即:Ri+1=2Ri

-

2n|B|

(“正,1,減”)省去了恢復(fù)余數(shù)的過程注意:最后一次上商為“0”的話,需要“糾余”處理,即把試商時被減掉的除數(shù)加回去,恢復(fù)真正的余數(shù)。不恢復(fù)余數(shù)法也稱為加減交替法恢復(fù)余數(shù)法可進一步簡化為“加減交替法”帶符號數(shù)除法原碼除法商符和商值分開處理商的數(shù)值部分由無符號數(shù)除法求得商符由被除數(shù)和除數(shù)的符號確定:同號為0,異號為1余數(shù)的符號同被除數(shù)的符號補碼除法方法1:同原碼除法一樣,先轉(zhuǎn)換為正數(shù),先用無符號數(shù)除法,然后修正商和余數(shù)。方法2:直接用補碼除法,符號和數(shù)值一起進行運算,商符直接在運算中產(chǎn)生。兩個n位補碼整數(shù)除法運算,被除數(shù)需要進行符號擴展。若被除數(shù)為2n位,除數(shù)為n位,則被除數(shù)無需擴展。原碼除法舉例已知[X]原

=0.1011[Y]原

=1.1101用恢復(fù)余數(shù)法計算[X/Y]原解:商的符號位:01=1

減法操作用補碼加法實現(xiàn),是否夠減通過中間余數(shù)的符號來判斷,所以中間余數(shù)要加一位符號位。

[|X|]補

=0.1011[|Y|]補

=0.1101[–|Y|]補

=1.0011小數(shù)在低位擴展0思考:若實現(xiàn)無符號數(shù)相除,即1011除以1101,則有何不同?結(jié)果是什么?被除數(shù)高位補0,1011除以1101,結(jié)果等于0用于判斷是否溢出若求[Y/X]原結(jié)果如何?原碼除法舉例已知[X]原

=0.1011[Y]原

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

=0.1011[|Y|]補

=0.1101[–|Y|]補

=1.0011

“加減交替法”的要點:負、0、加正、1、減得到的結(jié)果與恢復(fù)余數(shù)法一樣!問題:用被除數(shù)(中間余數(shù))減除數(shù)試商時,怎樣確定是否“夠減”?中間余數(shù)的符號!(正數(shù)-正數(shù))補碼除法能否這樣來判斷呢?不能,因為符號可能不同!補碼除法(自學(xué),不作要求)補碼除法判斷是否“夠減”的規(guī)則(1)當被除數(shù)(或中間余數(shù))與除數(shù)同號時,做減法,若新余數(shù)的符號與除數(shù)符號一致表示夠減,否則為不夠減;(2)當被除數(shù)(或中間余數(shù))與除數(shù)異號時,做加法,若得到的新余數(shù)的符號與除數(shù)符號一致表示不夠減,否則為夠減。中間余數(shù)R的符號除數(shù)Y的符號同號:新中間余數(shù)=R–Y(同號為正商)異號:新中間余數(shù)=R+Y(異號為負商)010100110

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論