點(diǎn)協(xié)處理器與浮點(diǎn)處理器
掃描二維碼
隨時(shí)隨地手機(jī)看文章
點(diǎn)協(xié)處理器,80x87是美國Intel公司為處理浮點(diǎn)數(shù)等數(shù)據(jù)的算術(shù)運(yùn)算和多種函數(shù)計(jì)算而設(shè)計(jì)生產(chǎn)的專用算術(shù)運(yùn)算處理器。由于它們的算術(shù)運(yùn)算是配合80x86CPU進(jìn)行的,所以又稱為協(xié)處理器。我們以80x87為例來討論浮點(diǎn)運(yùn)算器部件的組成。浮點(diǎn)協(xié)處理器的主要功能如下:
(1) 可與配套的CPU芯片異步并行工作。80x87相當(dāng)于386的一個(gè)I/O部件,本身有它自己的指令,但不能單獨(dú)使用,它只能作為386主CPU的協(xié)處理器才能運(yùn)算。因?yàn)檎嬲淖x寫主存的工作不是80x87完成,而是由386執(zhí)行的。如果386從主存讀取的指令是80x87浮點(diǎn)運(yùn)算指令,則它們以輸出方式把該指令送到80x87,80x87接收后進(jìn)行譯碼并執(zhí)行浮點(diǎn)運(yùn)算。在80x87進(jìn)行運(yùn)算期間,386可取下一條其他指令予以執(zhí)行,因而實(shí)現(xiàn)了并行工作。如果在80x87執(zhí)行浮點(diǎn)運(yùn)算指令過程中386又取來一條80x87指令,則80x87以給出“忙”的標(biāo)志信號(hào)加以拒絕,使386暫停向80x87發(fā)送命令。只有待80x87完成浮點(diǎn)運(yùn)算而取消“忙”的標(biāo)志信號(hào)以后,386才可以進(jìn)行一次發(fā)送操作。
(2) 高性能的80位字長的內(nèi)部結(jié)構(gòu),有8個(gè)80位字長的以堆棧方式管理的寄存器組。80x87從存儲(chǔ)器取數(shù)和向存儲(chǔ)器寫數(shù)時(shí),均用80位的臨時(shí)實(shí)數(shù)和其他6種數(shù)據(jù)類型執(zhí)行自動(dòng)轉(zhuǎn)換。全部數(shù)據(jù)在80x87中均以80位臨時(shí)實(shí)數(shù)的形式表示。因此80x87具有80位的內(nèi)部結(jié)構(gòu),并有八個(gè)80位字長以 “先進(jìn)后出”方式管理的寄存器組,又稱寄存器堆棧。這些寄存器可以按堆棧方式工作,此時(shí),棧頂被用作累加器;也可以按寄存器的編號(hào)直接訪問任一個(gè)寄存器。
(3) 浮點(diǎn)數(shù)的格式,完全符合IEEE制定的國際標(biāo)準(zhǔn)。
(4) 能處理包括二進(jìn)制浮點(diǎn)數(shù)、二進(jìn)制整數(shù)和十進(jìn)制數(shù)串三大類共7種數(shù)據(jù)。此7種數(shù)據(jù)類型在寄存器中表示如下:短整數(shù)(32位整數(shù)) S 31位 (二進(jìn)制補(bǔ)碼) 長整數(shù)(64位整數(shù)) S 63位 (二進(jìn)制補(bǔ)碼) 短實(shí)數(shù)(32位浮點(diǎn)數(shù)) S 指數(shù) 尾數(shù)(23位) 長實(shí)數(shù)(64位浮點(diǎn)數(shù)) S 指數(shù) 尾數(shù)(52位) 臨時(shí)實(shí)數(shù)(80位浮點(diǎn)數(shù)) S 指數(shù) 尾數(shù)(64位) 十進(jìn)數(shù)串(十進(jìn)制18位) S -- d17d16 … d1d0。此處S為一位符號(hào)位,0代表正,1代表負(fù)。三種浮點(diǎn)數(shù)階碼的基值均為2。階碼值用移碼表示,尾數(shù)用原碼表示。尾數(shù)有32位、64位、80位三種。不僅僅是一個(gè)浮點(diǎn)運(yùn)算器,還包括了執(zhí)行數(shù)據(jù)運(yùn)算所需要的全部控制線路,就運(yùn)算部分講,有處理浮點(diǎn)數(shù)指數(shù)部分的部件和處理尾數(shù)部分的部件,還有加速移位操作的移位器線路,它們通過指數(shù)總線和小數(shù)總線與八個(gè)80位字長的寄存器堆棧相連接。
(5) 內(nèi)部的出錯(cuò)管理功能為了保證操作的正確執(zhí)行,80x87內(nèi)部還設(shè)置了三個(gè)各為16位字長的寄存器,即特征寄存器、控制字寄存器和狀態(tài)寄存器。特征寄存器用每兩位表示寄存器堆棧中每個(gè)寄存器的狀態(tài),即特征值為00-11四種組合時(shí)表明相應(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時(shí)+與-作同值處理,該位為1時(shí)+與-不作同值處理??刂萍拇嫫鞯牡?位作異常中斷屏蔽位:IM為非法處理,DM為非法操作數(shù),ZM為0作除數(shù),OM為上溢,UM為下溢,PM為精度下降。狀態(tài)字寄存器用于表示80x87的結(jié)果處理情況,例如當(dāng)“忙”標(biāo)志為1時(shí),表示正在執(zhí)行一條浮點(diǎn)運(yùn)算指令,為0則表示80x87空閑。狀態(tài)寄存器的低6位指出異常錯(cuò)誤的6種類型,與控制寄存器低6位相。當(dāng)?shù)目刂萍拇嫫魑粸?(未屏蔽)而狀態(tài)寄存器位為1時(shí),因發(fā)生某種異常錯(cuò)誤而產(chǎn)生中斷請(qǐng)求。
CPU內(nèi)的浮點(diǎn)運(yùn)算器,奔騰CPU將浮點(diǎn)運(yùn)算器包含在芯片內(nèi)。浮點(diǎn)運(yùn)算部件采用流水線設(shè)計(jì)。指令執(zhí)行過程分為8段流水線。前4段為指令預(yù)取(DF)、指令譯碼(D1)、地址生成(D2)、取操作數(shù)(EX),在U,V流水線中完成;后4段為執(zhí)行1(X1)、執(zhí)行2(X2)、結(jié)果寫回寄存器堆(WF)、錯(cuò)誤報(bào)告(ER),在浮點(diǎn)運(yùn)算器中完成。一般情況下,由V流水線完成一條浮點(diǎn)操作指令。浮點(diǎn)部件內(nèi)有浮點(diǎn)專用的加法器、乘法器和除法器,有8個(gè)80位寄存器組成的寄存器堆,內(nèi)部的數(shù)據(jù)總線為80位寬。因此浮點(diǎn)部件可支持IEEE754標(biāo)準(zhǔn)的單精度和雙精度格式的浮點(diǎn)數(shù)。另外還使用一種稱為臨時(shí)實(shí)數(shù)的80位浮點(diǎn)數(shù)。對(duì)于浮點(diǎn)的取數(shù)、加法、乘法等操作,采用了新的算法并用硬件來實(shí)現(xiàn),其執(zhí)行速度是80486的10倍多。