官术网_书友最值得收藏!

2.1 8086微處理器簡(jiǎn)介

2.1.1 8086微處理器內(nèi)部結(jié)構(gòu)

微處理器隨著制造技術(shù)的不斷發(fā)展,其集成度越來(lái)越高,并且內(nèi)部晶體管已達(dá)到幾百萬(wàn)個(gè)。雖然從最初的微處理器發(fā)展到現(xiàn)在,晶體管數(shù)目增加了上千倍,但是微處理器的內(nèi)部結(jié)構(gòu)仍然可分為控制單元、邏輯單元和存儲(chǔ)單元三大部分;按功能可分為總線接口單元(Bus Interface Unit,BIU)和執(zhí)行單元(Execution Unit,EU)兩部分。8086微處理器內(nèi)部結(jié)構(gòu)圖如圖2-1所示。

圖2-1 8086微處理器內(nèi)部結(jié)構(gòu)圖

1. 執(zhí)行單元(EU)

8086微處理器的EU中主要由通用寄存器、指針寄存器、變址寄存器、算術(shù)邏輯單元(ALU)、標(biāo)志寄存器(FR)和EU控制電路組成。其主要功能是執(zhí)行指令。

1)通用寄存器

8086微處理器有4個(gè)16位的通用寄存器(AX、BX、CX、DX),可以存放16位的操作數(shù),也可分為8個(gè)8位的寄存器,用作8位寄存器時(shí)分別記為AL、AH、BL、BH、CL、CH、DL、DH。其中,AX(AL、AH)稱為累加器,BX(BL、BH)稱為基址寄存器,CX(CL、CH)稱為計(jì)數(shù)寄存器,DX(DL、DH)稱為數(shù)據(jù)寄存器,這些寄存器在具體使用上有一定的差別。

? AX:累加器,在乘除法運(yùn)算、串運(yùn)算和I/O指令中均作為專用寄存器使用。

? BX:基址寄存器,在尋址時(shí)常用來(lái)存放基址。

? CX:計(jì)數(shù)寄存器,在循環(huán)和串操作指令中作為計(jì)數(shù)器使用。

? DX:數(shù)據(jù)寄存器,在寄存器間接尋址的I/O指令中存放I/O端口地址,在雙字節(jié)乘除運(yùn)算時(shí),DX與AX共同存放一個(gè)32位雙字節(jié)數(shù)據(jù),其中DX存放高16位。

2)指針寄存器

系統(tǒng)中有兩個(gè)16位的指針寄存器:SP(Stack Point Register)和BP(Basic Point Register),其中,SP是堆棧指針寄存器;BP是基數(shù)指針寄存器,通常用于存放基地址,用來(lái)指示相對(duì)于起始地址的偏移量。BP和SP一般用于堆棧段。

3)變址寄存器

系統(tǒng)中有兩個(gè)16位的變址寄存器,SI(Source Index Register)和DI(Destination Index Register),其中,SI是源變址寄存器,DI是目的變址寄存器,可用作寄存器間接尋址、寄存器相對(duì)尋址和寄存器基址變址尋址。

4)算術(shù)邏輯單元

算術(shù)邏輯單元實(shí)際上就是計(jì)算機(jī)的運(yùn)算器,可進(jìn)行各種運(yùn)算,包括算數(shù)運(yùn)算和邏輯運(yùn)算兩大類。

? 算術(shù)運(yùn)算:包括加、減、加1、減1、比較、求反、求補(bǔ)、乘、除運(yùn)算。

? 邏輯運(yùn)算:包括邏輯與、邏輯或、邏輯非、邏輯異或及移位、循環(huán)移位等運(yùn)算和操作。算術(shù)邏輯單元完成16位或8位算術(shù)邏輯運(yùn)算。運(yùn)算結(jié)果由EU的內(nèi)部總線送到EU或BLU的寄存器中,也可由BIU寫入存儲(chǔ)器或I/O端口,本次操作的狀態(tài)(如是否有進(jìn)位等)反映在標(biāo)志寄存器中。

5)標(biāo)志寄存器

