《微型計(jì)算機(jī)原理》第2章 8086系統(tǒng)結(jié)構(gòu)_第1頁(yè)
《微型計(jì)算機(jī)原理》第2章 8086系統(tǒng)結(jié)構(gòu)_第2頁(yè)
《微型計(jì)算機(jī)原理》第2章 8086系統(tǒng)結(jié)構(gòu)_第3頁(yè)
《微型計(jì)算機(jī)原理》第2章 8086系統(tǒng)結(jié)構(gòu)_第4頁(yè)
《微型計(jì)算機(jī)原理》第2章 8086系統(tǒng)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩109頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第2章8086系統(tǒng)結(jié)構(gòu)

2.18086CPU結(jié)構(gòu)

2.28086CPU的引腳及其功能

2.38086存儲(chǔ)器組織

2.48086系統(tǒng)配置

8086是Intel系列的16位微處理器。使用HMOS工藝制造,芯片上集成了2.9萬(wàn)個(gè)晶體管,用單一的+5V電源供電,封裝在標(biāo)準(zhǔn)的40引腳雙列直插式管殼內(nèi),時(shí)鐘頻率5MHz

10MHz。

8086有16條數(shù)據(jù)總線,可以處理8位或16位數(shù)據(jù)。有20條地址總線,可以直接尋址1M(220)字節(jié)的存儲(chǔ)單元和64K個(gè)I/O端口。在8086推出后不久,為方便原8位機(jī)用戶,Intel公司很快推出了8088微處理器,其指令系統(tǒng)與8086完全兼容,CPU內(nèi)部結(jié)構(gòu)仍為16位,但外部數(shù)據(jù)總線是8位的,這樣設(shè)計(jì)的目的主要是為了與原有的8位外圍接口芯片兼容。并以8088為CPU組成了IBMPC、PC/XT等準(zhǔn)16位微型計(jì)算機(jī),由于其性能價(jià)格比高,很快占領(lǐng)了市場(chǎng)。8086微處理器

8086/8088微處理器是Intel公司推出的第三代CPU芯片,它們的內(nèi)部結(jié)構(gòu)基本相同,都采用16位結(jié)構(gòu)進(jìn)行操作及存儲(chǔ)器尋址,但外部性能有所差異,兩種處理器都封裝在相同的40腳雙列直插組件中。

Intel公司同期推出的Intel8088微處理器是一種準(zhǔn)16位微處理器,其內(nèi)部寄存器,內(nèi)部操作等均按16位處理器設(shè)計(jì),與Intel8086微處理器基本上相同,不同的是其對(duì)外的數(shù)據(jù)線只有8位,目的是為了方便地與8位I/O接口芯片相兼容。8088微處理器2.18086CPU結(jié)構(gòu)2.1.18086CPU的內(nèi)部結(jié)構(gòu)2.1.2寄存器結(jié)構(gòu)8086CPU可分為兩部分,即總線接口部件BIU(BusInterfaceUnit)和執(zhí)行部件EU(ExecutionUnit)。8086微處理器的組成:總線接口部件(BIU):組成:①段寄存器(DS、CS、ES、SS);

②16位指令指針寄存器IP(指向下一條要取出的指令代碼);

③20位地址加法器(用來(lái)產(chǎn)生20位地址);

④6字節(jié)(8088為4字節(jié))指令隊(duì)列緩沖器;

⑤總線控制邏輯。功能:負(fù)責(zé)從內(nèi)存中取指令,送入指令隊(duì)列,實(shí)現(xiàn)CPU與存儲(chǔ)器和I/O接口之間的數(shù)據(jù)傳送。執(zhí)行部件(EU)組成:①ALU(算術(shù)邏輯單元);

②通用寄存器(AX、BX、CX、DX);

③專用寄存器(BP、SP、SI、DI);

④標(biāo)志寄存器(PSW);

⑤EU控制系統(tǒng)。功能:負(fù)責(zé)分析指令和執(zhí)行指令。1.總線接口部件BIU

總線接口部件BIU的功能是負(fù)責(zé)完成CPU與存儲(chǔ)器或I/O設(shè)備之間的數(shù)據(jù)傳送。具體任務(wù)是:①指令隊(duì)列出現(xiàn)空字節(jié)(8088CPU1個(gè)空字節(jié),8086CPU2個(gè)空字節(jié))時(shí),從內(nèi)存取出后續(xù)指令。BIU取指令時(shí),并不影響EU的執(zhí)行,兩者并行工作,大大提高了CPU的執(zhí)行速度。②EU需要從內(nèi)存或外設(shè)端口讀取操作數(shù)時(shí),根據(jù)EU給出的地址從內(nèi)存或外設(shè)端口讀取數(shù)據(jù)供EU使用。③EU的運(yùn)算結(jié)果、數(shù)據(jù)或控制命令等由BIU送往指定的內(nèi)存單元或外設(shè)端口。

總線接口部件BIU

總線接口部件BIU內(nèi)包括:

4個(gè)16位段寄存器:代碼段寄存器CS、數(shù)據(jù)段寄存器DS、堆棧段寄存器SS和附加數(shù)據(jù)段寄存器ES;

1個(gè)16位的指令指針寄存器IP(InstructionPointer);

1個(gè)20位地址加法器;

1個(gè)6字節(jié)指令隊(duì)列緩沖器;

1個(gè)與EU通訊的內(nèi)部寄存器以及總線控制電路等。8086CPU內(nèi)部結(jié)構(gòu)框圖

BIU和EU按以下流水線技術(shù)原則協(xié)調(diào)工作,共同完成所要求的任務(wù):①每當(dāng)8086的指令隊(duì)列中有兩個(gè)空字節(jié),BIU就會(huì)自動(dòng)把指令取到指令隊(duì)列中。其取指的順序是按指令在程序中出現(xiàn)的前后順序。②每當(dāng)EU準(zhǔn)備執(zhí)行一條指令時(shí),它會(huì)從BIU部件的指令隊(duì)列前部取出指令的代碼,然后用幾個(gè)時(shí)鐘周期去執(zhí)行指令。在執(zhí)行指令的過程中,如果必須訪問存儲(chǔ)器或者I/O端口,那么EU就會(huì)請(qǐng)求BIU,進(jìn)入總線周期,完成訪問內(nèi)存或者I/O端口的操作;如果此時(shí)BIU正好處于空閑狀態(tài),會(huì)立即響應(yīng)EU的總線請(qǐng)求。如BIU正將某個(gè)指令字節(jié)取到指令隊(duì)列中,則BIU將首先完成這個(gè)取指令的總線周期,然后再去響應(yīng)EU發(fā)出的訪問總線的請(qǐng)求。③當(dāng)指令隊(duì)列已滿,且EU又沒有總線訪問請(qǐng)求時(shí),BIU便進(jìn)入空閑狀態(tài)。④在執(zhí)行轉(zhuǎn)移指令、調(diào)用指令和返回指令時(shí),由于待執(zhí)行指令的順序發(fā)生了變化,則指令隊(duì)列中已經(jīng)裝入的字節(jié)被自動(dòng)消除,BIU會(huì)接著往指令隊(duì)列裝入轉(zhuǎn)向的另一程序段中的指令代碼。BIU和EU的動(dòng)作協(xié)調(diào)原則BIU和EU的動(dòng)作協(xié)調(diào)原則

將8086CPU分成兩個(gè)獨(dú)立的功能部件使二者能夠并行工作,把取指令工作和分析指令、執(zhí)行指令工作重疊進(jìn)行,從而提高CPU的工作效力,加快指令的執(zhí)行速度。指令隊(duì)列可以被看成是一個(gè)特殊的RAM,它的工作原理是"先進(jìn)先出",寫入的指令只能存放在隊(duì)列尾,讀出的指令是隊(duì)列頭存放的指令。EU和BIU之間就是通過指令隊(duì)列聯(lián)系起來(lái),多數(shù)情況下,BIU在不停地向隊(duì)列寫入指令,而EU每執(zhí)行完一條指令后,就向隊(duì)列讀取下一條指令。二者的動(dòng)作既獨(dú)立,又協(xié)調(diào)。段寄存器8086CPU的地址引腳有20根,能提供20位的地址信息,可直接對(duì)1M個(gè)存儲(chǔ)單元進(jìn)行訪問,但CPU內(nèi)部可用來(lái)提供地址信息的寄存器都是16位的,那么如何用16位寄存器實(shí)現(xiàn)20位地址的尋址呢?8086/8088采用了段結(jié)構(gòu)的內(nèi)存管理的方法。將指令代碼和數(shù)據(jù)分別存儲(chǔ)在代碼段、數(shù)據(jù)段、堆棧段、附加數(shù)據(jù)段中,這些段的段地址分別由段寄存器CS、DS、SS、ES提供,而代碼或數(shù)據(jù)在段內(nèi)的偏移地址則由有關(guān)寄存器或立即數(shù)給出。指令指針寄存器

