點協(xié)處理器與浮點處理器
點協(xié)處理器,80x87是美國Intel公司為處理浮點數(shù)等數(shù)據(jù)的算術(shù)運算和多種函數(shù)計算而設(shè)計生產(chǎn)的專用算術(shù)運算處理器。由于它們的算術(shù)運算是配合80x86CPU進行的,所以又稱為協(xié)處理器。我們以80x87為例來討論浮點運算器部件的組成。浮點協(xié)處理器的主要功能如下:
(1) 可與配套的CPU芯片異步并行工作。80x87相當(dāng)于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)部還設(shè)置了三個各為16位字長的寄存器,即特征寄存器、控制字寄存器和狀態(tài)寄存器。特征寄存器用每兩位表示寄存器堆棧中每個寄存器的狀態(tài),即特征值為00-11四種組合時表明相應(yīng)的寄存器有正確數(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時+與-不作同值處理??刂萍拇嫫鞯牡?位作異常中斷屏蔽位:IM為非法處理,DM為非法操作數(shù),ZM為0作除數(shù),OM為上溢,UM為下溢,PM為精度下降。狀態(tài)字寄存器用于表示80x87的結(jié)果處理情況,例如當(dāng)“忙”標志為1時,表示正在執(zhí)行一條浮點運算指令,為0則表示80x87空閑。狀態(tài)寄存器的低6位指出異常錯誤的6種類型,與控制寄存器低6位相。當(dāng)?shù)目刂萍拇嫫魑粸?(未屏蔽)而狀態(tài)寄存器位為1時,因發(fā)生某種異常錯誤而產(chǎn)生中斷請求。
CPU內(nèi)的浮點運算器,奔騰CPU將浮點運算器包含在芯片內(nèi)。浮點運算部件采用流水線設(shè)計。指令執(zhí)行過程分為8段流水線。前4段為指令預(yù)取(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倍多。