標(biāo)志寄存器是一個(gè)16位寄存器,使用其中的9位作為條件標(biāo)志(狀態(tài)標(biāo)志)和控制標(biāo)志。條件標(biāo)志(6位)根據(jù)算術(shù)邏輯運(yùn)算的結(jié)果由硬件自行設(shè)定,表示前一步操作(如加、減等)執(zhí)行以后算術(shù)邏輯單元所處的狀態(tài),后續(xù)操作可以根據(jù)這些狀態(tài)標(biāo)志進(jìn)行判斷;控制標(biāo)志(3位)由用戶通過(guò)指令進(jìn)行設(shè)定,用于對(duì)某一種特定的功能起控制作用(如屏蔽中斷等),反映了人們對(duì)微型計(jì)算機(jī)系統(tǒng)工作方式的可控制性。標(biāo)志寄存器如圖2-2所示。

圖2-2 標(biāo)志寄存器

標(biāo)志寄存器各標(biāo)志的含義如下:

① 條件標(biāo)志。條件標(biāo)志用于寄存程序運(yùn)行的狀態(tài)信息,這些標(biāo)志往往用作后續(xù)指令判斷的依據(jù)。條件標(biāo)志共6位,分別為CF、PF、AF、ZF、SF和OF。

? CF(Carry Flag):進(jìn)位標(biāo)志。反映在運(yùn)算結(jié)果的最高位有無(wú)進(jìn)位或借位。例如,做加法時(shí)最高位出現(xiàn)進(jìn)位或做減法時(shí)最高位出現(xiàn)借位,CF=1,否則CF=0。

? PF(Parity Flag):奇偶標(biāo)志。反映在運(yùn)算結(jié)果中“1”的個(gè)數(shù)的奇偶性,主要判斷數(shù)據(jù)傳送過(guò)程中是否出錯(cuò)。例如,當(dāng)運(yùn)算結(jié)果的低8位中l(wèi)的個(gè)數(shù)為偶數(shù)時(shí),PF=1,否則PF=0。

? AF(Auxiliary Carry Flag):輔助進(jìn)位標(biāo)志(半進(jìn)位標(biāo)志)。例如,在做字節(jié)加法時(shí)低四位有向高四位進(jìn)位,或者在做減法時(shí)低四位有向高四位借位,AF=1,否則AF=0。

通常用于對(duì)BCD算術(shù)運(yùn)算結(jié)果的調(diào)整。例如,11011000B+10101110B=110000110B,

其中,AF=1,CF=1。

? ZF(Zero Flag):零標(biāo)志。當(dāng)運(yùn)算結(jié)果為0時(shí),ZF=1,否則ZF=0。

? SF(Sign Flag):符號(hào)標(biāo)志。當(dāng)運(yùn)算結(jié)果的最高位為1時(shí),SF=1,否則SF=0,即與運(yùn)算結(jié)果的最高位相同。

? OF(Overflow Flag):溢出標(biāo)志。反映運(yùn)算結(jié)果是否超出了帶符號(hào)數(shù)的表示范圍。若超出了表示范圍,即產(chǎn)生溢出,OF=1,否則OF=0。

OF溢出的判斷方法如下:

加法運(yùn)算中,若兩個(gè)加數(shù)的最高位為0,而和的最高位為1,則產(chǎn)生上溢出;若兩個(gè)加數(shù)的最高位為1,而和的最高位為0,則產(chǎn)生下溢出;兩個(gè)加數(shù)的最高位不相同時(shí),不可能產(chǎn)生溢出。減法運(yùn)算中,若被減數(shù)的最高位為0,減數(shù)的最高位為1,而差的最高位為1,則產(chǎn)生上溢出;若被減數(shù)的最高位為1,減數(shù)的最高位為0,而差的最高位為0,則產(chǎn)生下溢出;被減數(shù)及減數(shù)的最高位相同時(shí),不可能產(chǎn)生溢出。