指令指針寄存器IP用來(lái)存放下一條要讀取的指令在代碼段中的偏移地址。IP在程序運(yùn)行中能自動(dòng)加1修正,從而使其始終存放的是下一條要讀取的指令在代碼段的偏移地址。由于CS和IP的內(nèi)容決定了程序的執(zhí)行順序,因此程序員不能直接用賦值指令對(duì)其內(nèi)容進(jìn)行修改。20位地址加法器8086/8088CPU在對(duì)存儲(chǔ)單元進(jìn)行訪問以讀取指令或讀/寫操作數(shù)時(shí),必須在地址總線上提供20位的地址信息,以便選中對(duì)應(yīng)的存儲(chǔ)單元。CPU提供的用來(lái)對(duì)存儲(chǔ)單元進(jìn)行訪問的20位地址是由BIU中的地址加法器產(chǎn)生的。存儲(chǔ)器中每個(gè)存儲(chǔ)單元的地址可有以下兩種表示方式:邏輯地址和物理地址。邏輯地址其表達(dá)形式為“段地址:段內(nèi)偏移地址”。段內(nèi)偏移地址又稱為“有效地址EA(EffectiveAddress)。在讀指令時(shí),段地址由代碼段寄存器CS提供,當(dāng)前要讀取指令在代碼段中的偏移地址由指令指針寄存器IP提供;在讀取或存儲(chǔ)操作數(shù)時(shí),根據(jù)具體操作,段地址由DS、ES或SS提供,段內(nèi)偏移地址由指令給出。物理地址CPU與存儲(chǔ)器進(jìn)行數(shù)據(jù)交換時(shí)在地址總線上提供的20位地址信息稱為物理地址。當(dāng)由IP提供或由EU根據(jù)指令所提供尋址方式計(jì)算出尋址單元的16位段內(nèi)偏移地址后,把該偏移地址和段寄存器內(nèi)容左移四位后(相當(dāng)于乘以10H)得到的段基址(段內(nèi)第一個(gè)存儲(chǔ)單元的物理地址)同時(shí)送到BIU中的地址加法器,形成一個(gè)20位的物理地址,從而實(shí)現(xiàn)對(duì)存儲(chǔ)單元的訪問。由邏輯地址求物理地址的公式為:

物理地址=段地址

10H+段內(nèi)偏移地址

物理地址的形成指令隊(duì)列緩沖器8086的指令隊(duì)列有6個(gè)字節(jié),8088的指令隊(duì)列有4個(gè)字節(jié)。對(duì)8086而言,當(dāng)指令隊(duì)列出現(xiàn)2個(gè)空字節(jié),對(duì)8088而言,指令隊(duì)列出現(xiàn)1個(gè)空字節(jié)時(shí),BIU就自動(dòng)執(zhí)行一次取指令周期,將下一條要執(zhí)行的指令從內(nèi)存單元讀入指令隊(duì)列。它們采用“先進(jìn)先出”原則,按順序存放,并按順序取到EU中去執(zhí)行。指令隊(duì)列緩沖器當(dāng)EU執(zhí)行一條需要到存儲(chǔ)器或I/O端口讀取操作數(shù)的指令時(shí),BIU將在執(zhí)行完現(xiàn)行取指令的存儲(chǔ)器周期后的下一個(gè)存儲(chǔ)周期,對(duì)指令所指定的存儲(chǔ)單元或I/O端口進(jìn)行訪問,讀取的操作數(shù)經(jīng)BIU送EU進(jìn)行處理。當(dāng)EU執(zhí)行跳轉(zhuǎn)、子程序調(diào)用或返回指令時(shí),BIU就使指令隊(duì)列復(fù)位,并從指令給出的新地址開始取指令,新取的第1條指令直接經(jīng)指令隊(duì)列送EU執(zhí)行,隨后取來(lái)的指令將填入指令隊(duì)列緩沖器。指令隊(duì)列的引入使得EU和BIU可并行工作,即BIU在讀指令時(shí),并不影響EU單元執(zhí)行指令,EU單元可以連續(xù)不斷地直接從指令隊(duì)列中取到要執(zhí)行的指令代碼,從而減少了CPU為取指令而等待的時(shí)間,提高了CPU的利用率,加快了整機(jī)的運(yùn)行速度。2.執(zhí)行單元EU執(zhí)行單元EU不與系統(tǒng)外部直接相連,它的功能只是負(fù)責(zé)執(zhí)行指令。執(zhí)行的指令從BIU的指令隊(duì)列緩沖器中直接得到,執(zhí)行指令時(shí)若需要從存儲(chǔ)器或I/O端口讀取操作數(shù)時(shí),由EU向BIU發(fā)出請(qǐng)求,再由BIU對(duì)存儲(chǔ)器或I/O端口進(jìn)行訪問。EU由下列部件組成:1.16位算術(shù)邏輯單元(ALU):用于進(jìn)行算術(shù)和邏輯運(yùn)算。2.16位標(biāo)志寄存器FLAGS:用來(lái)存放CPU運(yùn)算的狀態(tài)特征和控制標(biāo)志。3.數(shù)據(jù)暫存寄存器:協(xié)助ALU完成運(yùn)算,暫存參加運(yùn)算的數(shù)據(jù)。4.

通用寄存器:包括4個(gè)16位數(shù)據(jù)寄存器AX、BX、CX、DX和4個(gè)16位指針與變址寄存器SP、BP與SI、DI。5.EU控制電路:它是控制、定時(shí)與狀態(tài)邏輯電路,接收從BIU中指令隊(duì)列取來(lái)的指令,經(jīng)過指令譯碼形成各種定時(shí)控制信號(hào),對(duì)EU的各個(gè)部件實(shí)現(xiàn)特定的定時(shí)操作。2.18086CPU結(jié)構(gòu)2.1.18086CPU的內(nèi)部結(jié)構(gòu)2.1.2寄存器結(jié)構(gòu)寄存器結(jié)構(gòu)位于CPU芯片內(nèi)部的寄存器的存取速度比存儲(chǔ)器快得多。寄存器可以用來(lái)存放運(yùn)算過程中所需要的操作數(shù)地址、操作數(shù)及中間結(jié)果。8086微處理器內(nèi)部包含有4組16位寄存器,它們分別是通用寄存器組、指針和變址寄存器、段寄存器、指令指針寄存器和標(biāo)志位寄存器。寄存器結(jié)構(gòu)通用寄存器

每一個(gè)數(shù)據(jù)寄存器都是16位寄存器可將高8位和低8位分別作為兩個(gè)獨(dú)立的8位寄存器用。注意:8086/8088CPU的14個(gè)寄存器除了這4個(gè)16位寄存器能分別當(dāng)作兩個(gè)8位寄存器來(lái)用之外,其它寄存器都不能如此使用。上述4個(gè)寄存器一般用來(lái)存放數(shù)據(jù),但它們各自都有自己的特定用途:AX(Accumulator)稱為累加器。用該寄存器存放運(yùn)算結(jié)果可使指令簡(jiǎn)化,提高指令的執(zhí)行速度。此外,所有的I/O指令都使用該寄存器與外設(shè)端口交換信息。

BX(Base)稱為基址寄存器。8086/8088CPU中有兩個(gè)基址寄存器BX和BP。BX用來(lái)存放操作數(shù)在內(nèi)存中數(shù)據(jù)段內(nèi)的偏移地址,BP用來(lái)存放操作數(shù)在堆棧段內(nèi)的偏移地址。CX(Counter)稱為計(jì)數(shù)器。在設(shè)計(jì)循環(huán)程序時(shí)使用該寄存器存放循環(huán)次數(shù),可使程序指令簡(jiǎn)化,有利于提高程序的運(yùn)行速度。DX(Data)稱為數(shù)據(jù)寄存器。在寄存器間接尋址的I/O指令中存放I/O端口地址;在做雙字長(zhǎng)乘除法運(yùn)算時(shí),DX與AX一起存放一個(gè)雙字長(zhǎng)操作數(shù),其中DX存放高16位數(shù)。指針和變址寄存器

