運算器的基本功能是完成對各種數(shù)據(jù)的加工處理,例如算術(shù)四則運算,與、或、求反等邏輯運算,算術(shù)和邏輯移位操作,比較數(shù)值,變更符號,計算主存地址等。運算器中的寄存器用于臨時保存參加運算的數(shù)據(jù)和運算的中間結(jié)果等。運算器中還要設置相應的部件,用來記錄一次運算結(jié)果的特征情況,如是否溢出,結(jié)果的符號位,結(jié)果是否為零等。
計算機所采用的運算器類型很多,從不同的角度分析,就有不同的分類方法。從小數(shù)點的表示形式可分為定點運算器和浮點運算器。定點運算器只能做定點數(shù)運算,特點是機器數(shù)所表示的范圍較小,但結(jié)構(gòu)較簡單。浮點運算器功能較強,既能對浮點數(shù),又能對定點數(shù)進行運算,其數(shù)的表示范圍很大,但結(jié)構(gòu)相當復雜。從進位制方面分為二進制運算器和十進制運算器。一般計算機都采用二進制運算器,隨著計算機廣泛應用于商業(yè)和數(shù)據(jù)處理,越來越多的機器都擴充十進制運算的功能,使運算器既能完成二進制的運算,也能完成十進制運算。計算機中運算器需要具有完成多種運算操作的功能,因而必須將各種算法綜合起來,設計一個完整的運算部件。
浮點運算器
1、浮點運算器的一般結(jié)構(gòu)浮點運算可用兩個松散連接的定點運算部件來實現(xiàn):即階碼部件和尾數(shù)部件,浮點運算器的一般結(jié)構(gòu)尾數(shù)部件實質(zhì)上就是一個通用的定點運算器,要求該運算器能實現(xiàn)加、減、乘、除四種基本算術(shù)運算。其中三個單字長寄存器用來存放操作數(shù):AC為累加器,MQ為乘商寄存器,DR為數(shù)據(jù)寄存器。AC和MQ連起來還可組成左右移位的雙字長寄存器AC-MQ。并行加法器用來完成數(shù)據(jù)的加工處理,其輸入來自AC和DR,而結(jié)果回送到AC。MQ寄存器在乘法時存放乘數(shù),而除法時存放商數(shù),所以稱為乘商寄存器。DR用來存放被乘數(shù)或除數(shù),而結(jié)果(乘積或商與余數(shù))則存放在AC-MQ。在四則運算中,使用這些寄存器的典型方法如下:運算類別 寄存器關(guān)系加法AC+DR→AC減法AC-DR→AC乘法DR×MQ→AC-MQ除法AC÷DR→AC-MQ對階碼部件來說,只要能進行階碼相加、相減和比較操作即可。在圖2-21中,操作數(shù)的階碼部分放在寄存器E1和E2,它們與并行加法器相連以便計算。浮點加法和減法所需要的階碼比較是通過E1-E2來實現(xiàn)的,相減的結(jié)果放入計數(shù)器E中,然后按照E的符號為決定哪一個階碼較大。在尾數(shù)相加或相減之前,需要將一個尾數(shù)進行移位,這是由計數(shù)器E來控制的,目的是使E的值按順序減到0。E每減一次1,相應的尾數(shù)則向右移1位。一旦尾數(shù)高速完畢,它們就可按通常的定點方法進行處理。運算結(jié)果的階碼值仍放到計數(shù)器E中。
2、點協(xié)處理器,80x87是美國Intel公司為處理浮點數(shù)等數(shù)據(jù)的算術(shù)運算和多種函數(shù)計算而設計生產(chǎn)的專用算術(shù)運算處理器。由于它們的算術(shù)運算是配合80x86CPU進行的,所以又稱為協(xié)處理器。我們以80x87為例來討論浮點運算器部件的組成。浮點協(xié)處理器的主要功能如下:
(1) 可與配套的CPU芯片異步并行工作。80x87相當于386的一個I/O部件,本身有它自己的指令,但不能單獨使用,它只能作為386主CPU的協(xié)處理器才能運算。因為真正的讀寫主存的工作不是80x87完成,而是由386執(zhí)行的。如果386從主存讀取的指令是80x87浮點運算指令,則它們以輸出方式把該指令送到80x87,80x87接收后進行譯碼并執(zhí)行浮點運算。在80x87進行運算期間,386可取下一條其他指令予以執(zhí)行,因而實現(xiàn)了并行工作。如果在80x87執(zhí)行浮點運算指令過程中386又取來一條80x87指令,則80x87以給出“忙”的標志信號加以拒絕,使386暫停向80x87發(fā)送命令。只有待80x87完成浮點運算而取消“忙”的標志信號以后,386才可以進行一次發(fā)送操作。
(2) 高性能的80位字長的內(nèi)部結(jié)構(gòu),有8個80位字長的以堆棧方式管理的寄存器組。80x87從存儲器取數(shù)和向存儲器寫數(shù)時,均用80位的臨時實數(shù)和其他6種數(shù)據(jù)類型執(zhí)行自動轉(zhuǎn)換。全部數(shù)據(jù)在80x87中均以80位臨時實數(shù)的形式表示。因此80x87具有80位的內(nèi)部結(jié)構(gòu),并有八個80位字長以 “先進后出”方式管理的寄存器組,又稱寄存器堆棧。這些寄存器可以按堆棧方式工作,此時,棧頂被用作累加器;也可以按寄存器的編號直接訪問任一個寄存器。(3) 浮點數(shù)的格式,完全符合IEEE制定的國際標準。
(4) 能處理包括二進制浮點數(shù)、二進制整數(shù)和十進制數(shù)串三大類共7種數(shù)據(jù)。此7種數(shù)據(jù)類型在寄存器中表示如下:短整數(shù)(32位整數(shù)) S 31位 (二進制補碼) 長整數(shù)(64位整數(shù)) S 63位 (二進制補碼) 短實數(shù)(32位浮點數(shù)) S 指數(shù) 尾數(shù)(23位) 長實數(shù)(64位浮點數(shù)) S 指數(shù) 尾數(shù)(52位) 臨時實數(shù)(80位浮點數(shù)) S 指數(shù) 尾數(shù)(64位) 十進數(shù)串(十進制18位) S -- d17d16 … d1d0。此處S為一位符號位,0代表正,1代表負。三種浮點數(shù)階碼的基值均為2。階碼值用移碼表示,尾數(shù)用原碼表示。尾數(shù)有32位、64位、80位三種。不僅僅是一個浮點運算器,還包括了執(zhí)行數(shù)據(jù)運算所需要的全部控制線路,就運算部分講,有處理浮點數(shù)指數(shù)部分的部件和處理尾數(shù)部分的部件,還有加速移位操作的移位器線路,它們通過指數(shù)總線和小數(shù)總線與八個80位字長的寄存器堆棧相連接。
(5) 內(nèi)部的出錯管理功能為了保證操作的正確執(zhí)行,80x87內(nèi)部還設置了三個各為16位字長的寄存器,即特征寄存器、控制字寄存器和狀態(tài)寄存器。特征寄存器用每兩位表示寄存器堆棧中每個寄存器的狀態(tài),即特征值為00-11四種組合時表明相應的寄存器有正確數(shù)據(jù)、數(shù)據(jù)為0、數(shù)據(jù)非法、無數(shù)據(jù)四種情況??刂谱旨拇嫫饔糜诳刂?0x87的內(nèi)部操作。其中PC為精度控制位域(2位):00為24位,01為備用,10為53位,11為64位。RC為舍入控制位域(2位):00為就近舍入,01朝-方向舍入,10朝+方向舍入,11朝0舍入。IC為無窮大控制位:該位為0時+與-作同值處理,該位為1時+與-不作同值處理。控制寄存器的低6位作異常中斷屏蔽位:IM為非法處理,DM為非法操作數(shù),ZM為0作除數(shù),OM為上溢,UM為下溢,PM為精度下降。狀態(tài)字寄存器用于表示80x87的結(jié)果處理情況,例如當“忙”標志為1時,表示正在執(zhí)行一條浮點運算指令,為0則表示80x87空閑。狀態(tài)寄存器的低6位指出異常錯誤的6種類型,與控制寄存器低6位相。當?shù)目刂萍拇嫫魑粸?(未屏蔽)而狀態(tài)寄存器位為1時,因發(fā)生某種異常錯誤而產(chǎn)生中斷請求。
3.CPU內(nèi)的浮點運算器,奔騰CPU將浮點運算器包含在芯片內(nèi)。浮點運算部件采用流水線設計。指令執(zhí)行過程分為8段流水線。前4段為指令預取(DF)、指令譯碼(D1)、地址生成(D2)、取操作數(shù)(EX),在U,V流水線中完成;后4段為執(zhí)行1(X1)、執(zhí)行2(X2)、結(jié)果寫回寄存器堆(WF)、錯誤報告(ER),在浮點運算器中完成。一般情況下,由V流水線完成一條浮點操作指令。浮點部件內(nèi)有浮點專用的加法器、乘法器和除法器,有8個80位寄存器組成的寄存器堆,內(nèi)部的數(shù)據(jù)總線為80位寬。因此浮點部件可支持IEEE754標準的單精度和雙精度格式的浮點數(shù)。另外還使用一種稱為臨時實數(shù)的80位浮點數(shù)。對于浮點的取數(shù)、加法、乘法等操作,采用了新的算法并用硬件來實現(xiàn),其執(zhí)行速度是80486的10倍多。