運(yùn)算器及其相關(guān)理論
運(yùn)算器由算術(shù)邏輯單元(ALU)、累加器、狀態(tài)寄存器、通用寄存器組等組成。算術(shù)邏輯運(yùn)算單元(ALU)的基本功能為加、減、乘、除四則運(yùn)算,與、或、非、異或等邏輯操作,以及移位、求補(bǔ)等操作。計(jì)算機(jī)運(yùn)行時(shí),運(yùn)算器的操作和操作種類由控制器決定。運(yùn)算器處理的數(shù)據(jù)來自存儲(chǔ)器;處理后的結(jié)果數(shù)據(jù)通常送回存儲(chǔ)器,或暫時(shí)寄存在運(yùn)算器中。與Control Unit共同組成了CPU的核心部分。
運(yùn)算器的處理對象是數(shù)據(jù),所以數(shù)據(jù)長度和計(jì)算機(jī)數(shù)據(jù)表示方法,對運(yùn)算器的性能影響極大。70年代微處理器常以1個(gè)、4個(gè)、8個(gè)、16個(gè)二進(jìn)制位作為處理數(shù)據(jù)的基本單位。大多數(shù)通用計(jì)算機(jī)則以16、32、64位作為運(yùn)算器處理數(shù)據(jù)的長度。能對一個(gè)數(shù)據(jù)的所有位同時(shí)進(jìn)行處理的運(yùn)算器稱為并行運(yùn)算器。如果一次只處理一位,則稱為串行運(yùn)算器。有的運(yùn)算器一次可處理幾位 (通常為6或8位),一個(gè)完整的數(shù)據(jù)分成若干段進(jìn)行計(jì)算,稱為串/并行運(yùn)算器。運(yùn)算器往往只處理一種長度的數(shù)據(jù)。有的也能處理幾種不同長度的數(shù)據(jù),如半字長運(yùn)算、雙倍字長運(yùn)算、四倍字長運(yùn)算等。有的數(shù)據(jù)長度可以在運(yùn)算過程中指定,稱為變字長運(yùn)算。按照數(shù)據(jù)的不同表示方法,可以有二進(jìn)制運(yùn)算器、十進(jìn)制運(yùn)算器、十六進(jìn)制運(yùn)算器、定點(diǎn)整數(shù)運(yùn)算器、定點(diǎn)小數(shù)運(yùn)算器、浮點(diǎn)數(shù)運(yùn)算器等。按照數(shù)據(jù)的性質(zhì),有地址運(yùn)算器和字符運(yùn)算器等。它的主要功能是進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算。
運(yùn)算器能執(zhí)行多少種操作和操作速度,標(biāo)志著運(yùn)算器能力的強(qiáng)弱,甚至標(biāo)志著計(jì)算機(jī)本身的能力。運(yùn)算器最基本的操作是加法。一個(gè)數(shù)與零相加,等于簡單地傳送這個(gè)數(shù)。將一個(gè)數(shù)的代碼求補(bǔ),與另一個(gè)數(shù)相加,相當(dāng)于從后一個(gè)數(shù)中減去前一個(gè)數(shù)。將兩個(gè)數(shù)相減可以比較它們的大小。
左右移位是運(yùn)算器的基本操作。在有符號(hào)的數(shù)中,符號(hào)不動(dòng)而只移數(shù)據(jù)位,稱為算術(shù)移位。若數(shù)據(jù)連同符號(hào)的所有位一齊移動(dòng),稱為邏輯移位。若將數(shù)據(jù)的最高位與最低位鏈接進(jìn)行邏輯移位,稱為循環(huán)移位。運(yùn)算器的邏輯操作可將兩個(gè)數(shù)據(jù)按位進(jìn)行與、或、異或,以及將一個(gè)數(shù)據(jù)的各位求非。有的運(yùn)算器還能進(jìn)行二值代碼的16種邏輯操作。乘、除法操作較為復(fù)雜。很多計(jì)算機(jī)的運(yùn)算器能直接完成這些操作。乘法操作是以加法操作為基礎(chǔ)的,由乘數(shù)的一位或幾位譯碼控制逐次產(chǎn)生部分積,部分積相加得乘積。除法則又常以乘法為基礎(chǔ),即選定若干因子乘以除數(shù),使它近似為1,這些因子乘被除數(shù)則得商。沒有執(zhí)行乘法、除法硬件的計(jì)算機(jī)可用程序?qū)崿F(xiàn)乘、除,但速度慢得多。有的運(yùn)算器還能執(zhí)行在一批數(shù)中尋求最大數(shù),對一批數(shù)據(jù)連續(xù)執(zhí)行同一種操作,求平方根等復(fù)雜操作。
實(shí)現(xiàn)運(yùn)算器的操作,特別是四則運(yùn)算,必須選擇合理的運(yùn)算方法。它直接影響運(yùn)算器的性能,也關(guān)系到運(yùn)算器的結(jié)構(gòu)和成本。另外,在進(jìn)行數(shù)值計(jì)算時(shí),結(jié)果的有效數(shù)位可能較長,必須截取一定的有效數(shù)位,由此而產(chǎn)生最低有效數(shù)位的舍入問題。選用的舍入規(guī)則也影響到計(jì)算結(jié)果的精確度。在選擇計(jì)算機(jī)的數(shù)的表示方式時(shí),應(yīng)當(dāng)全面考慮以下幾個(gè)因素:要表示的數(shù)的類型(小數(shù)、整數(shù)、實(shí)數(shù)和復(fù)數(shù)):決定表示方式,可能遇到的數(shù)值范圍:確定存儲(chǔ)、處理能力。數(shù)值精確度:處理能力相關(guān);數(shù)據(jù)存儲(chǔ)和處理所需要的硬件代價(jià):造價(jià)高低。
兩種常用格式:定點(diǎn)格式:定點(diǎn)格式容許的數(shù)值范圍有限,但要求的處理硬件比較簡單;浮點(diǎn)格式:容許的數(shù)值范圍很大,但要求的處理硬件比較復(fù)雜。1、定點(diǎn)數(shù)表示法:定點(diǎn)指小數(shù)點(diǎn)的位置固定,為了處理方便,一般分為定點(diǎn)純整數(shù)和純小數(shù)。2、浮點(diǎn)數(shù)表示法:由于所需表示的數(shù)值取值范圍相差十分懸殊,給存儲(chǔ)和計(jì)算帶來諸多不便,因此出現(xiàn)了浮點(diǎn)運(yùn)算法。浮點(diǎn)表示法,即小數(shù)點(diǎn)的位置是浮動(dòng)的。其思想來源于科學(xué)計(jì)數(shù)法。IEEE754的浮點(diǎn)數(shù)(比較特殊)浮點(diǎn)數(shù)的規(guī)格化:主要解決同一浮點(diǎn)數(shù)表示形式的不唯一性問題。規(guī)定 ,否則尾數(shù)要進(jìn)行左移或右移。機(jī)器零的概念:尾數(shù)為0或是階碼值小于所能表示的最小數(shù)。3、十進(jìn)制數(shù)串的表示方法:由于人們對十進(jìn)制比較熟悉,因此在計(jì)算機(jī)中要增加對十進(jìn)制運(yùn)算的支持。兩種方式:將十進(jìn)制數(shù)變?yōu)槎M(jìn)制數(shù)運(yùn)算,輸出時(shí)再由二進(jìn)制變?yōu)槭M(jìn)制。直接的十進(jìn)制運(yùn)算。直接運(yùn)算的表示方法:字符串形式:用于非數(shù)值計(jì)算領(lǐng)域、壓縮的十進(jìn)制數(shù)串:分為定長和不定長兩種。需要相應(yīng)的十進(jìn)制運(yùn)算器和指令支持。4、自定義數(shù)據(jù)表示:標(biāo)志符數(shù)據(jù)表示、描述符數(shù)據(jù)表示。區(qū)別:標(biāo)志符與每個(gè)數(shù)據(jù)相連,二者合起來存放在一個(gè)存儲(chǔ)單元,而描述符要和數(shù)據(jù)分開存放;描述符表示中,先訪問描述符,后訪問數(shù)據(jù),至少增加一次訪存;描述符是程序的一部分,而不是數(shù)據(jù)的一部分。原碼:比較自然的表示法,最高位表示符號(hào),0為正,1為負(fù)。優(yōu)點(diǎn):簡單易懂。缺點(diǎn):加減法運(yùn)算復(fù)雜。補(bǔ)碼:加減法運(yùn)算方便,減法可以轉(zhuǎn)換為加法。定點(diǎn)小數(shù)的補(bǔ)碼。定點(diǎn)整數(shù)的補(bǔ)碼,反碼:為計(jì)算補(bǔ)碼方便而引入。由反碼求補(bǔ)碼:符號(hào)位置1,各位取反,末位加1。移碼:用于階碼的表示,兩個(gè)移碼容易比較大小,便于對階。