SP:在堆棧操作中用來(lái)存放棧頂?shù)钠频刂?,指向堆棧的棧頂。BP:基地址指針寄存器。一般用來(lái)存放訪問內(nèi)存時(shí)的基地址。通常是與SS寄存器配對(duì)使用。

BX通常是與DS寄存器配對(duì)使用。SI、DI:變址寄存器

常常在變址尋址方式中作為索引指針。在字符串操作指令中,要求用SI作為源變址寄存器,存放源操作數(shù)的偏移地址;DI作為目標(biāo)變址寄存器,存放目標(biāo)操作數(shù)的偏移地址。段寄存器CS:代碼段的段基地址。它和指令指針I(yè)P一起決定下一條所要執(zhí)行指令的物理存儲(chǔ)地址。代碼段存放的是當(dāng)前執(zhí)行程序的指令代碼。DS:數(shù)據(jù)段的段基地址。數(shù)據(jù)段通常用來(lái)存放數(shù)據(jù)和字符。ES:附加段的段基地址。附加段主要用在字符串操作時(shí)作為目標(biāo)地址使用。SS:堆棧段的段基地址。堆棧用于存放當(dāng)前暫時(shí)不用但又需要保存的數(shù)據(jù)和地址。堆棧是存儲(chǔ)器中開辟的按先進(jìn)后出原則組織的一個(gè)特殊存儲(chǔ)區(qū),主要用于調(diào)用子程序或執(zhí)行中斷服務(wù)程序時(shí)保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)。指令指針寄存器IP

用來(lái)存放下一條要執(zhí)行指令的偏移地址。

CPU取指令時(shí)總是以CS的內(nèi)容為段基地址,以IP為段內(nèi)偏移地址。

當(dāng)CPU從CS段偏移地址為(IP)的內(nèi)存單元中取出指令代碼的一個(gè)字節(jié)后,IP自動(dòng)加1,指向指令代碼的下一個(gè)字節(jié)。

遇到過程調(diào)用、轉(zhuǎn)移及返回等指令時(shí),系統(tǒng)將根據(jù)程序確定新的IP的內(nèi)容,使其不再加1。用戶程序不能直接訪問IP(指令的操作數(shù)不能是IP)。FLAGS:標(biāo)志寄存器,也稱程序狀態(tài)字,是一個(gè)16位寄存器,但只使用了其中的9位,包括6個(gè)狀態(tài)標(biāo)志位和3個(gè)控制標(biāo)志位。(1)狀態(tài)標(biāo)志:反映指令執(zhí)行后運(yùn)算結(jié)果特征.CF(進(jìn)位標(biāo)志):CF=D7CY或D15CY

執(zhí)行算術(shù)運(yùn)算指令后,結(jié)果的最高位(字節(jié)時(shí)為D7CY,字時(shí)為D15CY)向更高位產(chǎn)生進(jìn)位,則CF=1,否則CF=0。該標(biāo)志主要用于多字節(jié)加、減運(yùn)算。

例:3FH+0B4H0BFH+0B4H0011111110111111+10110100+1011010011110011;CF=0101110011;CF=1例:

38H+49H

00111000

+01001001

10000001;

AF=1;若視為BCD運(yùn)算,則應(yīng)調(diào)整.

PF(奇偶校驗(yàn)標(biāo)志):PF=D7

D0

運(yùn)算結(jié)果的低8位中“1”的個(gè)數(shù)為偶數(shù),則PF=1,否則PF=0。主要用于檢測(cè)數(shù)據(jù)通信中是否發(fā)生錯(cuò)誤。

AF(輔助進(jìn)位標(biāo)志):AF=D3CY

字節(jié)運(yùn)算中,低4位向高4位有進(jìn)位或借位時(shí),則AF=1,否則AF=0。用于BCD碼運(yùn)算的調(diào)整指令中。ZF(零標(biāo)志):運(yùn)算結(jié)果為0,則ZF=1,否則ZF=0。SF(符號(hào)標(biāo)志)SF=D7或D15

運(yùn)算結(jié)果為正數(shù),則SF=0,為負(fù)數(shù),則SF=1。

如:3FH+0B4H=0F3H的SF=1

而:0BFH+B4H=173H的SF=0

OF(溢出標(biāo)志):OF=D7CY

D6CY或D15CY

D14CY當(dāng)運(yùn)算結(jié)果超出了機(jī)器所能表示的范圍時(shí),則OF=1,否則OF=0。如:3FH+0B4H=0F3H中OF=0而:0BFH+0B4H=173H中OF=1注意:實(shí)際上機(jī)器把所有數(shù)都當(dāng)無(wú)符號(hào)數(shù)運(yùn)算,把結(jié)果都當(dāng)符號(hào)數(shù)來(lái)設(shè)置標(biāo)志。以上6個(gè)標(biāo)志為指令執(zhí)行后的結(jié)果標(biāo)志,可作為控制轉(zhuǎn)移的條件。例:假設(shè)執(zhí)行一條加法指令,計(jì)算5439H+476AH后各狀態(tài)標(biāo)志位的狀態(tài)為何?解:

0101010000111001+010001110110l0101001101110100011則執(zhí)行這條加法指令后標(biāo)志寄存器的狀態(tài)為:CF=0,PF=1,AF=1,ZF=0,SF=1,OF=1。(2)控制標(biāo)志----控制CPU的狀態(tài)。DF(方向標(biāo)志):控制字符串操作中地址的步進(jìn)方向.DF=0,地址增址;DF=1,地址減址.專門用于DF的指令:CLDDF=0;STDDF=1IF(中斷允許標(biāo)志):控制CPU是否開中斷。IF=1,允許CPU響應(yīng)外部可屏蔽中斷。IF=0,禁止CPU響應(yīng)外部可屏蔽中斷。兩條關(guān)于IF的專用指令:CLIIF=0;STIIF=1

TF(跟蹤標(biāo)志):TF=1,CPU處于單步工作方式,即CPU每執(zhí)行一條指令就自動(dòng)地發(fā)生一個(gè)內(nèi)部中斷,CPU轉(zhuǎn)去執(zhí)行一個(gè)中斷程序,常用于程序調(diào)試,又稱為陷阱標(biāo)志。TF=0,CPU正常執(zhí)行程序。第2章8086系統(tǒng)結(jié)構(gòu)

2.18086CPU結(jié)構(gòu)

2.28086CPU的引腳及其功能

2.38086存儲(chǔ)器組織

2.48086系統(tǒng)配置

8086/8088CPU在與存儲(chǔ)器或I/O端口交換數(shù)據(jù)時(shí)需要啟動(dòng)一個(gè)總線周期。按照數(shù)據(jù)的傳送方向來(lái)分,總線周期可分為“讀”總線周期(CPU從存儲(chǔ)器或I/O端口讀取數(shù)據(jù))和“寫”總線周期(CPU將數(shù)據(jù)寫入存儲(chǔ)器或I/O端口)。

8086/8088CPU基本的總線周期由4個(gè)時(shí)鐘周期組成。

時(shí)鐘周期是CPU的基本時(shí)間計(jì)量單位,由CPU主頻決定,如8086的主頻為5MHz,1個(gè)時(shí)鐘周期就是200ns。一個(gè)時(shí)鐘周期又稱為一個(gè)T狀態(tài),因此基本總線周期用T1、T2、T3、T4表示。總線周期8086/8088基本總線周期

圖(a)在T1狀態(tài)CPU把要讀/寫的存儲(chǔ)單元的地址或I/O端口的地址放到地址總線上。若是“寫”總線周期,CPU從T2起到T4,把數(shù)據(jù)送到總線上,并寫入存儲(chǔ)器單元或I/O端口;若是“讀”總線周期,CPU則從T3起到T4從總線上接收數(shù)據(jù);T2狀態(tài)時(shí)總線浮空,允許CPU有個(gè)緩沖時(shí)間把輸出地址的寫方式轉(zhuǎn)換成輸入數(shù)據(jù)的讀方式。圖a