如果進(jìn)行的運(yùn)算是帶符號(hào)數(shù)的運(yùn)算,則溢出標(biāo)志恰好能夠反映運(yùn)算結(jié)果是否超出了8位或16位帶符號(hào)數(shù)所能表示的范圍,即字節(jié)運(yùn)算大于127或小于-128時(shí),字運(yùn)算大于32 767或小于-32 768時(shí),OF=1,否則OF=0。

例2-1 將十六進(jìn)制數(shù)5439H和356AH相加,并說(shuō)明其標(biāo)志狀態(tài)。

兩正數(shù)相加(補(bǔ)碼相加),結(jié)果為負(fù)數(shù),顯然運(yùn)算產(chǎn)生了溢出,即超出了機(jī)器所能表示的范圍(15位數(shù)值位最多只能表示32 767=215-1),故OF=1;運(yùn)算結(jié)果最高位為1,故SF=1;運(yùn)算結(jié)果本身不為0,故ZF=0;運(yùn)算結(jié)果的低8位中1的個(gè)數(shù)為偶數(shù),故PF=1;運(yùn)算結(jié)果的最高位沒(méi)有向前產(chǎn)生進(jìn)位,故CF=0;運(yùn)算過(guò)程中低4位向高4位產(chǎn)生了進(jìn)位,故AF=1。

一般情況下,在某些操作之后,才對(duì)其中某個(gè)標(biāo)志進(jìn)行檢查,并不是每次運(yùn)算后所有的標(biāo)志都會(huì)改變。

② 控制標(biāo)志??刂茦?biāo)志共有3位,分別為TF、IF和DF。

? TF(Trap Flag):陷阱標(biāo)志(單步標(biāo)志、跟蹤標(biāo)志)。當(dāng)TF=1時(shí),每執(zhí)行一條用戶程序指令后自動(dòng)產(chǎn)生陷阱,將使8086/8088微處理器進(jìn)入單步中斷處理程序。TF=0時(shí),用戶程序會(huì)連續(xù)不斷地執(zhí)行,不會(huì)產(chǎn)生單步中斷。

? IF(Interrupt-enable Flag):中斷允許標(biāo)志。若IF=1,則微處理器可以響應(yīng)可屏蔽中斷,否則就不能響應(yīng)可屏蔽中斷。

? DF(Direction Flag):方向標(biāo)志。用于串處理指令中控制串處理的方向。若DF=1,則串操作指令的地址修改為自動(dòng)減量方向,每次操作后變址寄存器SI、DI自動(dòng)減量,因此處理方向由高地址向低地址方向進(jìn)行,否則為自動(dòng)增量方向。該標(biāo)志由方向控制指令STD或CLD設(shè)置或清除。

6)EU控制電路

EU控制電路用于實(shí)現(xiàn)EU內(nèi)部控制,主要功能為從指令隊(duì)列緩沖器中去除指令,并對(duì)指令進(jìn)行譯碼,產(chǎn)生各種控制信號(hào),控制各部件的協(xié)同工作,完成指令的執(zhí)行過(guò)程。

2. 總線接口單元(BIU)

BIU負(fù)責(zé)微處理器與存儲(chǔ)器、I/O設(shè)備之間數(shù)據(jù)、地址、狀態(tài)及控制信息的傳送。BIU由段寄存器(DS、CS、ES、SS)、16位指令指針寄存器(簡(jiǎn)稱IP,它指向下一條要取出的指令代碼)、20位地址加法器(用來(lái)產(chǎn)生20位地址)和6字節(jié)(8088微處理器為4字節(jié))指令隊(duì)列緩沖器和總線控制邏輯等組成。

1)段寄存器

訪問(wèn)存儲(chǔ)器的物理地址由段地址和段內(nèi)偏移地址兩部分組成。

段地址寄存器用來(lái)存放段地址,也稱段寄存器。BIU有4個(gè)段寄存器,分別為CS、DS、ES和SS。

微處理器可以通過(guò)4個(gè)段寄存器訪問(wèn)存儲(chǔ)器中4個(gè)不同的段(每段最大64KB)。4個(gè)段寄存器的具體含義如下所述。

