1.2.1 8086的功能結(jié)構(gòu)
處理器由多個(gè)功能部件組成。Intel公司按兩個(gè)功能模塊描繪了Intel 8086處理器的內(nèi)部結(jié)構(gòu),如圖1-2所示。
1. 總線接口單元和執(zhí)行單元
圖1-2虛線右邊部分是總線接口單元BIU(Bus Interface Unit)。它由6字節(jié)的指令隊(duì)列(即指令寄存器)、指令指針I(yè)P(等同于程序計(jì)數(shù)器的功能)、段寄存器(CS、DS、SS和ES)、地址加法器和總線控制邏輯等構(gòu)成。該單元管理著 8086 與系統(tǒng)總線的接口,負(fù)責(zé)處理器對(duì)存儲(chǔ)器和外設(shè)進(jìn)行訪問。對(duì)外的8086處理器引腳由16位雙向數(shù)據(jù)總線、20位地址總線和若干控制總線組成。8086 所有對(duì)外操作必須通過 BIU 和這些總線進(jìn)行,例如從主存中讀取指令、從主存或外設(shè)讀取數(shù)據(jù)、向主存或外設(shè)寫出數(shù)據(jù)等操作。
圖1-2虛線左邊部分是執(zhí)行單元EU(Execution Unit)。它由算術(shù)邏輯單元ALU(Arithmetic Logic Unit)、標(biāo)志寄存器、通用寄存器和進(jìn)行指令譯碼的EU控制電路等構(gòu)成,負(fù)責(zé)執(zhí)行指令的功能。
源程序由一條條語句組成,而可執(zhí)行程序則由一條條指令組成,運(yùn)行程序就是執(zhí)行一條條指令的過程。一條指令的整個(gè)執(zhí)行過程又可以分成兩個(gè)主要階段:取指和執(zhí)行,如圖1-3(a)所示。
取指階段是處理器將指令代碼從主存儲(chǔ)器中取出并進(jìn)入處理器內(nèi)部的過程。8086處理器中,指令在存儲(chǔ)器中的地址(即位置編號(hào))由代碼段寄存器CS和指令指針寄存器IP共同提供,再由地址加法器得到20位存儲(chǔ)器地址。總線接口單元BIU負(fù)責(zé)從存儲(chǔ)器取出這個(gè)指令代碼,送入指令隊(duì)列。
執(zhí)行階段是處理器將指令代碼翻譯成它代表的功能(被稱為譯碼)、并發(fā)出有關(guān)控制信號(hào)實(shí)現(xiàn)這個(gè)功能的過程。8086處理器中,執(zhí)行單元EU從指令隊(duì)列中獲得預(yù)先取出的指令代碼,在EU控制電路中進(jìn)行譯碼,然后發(fā)出控制信號(hào)由算術(shù)邏輯單元ALU進(jìn)行數(shù)據(jù)運(yùn)算、數(shù)據(jù)傳送等操作。指令執(zhí)行階段需要的操作數(shù)據(jù)有些來自處理器內(nèi)部的寄存器,有些來自指令隊(duì)列,還有些來自存儲(chǔ)器和外設(shè)。如果需要來自存儲(chǔ)器或外設(shè)的數(shù)據(jù),則控制單元EU控制總線接口單元BIU從外部獲取這些數(shù)據(jù)。
2. 指令預(yù)取
8086處理器維護(hù)著長(zhǎng)度為6字節(jié)的指令隊(duì)列,該隊(duì)列按照“先進(jìn)先出”FIFO(First In First Out)的方式進(jìn)行工作。當(dāng)指令隊(duì)列中出現(xiàn)空缺時(shí),BIU 會(huì)自動(dòng)取指填補(bǔ)這一空缺;而當(dāng)程序不能按順序執(zhí)行,即發(fā)生轉(zhuǎn)移(出現(xiàn)分支)時(shí),BIU又會(huì)廢除已經(jīng)取出的指令,重新取指形成新的指令隊(duì)列。
8086處理器中,指令的讀取操作在BIU單元實(shí)現(xiàn),而指令的執(zhí)行階段在EU單元完成。因?yàn)锽IU和EU兩個(gè)單元相互獨(dú)立、分別完成各自操作,所以可以并行操作。換句話說,也就是在EU單元對(duì)一個(gè)指令進(jìn)行譯碼執(zhí)行時(shí),BIU單元可以同時(shí)對(duì)后續(xù)指令進(jìn)行讀取;所以, 8086處理器的指令讀取,實(shí)際上是指令預(yù)取(Prefetch),如圖1-3(b)所示。
由于要譯碼執(zhí)行的指令已經(jīng)預(yù)取到了處理器內(nèi)部的指令隊(duì)列,所以 8086 不需要等待取指操作就可以從指令隊(duì)列獲得指令進(jìn)行譯碼執(zhí)行。而對(duì)于簡(jiǎn)單的處理器來說,在指令譯碼前必須等待取指操作的完成。取指是處理器最頻繁的操作,每條指令都要讀取指令代碼一到數(shù)次(與指令代碼的長(zhǎng)度有關(guān)),所以8086的這種結(jié)構(gòu)和操作方式節(jié)省了處理器的許多取指時(shí)間,提高了工作效率。這就是最簡(jiǎn)單的指令流水線技術(shù)。同時(shí)也看到,程序轉(zhuǎn)移將使預(yù)取指令作廢,從而降低了流水線效率。