圖(b)是具有空閑狀態(tài)的總線周期。如果在一個(gè)總線周期之后不立即執(zhí)行下一個(gè)總線周期,即CPU此時(shí)執(zhí)行的指令不需要對(duì)存儲(chǔ)器或I/O端口進(jìn)行訪問,且目前指令隊(duì)列滿而不需要到內(nèi)存中讀指令,那么系統(tǒng)總線就處于空閑狀態(tài),即執(zhí)行空閑周期。在空閑周期,盡管CPU對(duì)總線進(jìn)行空操作,但在CPU內(nèi)部,仍然進(jìn)行著有效的操作,如執(zhí)行某個(gè)運(yùn)算、在內(nèi)部寄存器之間傳送數(shù)據(jù)等。圖b

圖(c)是具有等待狀態(tài)的總線周期。在T3狀態(tài)結(jié)束之前,CPU測(cè)試READY信號(hào)線:若READY為有效的高電平,則說明數(shù)據(jù)已準(zhǔn)備好,可進(jìn)入T4狀態(tài);若READY為低電平,則說明數(shù)據(jù)沒有準(zhǔn)備好,CPU在T3之后插入1個(gè)或多個(gè)等待周期TW,直到檢測(cè)到READY為有效高電平后,CPU會(huì)自動(dòng)脫離TW而進(jìn)入T4狀態(tài)。這種延長(zhǎng)總線周期的措施允許系統(tǒng)使用低速的存儲(chǔ)器芯片。圖c

8086/8088芯片的引腳應(yīng)包括20根地址線,16根(8086)或8根(8088)數(shù)據(jù)線以及控制線、狀態(tài)線、電源線和地線等,若每個(gè)引腳只傳送一種信息,那么芯片的引腳將會(huì)太多,不利于芯片的封裝,因此,8086/8088CPU的部分引腳定義了雙重功能,采用了分時(shí)復(fù)用的方式,即在不同的時(shí)刻分別傳送地址或數(shù)據(jù)信息等。此外,8086/8088CPU可以工作在兩種模式(最小模式和最大模式),最小模式用于單機(jī)系統(tǒng),系統(tǒng)中所需要的控制信號(hào)由8086直接提供;最大模式用于多處理機(jī)系統(tǒng),系統(tǒng)中所需要的控制信號(hào)由總線控制器8288提供。這樣,24腳~31腳的8條引腳在兩種工作模式中具有不同的功能。8086CPU的引腳及其功能8086/8088CPU引腳

8086CPU引腳

8086CPU引腳按功能可分為三大類:電源線和地線,地址/數(shù)據(jù)引腳以及控制引腳。

1.電源線和地線電源線VCC(第40引腳):輸入,接入

10%單一+5V電源。地線GND(引腳1和20):輸入,兩條地線均應(yīng)接地。

2.地址/數(shù)據(jù)(狀態(tài))引腳

地址/數(shù)據(jù)分時(shí)復(fù)用引腳AD15

AD0(AddressData,三態(tài)):引腳39及引腳2

16,分時(shí)輸出低16位地址信號(hào)及進(jìn)行數(shù)據(jù)信號(hào)的輸入/輸出,傳送地址時(shí)單向輸出,傳送數(shù)據(jù)時(shí)雙向輸入或輸出。

地址狀態(tài)分時(shí)復(fù)用引腳A19/S6

A16/S3(Address/Status,三態(tài)):引腳35

38,輸出、三態(tài)總線,分時(shí)輸出地址的高4位及狀態(tài)信息,其中S6為0用以指示8086/8088CPU當(dāng)前與總線連通;S5為1表明8086/8088CPU可以響應(yīng)可屏蔽中斷;S4、S3共有四個(gè)組合狀態(tài),用以指明當(dāng)前使用的段寄存器,00—ES,01—SS,10—CS,11—DS。

CPU部分引腳的三態(tài)性所謂三態(tài)是指總線輸出可以有三個(gè)狀態(tài):高電平、低電平和高阻狀態(tài)。當(dāng)處于高阻狀態(tài)時(shí),該總線在邏輯上與所有連接負(fù)載斷開。

3.控制引腳

(1)NMI(Non-MaskableInterrupt):引腳17,非屏蔽中斷請(qǐng)求信號(hào),輸入,上升沿觸發(fā)。此請(qǐng)求不受標(biāo)志寄存器FLAGS中中斷允許標(biāo)志位IF狀態(tài)的影響,只要此信號(hào)一出現(xiàn),在當(dāng)前指令執(zhí)行結(jié)束后立即進(jìn)行中斷處理。

(2)INTR(InterruptRequest)

:引腳18,可屏蔽中斷請(qǐng)求信號(hào),輸入,高電平有效。CPU在每個(gè)指令周期的最后一個(gè)時(shí)鐘周期檢測(cè)該信號(hào)是否有效,若此信號(hào)有效,表明有外設(shè)提出了中斷請(qǐng)求,這時(shí)若IF=1,則當(dāng)前指令執(zhí)行完后立即響應(yīng)中斷;若IF=0,則中斷被屏蔽,外設(shè)發(fā)出的中斷請(qǐng)求將不被響應(yīng)。程序員可通過指令STI或CLI將IF標(biāo)志位置1或清零。

(3)CLK(Clock):引腳19,系統(tǒng)時(shí)鐘,輸入。它通常與8284A時(shí)鐘發(fā)生器的時(shí)鐘輸出端相連。該時(shí)鐘信號(hào)有效高電平與時(shí)鐘周期的比為1∶3。

(4)?RESET:引腳21,復(fù)位信號(hào),輸入,高電平有效。復(fù)位信號(hào)使處理器馬上結(jié)束現(xiàn)行操作,對(duì)處理器內(nèi)部寄存器進(jìn)行初始化。8086/8088要求復(fù)位脈沖寬度不得小于4個(gè)時(shí)鐘周期。復(fù)位后,內(nèi)部寄存器的狀態(tài)如下表所示。系統(tǒng)正常運(yùn)行時(shí),RESET保持低電平。復(fù)位后內(nèi)部寄存器的狀態(tài)

內(nèi)部寄存器狀態(tài)標(biāo)志寄存器IPCSDSSSES指令隊(duì)列緩沖器其余寄存器0000H0000HFFFFH0000H0000H0000H空0000H

(5)?READY:引腳22,數(shù)據(jù)“準(zhǔn)備好”信號(hào)線,輸入。它實(shí)際上是所尋址的存儲(chǔ)器或I/O端口發(fā)來(lái)的數(shù)據(jù)準(zhǔn)備就緒信號(hào),高電平有效。

CPU在每個(gè)總線周期的T3狀態(tài)對(duì)READY引腳采樣,若為高電平,說明數(shù)據(jù)已準(zhǔn)備好;若為低電平,說明數(shù)據(jù)還沒有準(zhǔn)備好,CPU在T3狀態(tài)之后自動(dòng)插入一個(gè)或幾個(gè)等待狀態(tài)TW,直到READY變?yōu)楦唠娖?,才能進(jìn)入T4狀態(tài),完成數(shù)據(jù)傳送過程,從而結(jié)束當(dāng)前總線周期。

(6)

:引腳23,等待測(cè)試信號(hào),輸入。當(dāng)CPU執(zhí)行WAIT指令時(shí),每隔5個(gè)時(shí)鐘周期對(duì)引腳進(jìn)行一次測(cè)試。若為高電平,CPU就仍處于空轉(zhuǎn)狀態(tài)進(jìn)行等待,直到引腳變?yōu)榈碗娖?,CPU結(jié)束等待狀態(tài),執(zhí)行下一條指令,以使CPU與外部硬件同步。

(7)(Read):引腳32,讀控制信號(hào),輸出。當(dāng)=0時(shí),表示將要執(zhí)行一個(gè)對(duì)存儲(chǔ)器或I/O端口的讀操作。到底是從存儲(chǔ)單元還是從I/O端口讀取數(shù)據(jù),取決于M/(8086)或IO/(8088)信號(hào)。