(1)CS(代碼段寄存器)。CS存放當(dāng)前執(zhí)行程序(代碼)所在段的段地址。CS的內(nèi)容左移4位加上指令指針寄存器的內(nèi)容就是下一條要執(zhí)行的指令的地址。

(2)DS(數(shù)據(jù)段寄存器)。DS存放當(dāng)前使用數(shù)據(jù)的段地址。通常數(shù)據(jù)段用來(lái)存放各種數(shù)據(jù)。DS的內(nèi)容左移4位加上按指令中存儲(chǔ)器尋址方式計(jì)算出來(lái)的偏移地址,就是對(duì)數(shù)據(jù)段指定單元進(jìn)行讀/寫的地址。

(3)ES(附加段寄存器)。附加段經(jīng)常在字符串操作時(shí)作為目的區(qū)使用,ES存放附加段的段地址,DI存放目的區(qū)的偏移地址。

(4)SS(堆棧段寄存器)。SS存放當(dāng)前堆棧段的地址。堆棧是在存儲(chǔ)器中開辟的按后進(jìn)先出的原則組織的一個(gè)特別存儲(chǔ)區(qū)。在調(diào)用子程序時(shí),堆棧保留返回主程序的地址。對(duì)堆棧進(jìn)行操作(壓入或彈出)的地址由SS的內(nèi)容左移4位加上SP的內(nèi)容得到。

2)地址加法器

地址加法器利用邏輯地址計(jì)算20位物理地址,邏輯地址指程序員編寫程序使用的地址,一般指段地址和段內(nèi)偏移地址。8086微處理器可用20位地址尋址1MB的內(nèi)存空間,而微處理器內(nèi)部的寄存器都是16位的,因此需要由一個(gè)附加的機(jī)構(gòu)來(lái)計(jì)算出20位的物理地址,這個(gè)機(jī)構(gòu)就是20位的地址加法器。

3)指令指針寄存器

指令指針寄存器又稱程序計(jì)數(shù)器,它是一個(gè)16位寄存器。指令指針寄存器中存放當(dāng)前將要執(zhí)行的指令的有效地址,用來(lái)控制微處理器的指令執(zhí)行順序,它和CS一起可以確定當(dāng)前所要取的指令的內(nèi)存地址。順序執(zhí)行程序時(shí),微處理器每取一個(gè)指令字節(jié),指令指針寄存器自動(dòng)加1,指向下一個(gè)要讀取的字節(jié);當(dāng)指令指針寄存器單獨(dú)改變時(shí),會(huì)發(fā)生段內(nèi)的程序轉(zhuǎn)移;當(dāng)CS和指令指針寄存器同時(shí)改變時(shí),會(huì)產(chǎn)生段間的程序轉(zhuǎn)移。

4)指令隊(duì)列緩沖器

指令隊(duì)列緩沖器是一個(gè)與微處理器速度相匹配的高速緩沖寄存器。8086微處理器的指令隊(duì)列緩沖器為6字節(jié),8088微處理器的指令隊(duì)列緩沖器為4字節(jié),在EU執(zhí)行指令時(shí),BIU可從內(nèi)存中取出下一條或下幾條指令放到指令隊(duì)列緩沖器中,EU執(zhí)行完一條指令后,可立即執(zhí)行指令隊(duì)列緩沖器中的下一條指令。因此,取指令和執(zhí)行指令可以并行進(jìn)行。

5)總線控制邏輯

總線控制邏輯的功能是產(chǎn)生微處理器外部三總線(AB、DB、CB)的控制信號(hào),控制微處理器與其他部件交換數(shù)據(jù)、地址、狀態(tài)及控制信息。微處理器由總線控制邏輯驅(qū)動(dòng)地址信號(hào)和控制信號(hào),讀取內(nèi)存單元的指令或數(shù)據(jù)。取指令時(shí),送入指令隊(duì)列的隊(duì)尾,以備EU執(zhí)行。EU總是從指令隊(duì)列的隊(duì)首得到指令。BIU在EU執(zhí)行指令且不使用總線時(shí),不斷從存儲(chǔ)器順序讀取一條或多條指令,將指令隊(duì)列添滿。存取數(shù)據(jù)時(shí),總線控制邏輯控制從存儲(chǔ)器或I/O端口讀/寫數(shù)據(jù)。