(8)BHE/S7(BusHighEnable/Status):引腳34,高8位數(shù)據(jù)總線允許/狀態(tài)復(fù)用引腳,輸出。BHE在總線周期的T1狀態(tài)時(shí)輸出,當(dāng)該引腳輸出為低電平時(shí),表示當(dāng)前數(shù)據(jù)總線上高8位數(shù)據(jù)有效。該引腳和地址引腳A0配合表示當(dāng)前數(shù)據(jù)總線的使用情況,如下表所示,S7

在8086中未被定義,暫作備用狀態(tài)信號(hào)線。BHE與地址引腳A0編碼的含義A0數(shù)據(jù)總線的使用情況0011010116位字傳送(偶地址開始的兩個(gè)存儲(chǔ)器單元的內(nèi)容)在數(shù)據(jù)總線高8位(D15

D8)和奇地址單元間進(jìn)行字節(jié)傳送在數(shù)據(jù)總線低8位(D7

D0)和偶地址單元間進(jìn)行字節(jié)傳送無(wú)效

(9)MN/MX(Minimum/Maximummodecontrol):引腳33,最小/最大方式控制信號(hào),輸入。MN/MX引腳接高電平時(shí),8086/8088CPU工作在最小方式,在此方式下,全部控制信號(hào)由CPU提供;MN/MX引腳接低電平時(shí),8086/8088工作在最大方式,這時(shí),CPU發(fā)出的控制信號(hào)經(jīng)8288總線控制器進(jìn)行變換和組合,從而使總線的控制功能更加完善。

8086最小工作方式及引腳24

31的定義在最小方式下,第24

31引腳的功能如下:

(1)INTA(InterruptAcknowledge):引腳24,中斷響應(yīng)信號(hào),輸出。該信號(hào)用于對(duì)外設(shè)的中斷請(qǐng)求(經(jīng)INTR引腳送入CPU)作出響應(yīng)。INTA實(shí)際上是兩個(gè)連續(xù)的負(fù)脈沖信號(hào),第一個(gè)負(fù)脈沖通知外設(shè)接口,它發(fā)出的中斷請(qǐng)求已被允許;外設(shè)接口接到第2個(gè)負(fù)脈沖后,將中斷類型號(hào)放到數(shù)據(jù)總線上,以便CPU根據(jù)中斷類型號(hào)到內(nèi)存的中斷向量表中找出對(duì)應(yīng)中斷的中斷服務(wù)程序入口地址,從而轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。

(2)?ALE(AddressLatchEnable):引腳25,地址鎖存允許信號(hào),輸出。它是8086/8088提供給地址鎖存器的控制信號(hào),高電平有效。在任何一個(gè)總線周期的T1狀態(tài),ALE均為高電平,以表示當(dāng)前地址/數(shù)據(jù)復(fù)用總線上輸出的是地址信息,ALE由高到低的下降沿把地址裝入地址鎖存器中。

(3)DEN(DataEnable):引腳26,數(shù)據(jù)允許信號(hào),輸出。當(dāng)使用數(shù)據(jù)總線收發(fā)器時(shí),該信號(hào)為收發(fā)器的OE端提供了一個(gè)控制信號(hào),該信號(hào)決定是否允許數(shù)據(jù)通過數(shù)據(jù)總線收發(fā)器。DEN為高電平時(shí),收發(fā)器在收或發(fā)兩個(gè)方向上都不能傳送數(shù)據(jù),當(dāng)DEN為低電平時(shí),允許數(shù)據(jù)通過數(shù)據(jù)總線收發(fā)器。

(4)?DT/R(DataTransmit/Receive):引腳27,數(shù)據(jù)發(fā)送/接收信號(hào),輸出。該信號(hào)用來(lái)控制數(shù)據(jù)的傳送方向。當(dāng)其為高電平時(shí),8086CPU通過數(shù)據(jù)總線收發(fā)器進(jìn)行數(shù)據(jù)發(fā)送;當(dāng)其為低電平時(shí),則進(jìn)行數(shù)據(jù)接收。在DMA方式,它被浮置為高阻狀態(tài)。

(5)?M/IO(Memory/InputandOutput):引腳28,存儲(chǔ)器I/O端口控制信號(hào),輸出。該信號(hào)用來(lái)區(qū)分CPU是進(jìn)行存儲(chǔ)器訪問還是I/O端口訪問。當(dāng)該信號(hào)為高電平時(shí),表示CPU正在和存儲(chǔ)器進(jìn)行數(shù)據(jù)傳送;如為低電平,表明CPU正在和輸入/輸出設(shè)備進(jìn)行數(shù)據(jù)傳送。在DMA方式,該引腳被浮置為高阻狀態(tài)。

(6)?WR(Write):引腳29,寫信號(hào),輸出。WR有效時(shí),表示CPU當(dāng)前正在進(jìn)行存儲(chǔ)器或I/O寫操作,到底是哪一種寫操作,取決于M/IO信號(hào)。在DMA方式,該引腳被浮置為高阻狀態(tài)。

(7)?HOLD(Holdrequest):引腳31,總線保持請(qǐng)求信號(hào),輸入。當(dāng)8086/8088CPU之外的總線主設(shè)備要求占用總線時(shí),通過該引腳向CPU發(fā)一個(gè)高電平的總線保持請(qǐng)求信號(hào)。

(8)?HLDA(HoldAcknowledge):引腳30,總線保持響應(yīng)信號(hào),輸出。當(dāng)CPU接收到HOLD信號(hào)后,這時(shí)如果CPU允許讓出總線,就在當(dāng)前總線周期完成時(shí),在T4狀態(tài)發(fā)出高電平有效的HLDA信號(hào)給以響應(yīng)。此時(shí),CPU讓出總線使用權(quán),發(fā)出HOLD請(qǐng)求的總線主設(shè)備獲得總線的控制權(quán)。

8086最大工作方式及引腳24

31的定義

當(dāng)MN/MX接低電平時(shí),系統(tǒng)工作于最大方式,即多處理器方式。比較最大方式和最小方式系統(tǒng)結(jié)構(gòu)圖可以看出,最大方式和最小方式有關(guān)地址總線和數(shù)據(jù)總線的電路部分基本相同,即都需要地址鎖存器及數(shù)據(jù)總線收發(fā)器。而控制總線的電路部分有很大差別。在最小工作方式下,控制信號(hào)可直接從8086/8088CPU得到,不需要外加電路。最大方式是多處理器工作方式,需要協(xié)調(diào)主處理器和協(xié)處理器的工作。因此,8086/8088的部分引腳需要重新定義,控制信號(hào)不能直接從8086/8088CPU引腳得到,需要外加8288總線控制器,通過它對(duì)CPU發(fā)出的控制信號(hào)(S0,S1,S2)進(jìn)行變換和組合,以得到對(duì)存儲(chǔ)器和I/O端口的讀寫控制信號(hào)和對(duì)地址鎖存器8282及對(duì)總線收發(fā)器8286的控制信號(hào),使總線的控制功能更加完善。

在最大方式下,第24

31引腳的功能如下:

(1)?QS1、QS0(InstructionQueueStatus):引腳24、25,指令隊(duì)列狀態(tài)信號(hào),輸出。QS1、QS0兩個(gè)信號(hào)電平的不同組合指明了8086/8088內(nèi)部指令隊(duì)列的狀態(tài),其代碼組合對(duì)應(yīng)的含義如下表所示。表3.6QS1、QS0的代碼組合對(duì)應(yīng)的含義QS1QS0含義00無(wú)操作01從指令隊(duì)列的第一字節(jié)中取走代碼10隊(duì)列為空11除第一字節(jié)外,還取走了后續(xù)字節(jié)中的代碼

(2)?S2、S1、S0(BusCycleStatus):引腳26、27、28,總線周期狀態(tài)信號(hào),輸出。低電平有效的三個(gè)狀態(tài)信號(hào)連接到總線控制器8288的輸入端,8288對(duì)這些信號(hào)進(jìn)行譯碼后產(chǎn)生內(nèi)存及I/O端口的讀寫控制信號(hào)。下表給出了這三個(gè)狀態(tài)信號(hào)的代碼組合使8288產(chǎn)生的控制信號(hào)及其對(duì)應(yīng)的操作。

S2、S1、S0的代碼組合對(duì)應(yīng)的操作

8288產(chǎn)生的控制信號(hào)對(duì)應(yīng)操作000

發(fā)中斷響應(yīng)信號(hào)

001

讀I/O端口

010

寫I/O端口01

1

無(wú)

暫停

10

0

取指令

101

讀內(nèi)存110

寫內(nèi)存11

1無(wú)

無(wú)源狀態(tài)

(3)?LOCK(Lock):引腳29,總線封鎖信號(hào),輸出。當(dāng)LOCK為低電平時(shí),系統(tǒng)中其他總線主設(shè)備就不能獲得總線的控制權(quán)而占用總線。LOCK信號(hào)由指令前綴LOCK產(chǎn)生,LOCK指令后面的一條指令執(zhí)行完后,便撤消了LOCK信號(hào)。另外,在DMA期間,LOCK被浮空而處于高阻狀態(tài)。

(4)RQ/GT1、RQ/GT0(Request/Grant):引腳30、31,總線請(qǐng)求信號(hào)(輸入)/總線請(qǐng)求允許信號(hào)(輸出)。這兩個(gè)信號(hào)可供8086/8088以外的2個(gè)總線主設(shè)備向8086/8088發(fā)出使用總線的請(qǐng)求信號(hào)RQ(相當(dāng)于最小方式時(shí)的HOLD信號(hào))。而8086/8088在現(xiàn)行總線周期結(jié)束后讓出總線,發(fā)出總線請(qǐng)求允許信號(hào)GT(相當(dāng)于最小方式的HLDA信號(hào)),此時(shí),外部總線主設(shè)備便獲得了總線的控制權(quán)。其中RQ/GT0比RQ/GT1的優(yōu)先級(jí)高。

8288總線控制器還提供了其他一些控制信號(hào):MRDC(MemoryReadCommand)、MWTC(MemoryWriteCommand)、IORC(I/OReadCommand)、IOWC(I/OWriteCommand)以及INTA等,它們分別是存儲(chǔ)器與I/O的讀寫命令以及中斷響應(yīng)信號(hào)。另外,還有AMWC與AIOWC兩個(gè)信號(hào),它們分別表示提前寫內(nèi)存命令和提前寫I/O命令,其功能分別與MWTC和IOWC一樣,只是它們由8288提前一個(gè)時(shí)鐘周期發(fā)出信號(hào),這樣,一些較慢的存儲(chǔ)器和外設(shè)將得到一個(gè)額外的時(shí)鐘周期去執(zhí)行寫入操作。8086和8088CPU的不同(1)8088的指令隊(duì)列長(zhǎng)度是4個(gè)字節(jié),指令隊(duì)列中只要出現(xiàn)一個(gè)空閑字節(jié)時(shí),BIU就會(huì)自動(dòng)訪問存儲(chǔ)器,取指令來(lái)補(bǔ)充指令隊(duì)列;(2)8088CPU中,BIU的總線控制電路與外部交換數(shù)據(jù)的總線寬度是8位,總線控制電路與專用寄存器組之間的數(shù)據(jù)總線寬度也是8位,而EU的內(nèi)部總線是16位,這樣,對(duì)16位數(shù)的存儲(chǔ)器讀/寫操作需要兩個(gè)讀/寫周期才可以完成;(3)8088外部數(shù)據(jù)總線只有8條,所以分時(shí)復(fù)用的地址/數(shù)據(jù)總線為AD7~AD0;而AD15~AD8成為僅傳遞地址信息的A15~A8。.(4)8088和8086的第28引腳的功能是相同的,但有效電平的高低定義不同。8088的第28引腳為IO/M,當(dāng)該引腳為低電平時(shí),表明8088正在進(jìn)行存儲(chǔ)器操作;當(dāng)該引腳為高電平時(shí),表明8088正在進(jìn)行I/O操作。8086的第28引腳為M/IO,電平與8088正好相反,此舉是為了與8085總線結(jié)構(gòu)兼容。(5)8088中,只能進(jìn)行8位數(shù)據(jù)傳輸,BHE信號(hào)不需要了,改為SS0,與DT/R和IO/M一起決定最小模式中的總線周期操作。第2章8086系統(tǒng)結(jié)構(gòu)

2.18086CPU結(jié)構(gòu)

2.28086CPU的引腳及其功能

2.38086存儲(chǔ)器和I/O組織

2.48086系統(tǒng)配置

2.38086存儲(chǔ)器和I/O組織

2.3.18086/8088存儲(chǔ)空間

2.3.2存儲(chǔ)器的段結(jié)構(gòu)

2.3.3邏輯地址與物理地址

2.3.4堆棧操作

2.3.58086/8088存儲(chǔ)器結(jié)構(gòu)

2.3.68086/8088的I/O組織1.8086/8088存儲(chǔ)空間

8086/8088有20條地址線,可直接對(duì)1M個(gè)存儲(chǔ)單元進(jìn)行訪問。每個(gè)存儲(chǔ)單元存放一個(gè)字節(jié)型數(shù)據(jù),且每個(gè)存儲(chǔ)單元都有一個(gè)20位的地址,這1M個(gè)存儲(chǔ)單元對(duì)應(yīng)的地址為00000H~FFFFFH,如下圖所示。

一個(gè)存儲(chǔ)單元中存放的信息稱為該存儲(chǔ)單元的內(nèi)容。如圖所示,00001H單元的內(nèi)容為9FH,記為:(00001H)=9FH。數(shù)據(jù)在存儲(chǔ)器中的存放若存放的是字型數(shù)據(jù)(16位二進(jìn)制數(shù)),則將字的低位字節(jié)存放在低地址單元,高位字節(jié)存放在高地址單元。如從地址0011FH開始的兩個(gè)連續(xù)單元中存放一個(gè)字型數(shù)據(jù),則該數(shù)據(jù)為DF46H,記為:(0011FH)=DF46H。若存放的是雙字型數(shù)據(jù)(32位二進(jìn)制數(shù),這種數(shù)一般作為地址指針,其低位字是被尋址地址的偏移量,高位字是被尋址地址所在段的段地址),這種類型的數(shù)據(jù)要占用連續(xù)的4個(gè)存儲(chǔ)單元,同樣,低字節(jié)存放在低地址單元,高字節(jié)存放在高地址單元。如從地址E800AH開始的連續(xù)4個(gè)存儲(chǔ)單元中存放了一個(gè)雙字型數(shù)據(jù),則該數(shù)據(jù)為66A65E65H,記為:(E800AH)=66A65E65H。

2.存儲(chǔ)器的段結(jié)構(gòu)

8086/8088CPU中有關(guān)可用來(lái)存放地址的寄存器如IP、SP等都是16位的,故只能直接尋址64KB。為了對(duì)1M個(gè)存儲(chǔ)單元進(jìn)行管理,8086/8088采用了段結(jié)構(gòu)的存儲(chǔ)器管理方法。

8086/8088將整個(gè)存儲(chǔ)器分為許多邏輯段,每個(gè)邏輯段的容量小于或等于64KB,允許它們?cè)谡麄€(gè)存儲(chǔ)空間中浮動(dòng),各個(gè)邏輯段之間可以緊密相連,也可以互相重疊。用戶編寫的程序(包括指令代碼和數(shù)據(jù))被分別存儲(chǔ)在代碼段、數(shù)據(jù)段、堆棧段和附加數(shù)據(jù)段中,這些段的段地址分別存儲(chǔ)在段寄存器CS、DS、SS和ES中,而指令或數(shù)據(jù)在段內(nèi)偏移地址可由對(duì)應(yīng)的地址寄存器或立即數(shù)給出,如下表所示。序號(hào)內(nèi)存訪問類型默認(rèn)段寄存器可指定段寄存器段內(nèi)偏移地址來(lái)源1取指令CS無(wú)IP2堆棧操作SS無(wú)SP3源串DSCS、ES、SSSI4目的串ES無(wú)DI5BP用作基址尋址SSCS、ES、DS按尋址方式計(jì)算得到的有效地址6一般數(shù)據(jù)存取DSCS、ES、SS按尋址方式計(jì)算得到的有效地址8086對(duì)段地址與偏移地址的指定如果從存儲(chǔ)器中讀取指令,則段地址來(lái)源于代碼段寄存器CS,偏移地址來(lái)源于指令指針寄存器IP。如果從存儲(chǔ)器讀/寫操作數(shù),則段地址通常由數(shù)據(jù)段寄存器DS提供(必要時(shí)可通過指令前綴實(shí)現(xiàn)段超越,將段地址指定為由CS、ES或SS提供),偏移地址則要根據(jù)指令中所給出的尋址方式確定,這時(shí),偏移地址通常由寄存器BX、SI、DI以及立即數(shù)等提供,這類偏移地址也被稱為“有效地址”(EA)。如果操作數(shù)是通過基址寄存器BP尋址的,則此時(shí)操作數(shù)所在段的段地址由堆棧段段寄存器SS提供(必要時(shí)也可指定為CS、SS或ES)。如果使用堆棧操作指令(PUSH或POP)進(jìn)行進(jìn)棧或出棧操作,以保護(hù)斷點(diǎn)或現(xiàn)場(chǎng),則段地址來(lái)源于堆棧段寄存器SS,偏移地址來(lái)源于堆棧指針寄存器SP