3. BIU和EU的管理

在EU執(zhí)行指令的過(guò)程中,BIU始終根據(jù)指令指針寄存器提供的地址,從存放指令的存儲(chǔ)器中預(yù)先取出一串指令存放到指令隊(duì)列中。取來(lái)的指令在指令隊(duì)列中是按字節(jié)順序存放的,這樣EU不必等待BIU去取指令,即在EU執(zhí)行一條指令的同時(shí),BIU就可同時(shí)取下一條或多條指令,大大提高了微處理器的執(zhí)行效率。

在下面兩種情況下執(zhí)行取指令操作:一是當(dāng)指令隊(duì)列中出現(xiàn)兩個(gè)以上的指令字節(jié)為空時(shí),自動(dòng)執(zhí)行總線操作取指令;二是當(dāng)程序發(fā)生轉(zhuǎn)移時(shí),BIU執(zhí)行取指令操作,BIU在新的轉(zhuǎn)移地址處取得第一條指令,直接送到EU中去執(zhí)行,將隨后取來(lái)的指令重新填入指令隊(duì)列,沖掉轉(zhuǎn)移前放入指令隊(duì)列中的指令。

BIU和EU按以下流水線技術(shù)原則協(xié)調(diào)工作,共同完成要求的信息處理任務(wù)。

(1)每當(dāng)8086微處理器的指令隊(duì)列中有兩個(gè)空字節(jié)時(shí),BIU就會(huì)自動(dòng)把指令取到指令隊(duì)列中,其取指的順序是指令在程序中出現(xiàn)的前后順序。

(2)每當(dāng)EU準(zhǔn)備執(zhí)行一條指令時(shí),它會(huì)從BIU部件的指令隊(duì)列前部取出指令,然后用幾個(gè)時(shí)鐘周期去執(zhí)行指令。在執(zhí)行指令的過(guò)程中,如果必須訪問(wèn)內(nèi)存或I/O端口,那么EU就會(huì)請(qǐng)求BIU,進(jìn)入總線周期,完成訪問(wèn)內(nèi)存或I/O端口的讀寫操作;如果此時(shí)BIU正好處于空閑狀態(tài),會(huì)立即響應(yīng)EU的總線請(qǐng)求。

(3)當(dāng)指令隊(duì)列已滿,且EU又沒(méi)有總線訪問(wèn)請(qǐng)求時(shí),BIU便進(jìn)入空閑狀態(tài)。

(4)在執(zhí)行轉(zhuǎn)移指令、調(diào)用指令和返回指令時(shí),由于待執(zhí)行指令的順序發(fā)生了變化,指令隊(duì)列中已經(jīng)裝入的字節(jié)被自動(dòng)消除,因此BIU會(huì)接著向指令隊(duì)列裝入轉(zhuǎn)向的另一程序段中的指令代碼。

從上述動(dòng)作管理原則中可以看出,EU與BIU工作不是同步的,而是既相互獨(dú)立又相互配合的,8086微處理器可在執(zhí)行指令的同時(shí)進(jìn)行取指操作,也就是說(shuō),BIU與EU是并行工作方式,改變了以往計(jì)算機(jī)取指令、譯碼、執(zhí)行指令的串行工作方式,提高了工作效率。

主站蜘蛛池模板: 台江县| 昂仁县| 电白县| 临江市| 辽中县| 鱼台县| 渭源县| 姜堰市| 九龙县| 深州市| 汕头市| 红原县| 防城港市| 吴江市| 泽库县| 合川市| 肇东市| 江达县| 宜川县| 金塔县| 梧州市| 集安市| 玛沁县| 定州市| 恩平市| 宿州市| 乌海市| 霞浦县| 泾阳县| 体育| 通榆县| 上饶县| 常山县| 安徽省| 龙陵县| 玉环县| 原阳县| 兴海县| 多伦县| 肥乡县| 上高县|