。如果執(zhí)行的是字符串操作指令,則源字符串所在段的段地址由數(shù)據(jù)段寄存器DS提供(必要時(shí)可指定為CS、ES或SS),偏移地址由源變址寄存器SI提供;目的字符串所在段的段地址由附加數(shù)據(jù)段寄存器ES提供,偏移地址由目的變址寄存器DI提供。以上這些存儲(chǔ)器操作時(shí)段地址和偏移地址的約定是由系統(tǒng)設(shè)計(jì)時(shí)事先已規(guī)定好的,編寫程序時(shí)必須遵守這些約定。

3.邏輯地址與物理地址由于采用了存儲(chǔ)器分段管理方式,8086/8088CPU在對(duì)存儲(chǔ)器進(jìn)行訪問時(shí),根據(jù)當(dāng)前的操作類型(取指令或存取操作數(shù))以及讀取操作數(shù)時(shí)指令所給出的尋址方式,CPU就可確定要訪問的存儲(chǔ)單元所在段的段地址以及該單元在本段內(nèi)的偏移地址。我們把通過段地址和偏移地址來(lái)表示的存儲(chǔ)單元的地址稱為邏輯地址,記為:段地址:偏移地址。

CPU在對(duì)存儲(chǔ)單元進(jìn)行訪問時(shí),必須在20位的地址總線上提供一個(gè)20位的地址信息,以便選中所要訪問的存儲(chǔ)單元。我們把CPU對(duì)存儲(chǔ)器進(jìn)行訪問時(shí)實(shí)際尋址所使用的20位地址稱為物理地址。

物理地址是由CPU內(nèi)部總線接口單元BIU中的地址加法器根據(jù)邏輯地址產(chǎn)生的。由邏輯地址形成20位物理地址的方法為:

段地址

10H+偏移地址。下圖給出了存儲(chǔ)器分段示意。如果當(dāng)前的(IP)=1000H,那么,下一條要讀取的指令所在存儲(chǔ)單元的物理地址為:

(CS)

10H+(IP)=1000H

10H+1000H=11000H

如果某操作數(shù)在數(shù)據(jù)段內(nèi)的偏移地址為8000H,則該操作數(shù)所在存儲(chǔ)單元的物理地址為

(DS)

10H+8000H=2A0FH

10H+8000H=320F0H存儲(chǔ)器分段示意圖例:某可執(zhí)行程序?yàn)?KB,已知CS=1063H,IP=0000H,求該程序的末地址(物理地址)。末地址=長(zhǎng)度-1=2K-1=211-1=0800H-1=07FFH

解:程序存放在

1063:0000

1063:07FF所以末地址為:10630H+07FFH=10E2FH

4.堆棧操作

堆棧是在存儲(chǔ)器中開辟的一個(gè)特定區(qū)域。堆棧在存儲(chǔ)器中所處的段稱為堆棧段,和其他邏輯段一樣,它可在1MB的存儲(chǔ)空間中浮動(dòng),其容量可達(dá)64KB。開辟堆棧的目的主要有以下兩點(diǎn):

(1)存放指令操作數(shù)(變量)。此時(shí),由于操作數(shù)在堆棧段中,對(duì)操作數(shù)進(jìn)行訪問時(shí),段地址自然由堆棧段寄存器SS來(lái)提供,操作數(shù)在該段內(nèi)的偏移地址由基址寄存器BP來(lái)提供。

(2)保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)。此為堆棧的主要功能。所謂保護(hù)斷點(diǎn),是指主程序在調(diào)用子程序或執(zhí)行中斷服務(wù)程序時(shí),為了使執(zhí)行完子程序或中斷服務(wù)程序后能順利返回主程序,必須把斷點(diǎn)處的有關(guān)信息(如代碼段寄存器CS的內(nèi)容(需要時(shí))、指令指針寄存器IP的內(nèi)容以及標(biāo)志寄存器FLAGS的內(nèi)容等)壓入堆棧,執(zhí)行完子程序或中斷服務(wù)程序后按“先進(jìn)后出”的原則將其彈出堆棧,以恢復(fù)有關(guān)寄存器的內(nèi)容,從而使主程序能從斷點(diǎn)處繼續(xù)往下執(zhí)行。

保護(hù)現(xiàn)場(chǎng)是指將在子程序或中斷服務(wù)程序中用到的寄存器的內(nèi)容壓入堆棧,在返回主程序之前再將其彈出堆棧,以恢復(fù)寄存器原有的內(nèi)容,從而使其返回后主程序能繼續(xù)正確執(zhí)行。保護(hù)現(xiàn)場(chǎng)的工作要求程序員在編寫子程序或中斷服務(wù)程序時(shí)使用進(jìn)棧指令PUSH和出棧指令POP完成。

進(jìn)棧和出棧操作的過程在執(zhí)行進(jìn)棧和出棧操作時(shí),段地址由堆棧段寄存器SS提供,段內(nèi)偏移地址由堆棧指針寄存器SP提供,SP始終指向棧頂,當(dāng)堆棧空時(shí),SP指向棧底。如下圖,設(shè)在存儲(chǔ)器中開辟了100H個(gè)存儲(chǔ)單元的堆棧段,當(dāng)前(SS)=2000H,堆??諘r(shí)(SP)=0100H,即此時(shí)SP指向棧底。由于PUSH和POP指令要求操作數(shù)為字型數(shù)據(jù),因此,每進(jìn)行一次進(jìn)棧操作,SP值減2,每進(jìn)行一次出棧操作,SP值加2。在進(jìn)棧和出棧操作過程中,SP始終指向棧頂。進(jìn)棧與出棧操作示意圖堆棧的概念由若干個(gè)連續(xù)存儲(chǔ)單元組成的一個(gè)存儲(chǔ)器區(qū)操作時(shí)遵循先進(jìn)后出原則主要用于暫存中斷和子程序調(diào)用時(shí)的現(xiàn)場(chǎng)數(shù)據(jù)及返回地址。堆棧操作的特點(diǎn)

①操作只能在棧頂進(jìn)行,入棧和出棧都必須是雙字節(jié)數(shù)據(jù)。進(jìn)行一次入棧操作,SP減2;進(jìn)行一次出棧操作,SP加2;

②操作遵循“先進(jìn)后出(FILO)”的原則。最后壓人堆棧的數(shù)據(jù)會(huì)最先被彈出。

5.8086/8088存儲(chǔ)器結(jié)構(gòu)

8086的1MB存儲(chǔ)空間實(shí)際上分為兩個(gè)512KB的存儲(chǔ)體,又稱存儲(chǔ)庫(kù),分別叫高位庫(kù)和低位庫(kù)。

低位庫(kù)與數(shù)據(jù)總線D7

D0相連,該庫(kù)中每個(gè)存儲(chǔ)單元的地址為偶數(shù)地址;高位庫(kù)與數(shù)據(jù)總線D15

D8相連,該庫(kù)中每個(gè)存儲(chǔ)單元的地址為奇數(shù)地址。地址總線A19

A1可同時(shí)對(duì)高、低位庫(kù)的存儲(chǔ)單元尋址,A0和BHE用于對(duì)庫(kù)的選擇,分別連接到庫(kù)選擇端SEL上。當(dāng)A0=0時(shí),選擇偶數(shù)地址的低位庫(kù);當(dāng)BHE=0時(shí),選擇奇數(shù)地址的高位庫(kù);當(dāng)兩者均為0時(shí),則同時(shí)選中高低位庫(kù)。利用A0和BHE這兩個(gè)控制信號(hào),既可實(shí)現(xiàn)對(duì)兩個(gè)庫(kù)進(jìn)行讀/寫(即16位數(shù)據(jù)),也可單獨(dú)對(duì)其中一個(gè)庫(kù)進(jìn)行讀/寫(8位數(shù)據(jù))。8086存儲(chǔ)器高低位庫(kù)的連接8086存儲(chǔ)器高低位庫(kù)選擇

A0

對(duì)應(yīng)操作

0

0

同時(shí)訪問兩個(gè)存儲(chǔ)體,讀/寫一個(gè)字的信息

0

1

只訪問奇地址存儲(chǔ)體,讀/寫高字節(jié)的信息

1

0

只訪問偶地址存儲(chǔ)體,讀/寫低字節(jié)的信息

1

1

無(wú)操作

在8086系統(tǒng)中,存儲(chǔ)器這種分體結(jié)構(gòu)對(duì)用戶來(lái)說是透明的。當(dāng)用戶需要訪問存儲(chǔ)器中某個(gè)存儲(chǔ)單元,以便進(jìn)行字節(jié)型數(shù)據(jù)的讀/寫操作時(shí),指令中的地址碼經(jīng)變換后得到20位的物理地址,該地址可能是偶地址,也可能是奇地址。如果是偶地址(A0=0),BHE=1,這時(shí)由A0選定偶地址存儲(chǔ)體,通過A19

A1從偶地址存儲(chǔ)體中選中某個(gè)單元,并啟動(dòng)該存儲(chǔ)體,讀/寫該存儲(chǔ)單元中一個(gè)字節(jié)信息,通過數(shù)據(jù)總線的低8位傳送數(shù)據(jù),如下圖(a)所示;如果是奇地址(A0)=1,則偶地址存儲(chǔ)體不會(huì)被選中,也就不會(huì)啟動(dòng)它。為了啟動(dòng)奇地址存儲(chǔ)體,系統(tǒng)將自動(dòng)產(chǎn)生BHE=0,作為奇地址存儲(chǔ)體的選體信號(hào),與A19

A1一起選定奇地址存儲(chǔ)體中的某個(gè)存儲(chǔ)單元,并讀/寫該單元中的一個(gè)字節(jié)信息,通過數(shù)據(jù)總線的高8位傳送數(shù)據(jù),如下圖(b)所示。可以看出,對(duì)于字節(jié)型數(shù)據(jù),不論它存放在偶地址的低位庫(kù),還是奇地址的高位庫(kù),都可通過一個(gè)總線周期完成數(shù)據(jù)的讀/寫操作。

如果用戶需要訪問存儲(chǔ)器中某兩個(gè)存儲(chǔ)單元,以便進(jìn)行字型數(shù)據(jù)的讀/寫時(shí),可分兩種情況來(lái)討論。一種情況是用戶要訪問的是從偶地址開始的兩個(gè)連續(xù)存儲(chǔ)單元(即字的低字節(jié)在偶地址單元,高字節(jié)在奇地址單元),這種存放稱為規(guī)則存放,這樣存放的字稱為規(guī)則字。對(duì)于規(guī)則存放的字可通過一個(gè)總線周期完成讀/寫操作,這時(shí)A0=0,BHE=0;另一種情況是用戶要訪問的是從奇地址開始的兩個(gè)存儲(chǔ)單元(即字的低字節(jié)在奇地址單元,高字節(jié)在偶地址單元),這種存放稱為非規(guī)則存放,這樣存放的字稱為非規(guī)則字,對(duì)于非規(guī)則存放的字需要通過兩個(gè)總線周期才能完成讀/寫操作,即第一次訪問存儲(chǔ)器時(shí)讀/寫奇地址單元中的字節(jié),第二次訪問存儲(chǔ)器時(shí)讀/寫偶地址單元中的字節(jié)。顯然,為了加快程序的運(yùn)行速度,希望字型數(shù)據(jù)在存儲(chǔ)器中規(guī)則存放。從8086存儲(chǔ)器的偶數(shù)和奇數(shù)地址讀字節(jié)和字讀偶地址單元中的字節(jié);(b)讀奇地址單元中的字節(jié);(c)讀偶地址單元中的字;(d)讀奇地址單元中的字在8088系統(tǒng)中,可直接尋址的存儲(chǔ)空間同樣也是1MB,但其存儲(chǔ)器的結(jié)構(gòu)與8086有所不同,它的1?MB存儲(chǔ)空間同屬于一個(gè)單一的存儲(chǔ)體,即存儲(chǔ)體為1M

8位。它與總線之間的連接方式很簡(jiǎn)單,其20根地址線A19

A0與8根數(shù)據(jù)線分別與8088CPU對(duì)應(yīng)的地址線和數(shù)據(jù)線相連。

8088CPU每訪問一次存儲(chǔ)器只能讀/寫一個(gè)字節(jié)信息,因此在8088系統(tǒng)的存儲(chǔ)器中,字型數(shù)據(jù)需要兩次訪問存儲(chǔ)器才能完成讀/寫操作。68086/8088的I/O組織

8086/8088系統(tǒng)和外部設(shè)備之間是通過I/O接口電路來(lái)聯(lián)系的。每個(gè)I/O接口都有一個(gè)或幾個(gè)端口。在微機(jī)系統(tǒng)中每個(gè)端口分配一個(gè)地址號(hào),稱為端口地址。一個(gè)端口通常為I/O接口電路內(nèi)部的一個(gè)寄存器或一組寄存器。

8086/8088CPU用地址總線的低16位作為對(duì)8位I/O端口的尋址線,所以8086/8088系統(tǒng)可訪問的8位I/O端口有65536(64K)個(gè)。兩個(gè)編號(hào)相鄰的8位端口可以組成一個(gè)16位的端口。一個(gè)8位的I/O設(shè)備既可以連接在數(shù)據(jù)總線的高8位上,也可以連接到數(shù)據(jù)總線的低8位上。一般為了使數(shù)據(jù)/地址總線的負(fù)載平衡,希望接在數(shù)據(jù)/地址總線高8位和低8位的設(shè)備數(shù)目最好相等。當(dāng)一個(gè)I/O設(shè)備接在數(shù)據(jù)總線的低8位(AD7

AD0)上時(shí),這個(gè)I/O設(shè)備所包括的所有端口地址都將是偶數(shù)地址(A0=0);若一個(gè)I/O設(shè)備接在數(shù)據(jù)總線的高8位(AD15

AD8)上時(shí),那么該設(shè)備包含的所有端口地址都是奇數(shù)地址(A0=1)。如果某種特殊I/O設(shè)備既可使用偶地址又可使用奇地址時(shí),此時(shí)必須將A0和BHE兩個(gè)信號(hào)結(jié)合起來(lái)作為I/O設(shè)備的選擇線。

8086CPU對(duì)I/O設(shè)備的讀/寫操作與對(duì)存儲(chǔ)器的讀/寫操作類似。

當(dāng)CPU與偶地址的I/O設(shè)備實(shí)現(xiàn)16位數(shù)據(jù)的存取操作時(shí),可在一個(gè)總線周期內(nèi)完成。

當(dāng)CPU與奇地址的I/O設(shè)備實(shí)現(xiàn)16位數(shù)據(jù)的存取操作時(shí),要占用兩個(gè)總線周期才能完成。

第2章8086系統(tǒng)結(jié)構(gòu)

2.18086CPU結(jié)構(gòu)

2.28086CPU的引腳及其功能

2.38086存儲(chǔ)器組織

2.48086系統(tǒng)配置2.48086系統(tǒng)配置

2.4.1最小模式系統(tǒng)

2.4.2最大模式系統(tǒng)

2.4.38086CPU時(shí)序8086具有兩種工作模式最小模式:CPU僅支持由少量設(shè)備組成的單微處理器系統(tǒng)而不支持多處理器結(jié)構(gòu),小系統(tǒng)所需要的全部控制信號(hào)都由CPU直接提供。最大模式:CPU不直接提供讀/寫命令等控制信號(hào),而是將

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論