微型計(jì)算機(jī)原理及應(yīng)用:第2章 80x86系列結(jié)構(gòu)微處理器與8086
-
資源ID:190956512
資源大?。?span id="ndx5pdd" class="font-tahoma">1.63MB
全文頁數(shù):62頁
- 資源格式: PPT
下載積分:40積分
快捷下載

會(huì)員登錄下載
微信登錄下載
微信掃一掃登錄
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。
|
微型計(jì)算機(jī)原理及應(yīng)用:第2章 80x86系列結(jié)構(gòu)微處理器與8086
微型計(jì)算機(jī)原理及應(yīng)用微型計(jì)算機(jī)原理及應(yīng)用2.1 80 x862.1 80 x86系列微處理器是系列微處理器是80868086的延伸的延伸2.2 80862.2 8086的功能結(jié)構(gòu)的功能結(jié)構(gòu)2.3 80862.3 8086微處理器的執(zhí)行環(huán)境微處理器的執(zhí)行環(huán)境第第2 2章章 80 x8680 x86系列結(jié)構(gòu)微處理器系列結(jié)構(gòu)微處理器與與8086808622.1 x862.1 x86系列微處理器是系列微處理器是80868086的延伸的延伸2.1.1 2.1.1 80868086功能的擴(kuò)展功能的擴(kuò)展2.1.2 2.1.2 80868086性能的提高性能的提高32.1.1 80862.1.1 8086功能的擴(kuò)展功能的擴(kuò)展1.1.從從1616位擴(kuò)展為位擴(kuò)展為3232位位80868086是是1616位微處理器。它的內(nèi)部寄存器的主體是位微處理器。它的內(nèi)部寄存器的主體是1616位的。位的。它的主要用于存放操作數(shù)的它的主要用于存放操作數(shù)的數(shù)據(jù)寄存器是數(shù)據(jù)寄存器是1616位的位的。它的主要。它的主要的用作為地址指針的指針寄存器也是的用作為地址指針的指針寄存器也是1616位的。依賴分段機(jī)制,位的。依賴分段機(jī)制,用用2020位段基地址加上位段基地址加上1616位的偏移量形成了位的偏移量形成了2020位的地址位的地址,可以可以尋址尋址1MB1MB的物理地址。的物理地址。用用1616位作為地址,它只能表示位作為地址,它只能表示64KB64KB,是一個(gè)十分小的地,是一個(gè)十分小的地址范圍,遠(yuǎn)遠(yuǎn)不能滿足應(yīng)用的需要。因而,于址范圍,遠(yuǎn)遠(yuǎn)不能滿足應(yīng)用的需要。因而,于19851985年,年,IntelIntel公司推出了第一個(gè)公司推出了第一個(gè)3232位的微處理器位的微處理器 -80386-80386,開創(chuàng),開創(chuàng)了微處理器的了微處理器的3232位時(shí)代。目前,計(jì)算機(jī)正從位時(shí)代。目前,計(jì)算機(jī)正從3232位向位向6464位轉(zhuǎn)移。位轉(zhuǎn)移。43232位,無論從能表示的數(shù)的范圍,還是能尋址的物理地位,無論從能表示的數(shù)的范圍,還是能尋址的物理地址,特別是能尋址的物理地址都極大的擴(kuò)展了。使得微處理址,特別是能尋址的物理地址都極大的擴(kuò)展了。使得微處理器能取代以前的所謂器能取代以前的所謂“大型機(jī)大型機(jī)”,能應(yīng)用于各種領(lǐng)域,從而,能應(yīng)用于各種領(lǐng)域,從而極大地促進(jìn)了計(jì)算機(jī)在各行各業(yè)中的應(yīng)用。極大地促進(jìn)了計(jì)算機(jī)在各行各業(yè)中的應(yīng)用。3232位地址能尋址位地址能尋址4GB4GB物理地址。到目前,仍遠(yuǎn)大于主流物理地址。到目前,仍遠(yuǎn)大于主流計(jì)算機(jī)的實(shí)際內(nèi)存配置,仍有廣闊的應(yīng)用余地。計(jì)算機(jī)的實(shí)際內(nèi)存配置,仍有廣闊的應(yīng)用余地。52.2.從實(shí)模式至保護(hù)模式從實(shí)模式至保護(hù)模式當(dāng)當(dāng)19811981年,年,IBMIBM公司剛推出公司剛推出IBM-PCIBM-PC時(shí),主頻是時(shí),主頻是5MHz5MHz,內(nèi),內(nèi)存是存是64KB-128KB64KB-128KB,沒有硬盤,只有單面單密度的軟盤,到了,沒有硬盤,只有單面單密度的軟盤,到了PC/XTPC/XT,才有,才有10MB10MB硬盤。在這樣的硬件資源下,采用的操作硬盤。在這樣的硬件資源下,采用的操作系統(tǒng)是系統(tǒng)是PC-DOSPC-DOS(MS-DOSMS-DOS)。這是單用戶、單任務(wù)的磁盤操作)。這是單用戶、單任務(wù)的磁盤操作系統(tǒng)。操作系統(tǒng)本身沒有程序隔離、沒有保護(hù)。這是系統(tǒng)。操作系統(tǒng)本身沒有程序隔離、沒有保護(hù)。這是DOSDOS遭遭受病毒泛濫的內(nèi)因。受病毒泛濫的內(nèi)因。隨著隨著PCPC機(jī)的大量普及,隨著硬件性能的迅速提高。要求機(jī)的大量普及,隨著硬件性能的迅速提高。要求有能保護(hù)操作系統(tǒng)核心軟件的多任務(wù)操作系統(tǒng)。為使這樣的有能保護(hù)操作系統(tǒng)核心軟件的多任務(wù)操作系統(tǒng)。為使這樣的操作系統(tǒng)能在微型計(jì)算機(jī)系統(tǒng)中應(yīng)用與普及,要求微處理器操作系統(tǒng)能在微型計(jì)算機(jī)系統(tǒng)中應(yīng)用與普及,要求微處理器本身為這樣的操作系統(tǒng)提供支持。于是,從本身為這樣的操作系統(tǒng)提供支持。于是,從8028680286開始,在開始,在8038680386中真正完善保護(hù)模式。在保護(hù)模式下,程序運(yùn)行于四中真正完善保護(hù)模式。在保護(hù)模式下,程序運(yùn)行于四個(gè)特權(quán)級(jí)。這樣,可以實(shí)現(xiàn)操作系統(tǒng)核心程序與應(yīng)用程序的個(gè)特權(quán)級(jí)。這樣,可以實(shí)現(xiàn)操作系統(tǒng)核心程序與應(yīng)用程序的嚴(yán)格的隔離。保護(hù)模式支持多任務(wù)機(jī)制,任務(wù)之間完全隔離。嚴(yán)格的隔離。保護(hù)模式支持多任務(wù)機(jī)制,任務(wù)之間完全隔離。63.3.片內(nèi)存儲(chǔ)管理單元片內(nèi)存儲(chǔ)管理單元(MMU)(MMU)3232位地址,可尋址位地址,可尋址4GB4GB物理地址。但大多數(shù)物理地址。但大多數(shù)PCPC機(jī)的物理機(jī)的物理內(nèi)存配置遠(yuǎn)小于內(nèi)存配置遠(yuǎn)小于4GB4GB。但應(yīng)用程序卻需要龐大的地址空間。但應(yīng)用程序卻需要龐大的地址空間。因此,在操作系統(tǒng)中提供了虛擬存儲(chǔ)器管理機(jī)制,而這要求因此,在操作系統(tǒng)中提供了虛擬存儲(chǔ)器管理機(jī)制,而這要求硬件支持。因而,在硬件支持。因而,在8038680386中提供了片內(nèi)的中提供了片內(nèi)的MMUMMU。提供了。提供了4K4K頁、頁、頁表等支持。頁表等支持。以上三點(diǎn)是以上三點(diǎn)是8038680386相對于相對于80868086的主要功能擴(kuò)展。的主要功能擴(kuò)展。4.4.浮點(diǎn)支持浮點(diǎn)支持工程應(yīng)用、圖形處理、科學(xué)計(jì)算等要求浮點(diǎn)支持(實(shí)數(shù)工程應(yīng)用、圖形處理、科學(xué)計(jì)算等要求浮點(diǎn)支持(實(shí)數(shù)運(yùn)算)。因此,自運(yùn)算)。因此,自8048680486芯片開始,在芯片開始,在x86x86系列微處理器中集系列微處理器中集成了成了x87x87(及其增強(qiáng))浮點(diǎn)單元。(及其增強(qiáng))浮點(diǎn)單元。75.MMX5.MMX技術(shù)技術(shù)為支持多媒體技術(shù)的應(yīng)用,如音樂合成、語音合成。語為支持多媒體技術(shù)的應(yīng)用,如音樂合成、語音合成。語音識(shí)別、音頻和視頻壓縮(編碼)和解壓縮(譯碼)、音識(shí)別、音頻和視頻壓縮(編碼)和解壓縮(譯碼)、2D 2D 和和 3D 3D 圖形(包括圖形(包括 3D 3D 結(jié)構(gòu)映像)和流視頻等等。結(jié)構(gòu)映像)和流視頻等等。x86x86系列系列處理器中增加處理器中增加MMXMMX技術(shù)及相應(yīng)的指令。技術(shù)及相應(yīng)的指令。6.6.流流SIMDSIMD擴(kuò)展(擴(kuò)展(SSESSE)自自Pentium IIIPentium III處理器開始,在處理器開始,在x86x86系列微處理器中引進(jìn)系列微處理器中引進(jìn)了流了流SIMDSIMD(單指令多數(shù)據(jù))擴(kuò)展(單指令多數(shù)據(jù))擴(kuò)展(SSESSE)技術(shù)。)技術(shù)。SSESSE擴(kuò)展把由擴(kuò)展把由Intel MMXIntel MMX引進(jìn)的引進(jìn)的SIMDSIMD執(zhí)行模式擴(kuò)展為新的執(zhí)行模式擴(kuò)展為新的128128位位XMMXMM寄存器寄存器和能在包裝的單精度浮點(diǎn)數(shù)上執(zhí)行和能在包裝的單精度浮點(diǎn)數(shù)上執(zhí)行SIMDSIMD操作。操作。8奔騰奔騰4 4處理器又進(jìn)一步擴(kuò)展為流處理器又進(jìn)一步擴(kuò)展為流SIMDSIMD擴(kuò)展擴(kuò)展2 2(SSE2SSE2):):用用144144條新指令擴(kuò)展條新指令擴(kuò)展Intel MMXIntel MMX技術(shù)和技術(shù)和SSESSE擴(kuò)展,它包括擴(kuò)展,它包括支持:支持:128 128位位SIMDSIMD整數(shù)算術(shù)操作。整數(shù)算術(shù)操作。128 128位位SIMDSIMD雙精度浮點(diǎn)操作。雙精度浮點(diǎn)操作。128 128 位指令設(shè)計(jì)以支持媒體和科學(xué)應(yīng)用。由這些指令所位指令設(shè)計(jì)以支持媒體和科學(xué)應(yīng)用。由這些指令所用的向量操作數(shù)允許應(yīng)用程序在多個(gè)向量元素上并行操作。用的向量操作數(shù)允許應(yīng)用程序在多個(gè)向量元素上并行操作。元素能是整數(shù)(從字節(jié)至四字)或浮點(diǎn)數(shù)(單精度或雙精元素能是整數(shù)(從字節(jié)至四字)或浮點(diǎn)數(shù)(單精度或雙精度)。算術(shù)運(yùn)算產(chǎn)生有符號(hào)的、無符號(hào)的和度)。算術(shù)運(yùn)算產(chǎn)生有符號(hào)的、無符號(hào)的和/或混合的結(jié)果?;蚧旌系慕Y(jié)果。92.1.2 80862.1.2 8086性能的提高性能的提高x86x86系列系列芯片的發(fā)展的一個(gè)重要方面是提高性能。系列系列芯片的發(fā)展的一個(gè)重要方面是提高性能。1.1.利用流水線技術(shù)提高操作的并行性利用流水線技術(shù)提高操作的并行性提高性能的一個(gè)重要方面是利用超大規(guī)模集成電路的工提高性能的一個(gè)重要方面是利用超大規(guī)模集成電路的工藝與制造技術(shù)提高芯片的主頻。即減少一個(gè)時(shí)鐘周期的時(shí)間。藝與制造技術(shù)提高芯片的主頻。即減少一個(gè)時(shí)鐘周期的時(shí)間。提高性能的另一重要方面是縮短執(zhí)行指令的時(shí)鐘周期數(shù)。在提高性能的另一重要方面是縮短執(zhí)行指令的時(shí)鐘周期數(shù)。在80868086中,利用流水線把取指令與執(zhí)行指令重疊,減少了等待中,利用流水線把取指令與執(zhí)行指令重疊,減少了等待取指令的時(shí)間,從而使大部分指令的執(zhí)行為四個(gè)時(shí)鐘周期。取指令的時(shí)間,從而使大部分指令的執(zhí)行為四個(gè)時(shí)鐘周期。8038680386利用芯片內(nèi)由利用芯片內(nèi)由6 6個(gè)能并行操作的功能部件組成,從個(gè)能并行操作的功能部件組成,從而使執(zhí)行一條指令縮短為兩個(gè)時(shí)鐘周期。而使執(zhí)行一條指令縮短為兩個(gè)時(shí)鐘周期。108048680486將將8038680386處理器的指令譯碼和執(zhí)行部件擴(kuò)展成五級(jí)處理器的指令譯碼和執(zhí)行部件擴(kuò)展成五級(jí)流水線,進(jìn)一步增強(qiáng)了其并行處理能力,在五級(jí)流水線中最流水線,進(jìn)一步增強(qiáng)了其并行處理能力,在五級(jí)流水線中最多可有五條指令被同時(shí)執(zhí)行,每級(jí)都能在一個(gè)時(shí)鐘周期內(nèi)執(zhí)多可有五條指令被同時(shí)執(zhí)行,每級(jí)都能在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行一條指令,行一條指令,8048680486微處理器最快能夠在每個(gè)微處理器最快能夠在每個(gè)CPUCPU時(shí)鐘周期內(nèi)時(shí)鐘周期內(nèi)執(zhí)行一條指令。執(zhí)行一條指令。到了奔騰處理器增加了第二個(gè)執(zhí)行流水線以達(dá)到超標(biāo)量到了奔騰處理器增加了第二個(gè)執(zhí)行流水線以達(dá)到超標(biāo)量性能(兩個(gè)已知的流水線性能(兩個(gè)已知的流水線u u和和v v,一起工作能實(shí)現(xiàn)每個(gè)時(shí)鐘執(zhí),一起工作能實(shí)現(xiàn)每個(gè)時(shí)鐘執(zhí)行兩條指令)。行兩條指令)。Intel Pentium 4Intel Pentium 4處理器是第一個(gè)基于處理器是第一個(gè)基于Intel NetBurstIntel NetBurst微結(jié)構(gòu)的處理器。微結(jié)構(gòu)的處理器。Intel NetBurstIntel NetBurst微結(jié)構(gòu)是新的微結(jié)構(gòu)是新的32bit32bit微結(jié)微結(jié)構(gòu),它允許處理器能在比以前的構(gòu),它允許處理器能在比以前的X86X86系列處理器更高的時(shí)鐘系列處理器更高的時(shí)鐘速度和性能等級(jí)上進(jìn)行操作。速度和性能等級(jí)上進(jìn)行操作。Intel Pentium 4Intel Pentium 4處理器有快處理器有快速的執(zhí)行引擎、速的執(zhí)行引擎、HyperHyper流水線技術(shù)與高級(jí)的動(dòng)態(tài)執(zhí)行。使指流水線技術(shù)與高級(jí)的動(dòng)態(tài)執(zhí)行。使指令執(zhí)行的并行性進(jìn)一步提高,從而做到在一個(gè)時(shí)鐘周期中可令執(zhí)行的并行性進(jìn)一步提高,從而做到在一個(gè)時(shí)鐘周期中可以執(zhí)行多條指令。以執(zhí)行多條指令。112.2.引入片內(nèi)緩存(引入片內(nèi)緩存(CACHECACHE)隨著超大規(guī)模集成電路技術(shù)的發(fā)展,存儲(chǔ)器的集成度和隨著超大規(guī)模集成電路技術(shù)的發(fā)展,存儲(chǔ)器的集成度和工作速度都有了極大的提高。但是,相對于工作速度都有了極大的提高。但是,相對于CPUCPU的工作速度的工作速度仍然至少差一個(gè)數(shù)量級(jí)。為了減少從存儲(chǔ)器中取指令與數(shù)據(jù)仍然至少差一個(gè)數(shù)量級(jí)。為了減少從存儲(chǔ)器中取指令與數(shù)據(jù)的時(shí)間,利用指令執(zhí)行的局部性原理,把近期可能要用到的的時(shí)間,利用指令執(zhí)行的局部性原理,把近期可能要用到的指令與數(shù)據(jù)放在工作速度比主存儲(chǔ)器更高(當(dāng)然,容量更小)指令與數(shù)據(jù)放在工作速度比主存儲(chǔ)器更高(當(dāng)然,容量更?。┑木彺嬷?。這樣的思想,進(jìn)一步在處理器中實(shí)現(xiàn),即在處理的緩存中。這樣的思想,進(jìn)一步在處理器中實(shí)現(xiàn),即在處理器芯片中實(shí)現(xiàn)了緩存。目前,通常在處理器芯片上有指令和器芯片中實(shí)現(xiàn)了緩存。目前,通常在處理器芯片上有指令和數(shù)據(jù)分開的一級(jí)緩存與指令與數(shù)據(jù)混合的二級(jí)緩存。且緩存數(shù)據(jù)分開的一級(jí)緩存與指令與數(shù)據(jù)混合的二級(jí)緩存。且緩存的容量越來越大。從而進(jìn)一步提高了處理器的性能。的容量越來越大。從而進(jìn)一步提高了處理器的性能??傊?,總之,x86x86系列系列處理器芯片就是沿著這樣的思路發(fā)系列系列處理器芯片就是沿著這樣的思路發(fā)展的。因此,展的。因此,80868086是是x86x86系列系列處理器的基礎(chǔ)。而且,任系列系列處理器的基礎(chǔ)。而且,任一種一種x86x86系列處理器芯片在上電后,就是處在系列處理器芯片在上電后,就是處在80868086的實(shí)模式。的實(shí)模式。根據(jù)需要,用指令進(jìn)入各種操作模式。所以,學(xué)習(xí)根據(jù)需要,用指令進(jìn)入各種操作模式。所以,學(xué)習(xí)x86x86系列系列處理器必須學(xué)習(xí)掌握處理器必須學(xué)習(xí)掌握80868086,也只能從,也只能從80868086入手。入手。12從指令,從編程來說,幾乎沒有用匯編語言來使用浮點(diǎn)從指令,從編程來說,幾乎沒有用匯編語言來使用浮點(diǎn)指令、指令、MMXMMX指令與指令與XMMXMM指令的,都是通過高級(jí)語言來使用這些指令的,都是通過高級(jí)語言來使用這些指令的。因而,絕大部分程序員,除了編寫操作系統(tǒng)代碼的指令的。因而,絕大部分程序員,除了編寫操作系統(tǒng)代碼的外,面對外,面對x86x86系列處理器的指令,實(shí)際上是面對系列處理器的指令,實(shí)際上是面對80868086指令。指令。因此,本書從因此,本書從80868086入手來學(xué)習(xí)與掌握入手來學(xué)習(xí)與掌握x86x86系列處理器。系列處理器。13148086/8088 CPU的內(nèi)部結(jié)構(gòu)基本相同的內(nèi)部結(jié)構(gòu)基本相同均由兩個(gè)獨(dú)立的工作部件組成均由兩個(gè)獨(dú)立的工作部件組成 一個(gè)稱為執(zhí)行部件(一個(gè)稱為執(zhí)行部件(EU)一個(gè)稱為總線接口部件一個(gè)稱為總線接口部件(BIU)2.2 8086的功能結(jié)構(gòu)的功能結(jié)構(gòu)BIUBIU包括:包括:4 4個(gè)個(gè)1616位的段地址寄存器位的段地址寄存器(CS(CS、DSDS、SSSS、ES)ES);1 1個(gè)個(gè)1616位的指令指針寄存器位的指令指針寄存器IPIP;1 1個(gè)個(gè)2020位的地址加法器;位的地址加法器;指令隊(duì)列寄存器;指令隊(duì)列寄存器;內(nèi)部寄存器;內(nèi)部寄存器;輸入輸出總線控制邏輯;輸入輸出總線控制邏輯;EUEU包括:包括:4 4個(gè)個(gè)1616位的通用數(shù)據(jù)寄存器位的通用數(shù)據(jù)寄存器(AX(AX、BXBX、CXCX、DX)DX);4 4個(gè)個(gè)1616位的專用寄存器位的專用寄存器(BP(BP、SPSP、SISI、DI)DI);1 1個(gè)個(gè)1616位的標(biāo)志寄存器位的標(biāo)志寄存器FRFR;2.2 8086的功能結(jié)構(gòu)的功能結(jié)構(gòu)158086CPU8086CPU從功能上來說分成兩大部分:總線接口單元從功能上來說分成兩大部分:總線接口單元BIUBIU(Bus Interface UnitBus Interface Unit)和執(zhí)行單元)和執(zhí)行單元EUEU(Execution UnitExecution Unit)。)。BIUBIU負(fù)責(zé)負(fù)責(zé)8086CPU8086CPU與存儲(chǔ)器之間的信息傳送。具體地說,與存儲(chǔ)器之間的信息傳送。具體地說,即即BIUBIU負(fù)責(zé)從內(nèi)存的指定單元取出指令,送至指令流隊(duì)列中負(fù)責(zé)從內(nèi)存的指定單元取出指令,送至指令流隊(duì)列中排隊(duì)(排隊(duì)(80868086的指令流隊(duì)列是的指令流隊(duì)列是6 6個(gè)字節(jié));在執(zhí)行指令時(shí)所需個(gè)字節(jié));在執(zhí)行指令時(shí)所需的操作數(shù),也由的操作數(shù),也由BIUBIU從內(nèi)存的指定區(qū)域取出,傳送給從內(nèi)存的指定區(qū)域取出,傳送給EUEU部分部分去執(zhí)行。去執(zhí)行。EUEU部分負(fù)責(zé)指令的執(zhí)行。其中主要由數(shù)據(jù)寄存器、指針部分負(fù)責(zé)指令的執(zhí)行。其中主要由數(shù)據(jù)寄存器、指針寄存器與算術(shù)邏輯單元(寄存器與算術(shù)邏輯單元(ALUALU)組成。這樣,取指部分與執(zhí))組成。這樣,取指部分與執(zhí)行指令部分是分開的,于是在一條指令的執(zhí)行過程中,就可行指令部分是分開的,于是在一條指令的執(zhí)行過程中,就可以取出下一條(或多條)指令,在指令流隊(duì)列中排隊(duì)。在一以取出下一條(或多條)指令,在指令流隊(duì)列中排隊(duì)。在一條指令執(zhí)行完以后就可以立即執(zhí)行下一條指令,減少了條指令執(zhí)行完以后就可以立即執(zhí)行下一條指令,減少了CPUCPU為取指令而等待的時(shí)間,提高了為取指令而等待的時(shí)間,提高了CPUCPU的利用率,提高了整個(gè)的利用率,提高了整個(gè)運(yùn)行速度。運(yùn)行速度。168086CPU外部數(shù)據(jù)外部數(shù)據(jù)總線為總線為16位、指位、指令隊(duì)列為令隊(duì)列為6字節(jié)字節(jié)指令隊(duì)列的設(shè)置使指令的取指令隊(duì)列的設(shè)置使指令的取出與執(zhí)行并行進(jìn)行,以提出與執(zhí)行并行進(jìn)行,以提高了程序的運(yùn)行速度高了程序的運(yùn)行速度 178086/8088CPU的內(nèi)部結(jié)構(gòu)寄存器是中央處理器內(nèi)的組成部份寄存器是中央處理器內(nèi)的組成部份寄存器是有限存貯容量的高速存寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、貯部件,它們可用來暫存指令、數(shù)據(jù)和地址。數(shù)據(jù)和地址。指令指令:確定運(yùn)算與操作確定運(yùn)算與操作數(shù)據(jù)數(shù)據(jù):運(yùn)算或讀寫操作的對象運(yùn)算或讀寫操作的對象地址地址:標(biāo)記和確定內(nèi)存空間中具體標(biāo)記和確定內(nèi)存空間中具體的存儲(chǔ)位置的存儲(chǔ)位置地址加法器的作用是根據(jù)地址加法器的作用是根據(jù)段寄存器存放的段基地段寄存器存放的段基地址與址與EU送出的送出的16位偏移位偏移地址計(jì)算得到地址計(jì)算得到20位的實(shí)位的實(shí)際地址際地址 輸出輸入控制電路實(shí)現(xiàn)總輸出輸入控制電路實(shí)現(xiàn)總線控制,決定讀或?qū)憽⒕€控制,決定讀或?qū)?、對?nèi)存或?qū)?nèi)存或?qū)/O接口接口 取指令、指令譯碼、產(chǎn)生取指令、指令譯碼、產(chǎn)生并傳送操作信號(hào)并傳送操作信號(hào) 18算術(shù)邏輯單元(運(yùn)算器)8個(gè)通用寄存器1個(gè)標(biāo)志寄存器EU部分控制電路執(zhí)行部件EU的組成及作用取指令,指令譯碼取指令,指令譯碼執(zhí)行指令,完成運(yùn)算執(zhí)行指令,完成運(yùn)算19總線接口部件BIU的組成及作用地址加法器6字節(jié)指令隊(duì)列緩沖器4個(gè)16位段寄存器16位指令指針寄存器輸入輸出控制電路計(jì)算20位的存儲(chǔ)器地址完成CPU與內(nèi)存間以及CPU與I/O接口間的信息傳送分兩種情況:預(yù)取指令時(shí):利用CPU執(zhí)行指令而總線空閑,從內(nèi)存中取出指令放入指令隊(duì)列(等待CPU取走)EU執(zhí)行指令時(shí):按EU的指令,向內(nèi)存或I/O接口寫運(yùn)算結(jié)果,從內(nèi)存或I/O接口取數(shù)據(jù)控制外部總線,保證各種信息的正確傳送指令隊(duì)列緩沖器指令隊(duì)列緩沖器8086 的指令隊(duì)列為6個(gè)字節(jié)8088 的指令隊(duì)列為4個(gè)字節(jié)指令隊(duì)列緩沖器的指令存放狀態(tài)順序指令執(zhí)行:指令隊(duì)列存放緊接在執(zhí)行指令后面的那一條指令執(zhí)行轉(zhuǎn)移指令:立即清除指令隊(duì)列中的內(nèi)容,從新的地址取入指令,并立即送往執(zhí)行單元,然后再從新單元開始重新填滿隊(duì)列實(shí)現(xiàn)實(shí)現(xiàn)CPU的流水的流水線處理操作線處理操作指令隊(duì)列是用來暫存指令的一組寄存器,按指令隊(duì)列是用來暫存指令的一組寄存器,按“先進(jìn)先出先進(jìn)先出”原則讀寫。原則讀寫。在在8086/8088 CPU中,只要指令隊(duì)列未填滿,中,只要指令隊(duì)列未填滿,BIU就從外就從外部存儲(chǔ)器取指令并放入指令隊(duì)列中;另一方面,只要指令部存儲(chǔ)器取指令并放入指令隊(duì)列中;另一方面,只要指令隊(duì)列中不空,隊(duì)列中不空,EU就可將指令隊(duì)列中已有的指令取出執(zhí)行,就可將指令隊(duì)列中已有的指令取出執(zhí)行,這樣這樣BIU和和EU按并行方式重疊操作,大大提高了按并行方式重疊操作,大大提高了CPU的利的利用率,也降低了用率,也降低了CPU對存儲(chǔ)器、對存儲(chǔ)器、I/O端口存取速度的要求。端口存取速度的要求。8086CPU中的指令隊(duì)列緩沖器長度為中的指令隊(duì)列緩沖器長度為6個(gè)字節(jié),而個(gè)字節(jié),而8088CPU只有只有4個(gè)字節(jié)。個(gè)字節(jié)。21如前所述,在如前所述,在80808080與與80858085以及標(biāo)準(zhǔn)的以及標(biāo)準(zhǔn)的8 8位微處理器中,位微處理器中,程序的執(zhí)行是由取指和執(zhí)行指令的循環(huán)來完成的。即執(zhí)行的程序的執(zhí)行是由取指和執(zhí)行指令的循環(huán)來完成的。即執(zhí)行的順序?yàn)槿〉谝粭l指令,執(zhí)行第一條指令;取第二條指令,執(zhí)順序?yàn)槿〉谝粭l指令,執(zhí)行第一條指令;取第二條指令,執(zhí)行第二條指令;行第二條指令;直至取最后一條指令,執(zhí)行最后一條指直至取最后一條指令,執(zhí)行最后一條指令。這樣,在每一條指令執(zhí)行完以后,令。這樣,在每一條指令執(zhí)行完以后,CPUCPU必須等待到下一必須等待到下一條指令取出來以后才能執(zhí)行。所以,它的工作順序如圖條指令取出來以后才能執(zhí)行。所以,它的工作順序如圖2-22-2所示。所示。但在但在80868086中,由于中,由于BIUBIU和和EUEU是分開的,所以,取指和執(zhí)是分開的,所以,取指和執(zhí)行可以重疊并行。它的執(zhí)行順序如圖行可以重疊并行。它的執(zhí)行順序如圖2-32-3所示。所示。于是就大大減少了等待對取指所需的時(shí)間,提高了于是就大大減少了等待對取指所需的時(shí)間,提高了CPUCPU的利用率。一方面可以提高整個(gè)程序的執(zhí)行速度,另一方面的利用率。一方面可以提高整個(gè)程序的執(zhí)行速度,另一方面又降低了與之相配的存儲(chǔ)器的存取速度的要求。這種重疊的又降低了與之相配的存儲(chǔ)器的存取速度的要求。這種重疊的操作技術(shù),過去只在大型機(jī)中才使用稱為流水線,在操作技術(shù),過去只在大型機(jī)中才使用稱為流水線,在X86X86系系列系列微處理器中得到了廣泛的使用與提高。列系列微處理器中得到了廣泛的使用與提高。在遇到系統(tǒng)復(fù)位或執(zhí)行轉(zhuǎn)移指令等特殊情況,指令隊(duì)列在遇到系統(tǒng)復(fù)位或執(zhí)行轉(zhuǎn)移指令等特殊情況,指令隊(duì)列被刷新時(shí),被刷新時(shí),EUEU才需要等待才需要等待BIUBIU進(jìn)行取指操作?;蛘咴谶M(jìn)行取指操作?;蛘咴贓UEU需要需要操作數(shù)而操作數(shù)而BIUBIU正忙時(shí),正忙時(shí),EU EU需要等待需要等待BIUBIU執(zhí)行完當(dāng)前的操作,執(zhí)行完當(dāng)前的操作,再去取操作數(shù),等到再去取操作數(shù),等到EUEU得到操作數(shù)以后,才能進(jìn)行這條指令得到操作數(shù)以后,才能進(jìn)行這條指令的執(zhí)行操作。的執(zhí)行操作。232.3 80862.3 8086微處理器的執(zhí)行環(huán)境微處理器的執(zhí)行環(huán)境本節(jié)描述匯編語言程序員看到的本節(jié)描述匯編語言程序員看到的80868086處理器的執(zhí)行環(huán)境。處理器的執(zhí)行環(huán)境。它描述處理器如何執(zhí)行指令及如何存儲(chǔ)和操作數(shù)據(jù)。執(zhí)行環(huán)它描述處理器如何執(zhí)行指令及如何存儲(chǔ)和操作數(shù)據(jù)。執(zhí)行環(huán)境包括內(nèi)存(地址空間)、通用數(shù)據(jù)寄存器、段寄存器、標(biāo)境包括內(nèi)存(地址空間)、通用數(shù)據(jù)寄存器、段寄存器、標(biāo)志寄存器(志寄存器(EFLAGESEFLAGES)和指令指針寄存器等。)和指令指針寄存器等。242.3.1 2.3.1 基本執(zhí)行環(huán)境概要基本執(zhí)行環(huán)境概要在在80868086處理器上執(zhí)行的程序或任務(wù)都有一組執(zhí)行指令的處理器上執(zhí)行的程序或任務(wù)都有一組執(zhí)行指令的資源用于存儲(chǔ)代碼、數(shù)據(jù)和狀態(tài)信息。這些資源構(gòu)成了資源用于存儲(chǔ)代碼、數(shù)據(jù)和狀態(tài)信息。這些資源構(gòu)成了80868086處理器的執(zhí)行環(huán)境。處理器的執(zhí)行環(huán)境。地址空間。地址空間。80868086處理器上運(yùn)行的任一任務(wù)或程序能尋處理器上運(yùn)行的任一任務(wù)或程序能尋址址1MB1MB(2 22020)字節(jié)的線性地址空間。)字節(jié)的線性地址空間?;境绦驁?zhí)行寄存器。八個(gè)通用寄存器、四個(gè)段寄存基本程序執(zhí)行寄存器。八個(gè)通用寄存器、四個(gè)段寄存器、標(biāo)志寄存器器、標(biāo)志寄存器FLAGSFLAGS和和IPIP(指令指針)寄存器組成了執(zhí)行(指令指針)寄存器組成了執(zhí)行通用指令的基本執(zhí)行環(huán)境。這些指令執(zhí)行字節(jié)、字整型數(shù)的通用指令的基本執(zhí)行環(huán)境。這些指令執(zhí)行字節(jié)、字整型數(shù)的基本整數(shù)算術(shù)運(yùn)算,處理程序流程控制,在字節(jié)串上操作并基本整數(shù)算術(shù)運(yùn)算,處理程序流程控制,在字節(jié)串上操作并尋址存儲(chǔ)器。尋址存儲(chǔ)器。25 堆棧(堆棧(stackstack)。為支持過程或子程序調(diào)用并在過程或)。為支持過程或子程序調(diào)用并在過程或子程序之間傳遞參數(shù),堆棧和堆棧管理資源包含在基本執(zhí)行子程序之間傳遞參數(shù),堆棧和堆棧管理資源包含在基本執(zhí)行環(huán)境中。堆棧定位在內(nèi)存中。環(huán)境中。堆棧定位在內(nèi)存中。I/OI/O端口。端口。80868086結(jié)構(gòu)支持?jǐn)?shù)據(jù)在處理器和輸入輸出結(jié)構(gòu)支持?jǐn)?shù)據(jù)在處理器和輸入輸出(I/OI/O)端口之間的傳送。)端口之間的傳送。80868086處理器的基本執(zhí)行環(huán)境如圖處理器的基本執(zhí)行環(huán)境如圖2-42-4所示。所示。26272.3.2 2.3.2 基本的程序執(zhí)行寄存器基本的程序執(zhí)行寄存器處理器為了應(yīng)用程序編程提供了如圖處理器為了應(yīng)用程序編程提供了如圖2-42-4所示的所示的1414個(gè)基個(gè)基本程序執(zhí)行寄存器。本程序執(zhí)行寄存器。這些寄存器能分組如下:這些寄存器能分組如下:通用寄存器。這八個(gè)寄存器能用于存放操作數(shù)和指通用寄存器。這八個(gè)寄存器能用于存放操作數(shù)和指針。針。段寄存器。這些寄存器最多能保存四個(gè)段選擇子。段寄存器。這些寄存器最多能保存四個(gè)段選擇子。FLAGSFLAGS(程序狀態(tài)和控制)寄存器。(程序狀態(tài)和控制)寄存器。FLAGSFLAGS寄存器報(bào)寄存器報(bào)告正在執(zhí)行的程序的狀態(tài),并允許有限地(應(yīng)用程序級(jí))控告正在執(zhí)行的程序的狀態(tài),并允許有限地(應(yīng)用程序級(jí))控制處理器。制處理器。IPIP(指令指針)寄存器。(指令指針)寄存器。IPIP寄存器包合下一條要執(zhí)寄存器包合下一條要執(zhí)行的指令的行的指令的1616位指針。位指針。281 1通用寄存器通用寄存器八個(gè)八個(gè)3232位通用寄存器位通用寄存器AXAX、BXBX、CXCX、DXDX、SISI、DIDI、BPBP和和SPSP用于處理以下項(xiàng):用于處理以下項(xiàng):邏輯和算術(shù)操作的操作數(shù);邏輯和算術(shù)操作的操作數(shù);用于地址計(jì)算的操作數(shù);用于地址計(jì)算的操作數(shù);內(nèi)存指針。內(nèi)存指針。雖然所有這些寄存器都可用于存放操作數(shù)、結(jié)果和指針,雖然所有這些寄存器都可用于存放操作數(shù)、結(jié)果和指針,但在引用但在引用SPSP寄存器時(shí)要特別小心。寄存器時(shí)要特別小心。SPSP寄存器保持堆棧指針,寄存器保持堆棧指針,通常不要用于其它目的。通常不要用于其它目的。2930這些通用寄存器中的前四個(gè),即這些通用寄存器中的前四個(gè),即AXAX、BXBX、CXCX、DXDX通常稱通常稱為數(shù)據(jù)寄存器,用以存放操作數(shù)。后四個(gè),即為數(shù)據(jù)寄存器,用以存放操作數(shù)。后四個(gè),即SISI、DIDI、BPBP、SPSP通常稱為指針寄存器。雖然它們也可以存放操作數(shù),但主通常稱為指針寄存器。雖然它們也可以存放操作數(shù),但主要用作地址指針。數(shù)據(jù)寄存器要用作地址指針。數(shù)據(jù)寄存器AXAX、BXBX、CXCX和和DXDX又可以分別作又可以分別作為為AHAH、BHBH、CHCH和和DHDH(高字節(jié))以及(高字節(jié))以及ALAL、BLBL、CLCL和和DLDL(低字節(jié))(低字節(jié))8 8位寄存器引用,如圖位寄存器引用,如圖2-52-5所示。所示。SPSP是堆棧指針,稱為堆棧指針寄存器是堆棧指針,稱為堆棧指針寄存器,它與段寄存器,它與段寄存器SSSS一起確定在堆棧操作時(shí),堆棧在內(nèi)存中的位置。一起確定在堆棧操作時(shí),堆棧在內(nèi)存中的位置。BPBP(Base Base Pointer RegisterPointer Register),稱作基址指針寄存器,稱作基址指針寄存器,尋址堆棧操作尋址堆棧操作數(shù)時(shí),也是尋址堆棧段。數(shù)時(shí),也是尋址堆棧段。SISI(Source Index RegisterSource Index Register)和)和DIDI(Destination Index RegisterDestination Index Register)常用于串操作。)常用于串操作。SP給出棧頂?shù)钠频刂?。給出棧頂?shù)钠频刂贰P則是用來存放位于堆棧段則是用來存放位于堆棧段中的一個(gè)數(shù)據(jù)區(qū)基址的偏移地址的。中的一個(gè)數(shù)據(jù)區(qū)基址的偏移地址的。31堆棧是一個(gè)按照后進(jìn)先出(堆棧是一個(gè)按照后進(jìn)先出(LIFO)的原則存取數(shù)據(jù)的存儲(chǔ)區(qū)域。堆棧)的原則存取數(shù)據(jù)的存儲(chǔ)區(qū)域。堆棧的作用是為了在調(diào)用子程序(或轉(zhuǎn)向中斷服務(wù)程序)時(shí),把斷點(diǎn)及有的作用是為了在調(diào)用子程序(或轉(zhuǎn)向中斷服務(wù)程序)時(shí),把斷點(diǎn)及有關(guān)的寄存器、標(biāo)志位及時(shí)正確地保存下來,并保證逐次正確返回。利關(guān)的寄存器、標(biāo)志位及時(shí)正確地保存下來,并保證逐次正確返回。利用堆棧指針用堆棧指針SP可以實(shí)現(xiàn)對棧區(qū)的自動(dòng)管理??梢詫?shí)現(xiàn)對棧區(qū)的自動(dòng)管理。例如:要把例如:要把AX寄存器中的內(nèi)容壓入堆棧,用入棧指令寄存器中的內(nèi)容壓入堆棧,用入棧指令PUSH AX(設(shè)(設(shè)SP原值為原值為1000H),其操作過程如下所示:),其操作過程如下所示:第一步:先把第一步:先把SPlSP,然后把,然后把AH(高位字節(jié))送入(高位字節(jié))送入SP所指單元所指單元(即(即SP=1FFFH););第二步:再次使第二步:再次使SP1SP,把,把AL(低位字節(jié))送至(低位字節(jié))送至SP所指單元(此所指單元(此時(shí)時(shí)SP=1FFEH););數(shù)據(jù)出棧操作與入棧過程正相反:彈出時(shí),先把數(shù)據(jù)出棧操作與入棧過程正相反:彈出時(shí),先把AL內(nèi)容彈出,然后修內(nèi)容彈出,然后修改改SP1SP;再把;再把AH內(nèi)容彈出,再修改內(nèi)容彈出,再修改SP1SP。322 2段寄存器段寄存器段寄存器(段寄存器(CSCS、DSDS、SSSS、ESES)保存)保存1616位段選擇子。一個(gè)位段選擇子。一個(gè)段選擇子是標(biāo)志內(nèi)存中一個(gè)段的特殊指針。為訪問在內(nèi)存中段選擇子是標(biāo)志內(nèi)存中一個(gè)段的特殊指針。為訪問在內(nèi)存中的具體段,此段的段選擇子必須存在于適當(dāng)?shù)亩渭拇嫫髦?。的具體段,此段的段選擇子必須存在于適當(dāng)?shù)亩渭拇嫫髦?。?dāng)寫應(yīng)用程序代碼時(shí),程序用匯編程序的命令和符號(hào)建當(dāng)寫應(yīng)用程序代碼時(shí),程序用匯編程序的命令和符號(hào)建立段選擇子。然后匯編程序和別的工具建立與這些命令和符立段選擇子。然后匯編程序和別的工具建立與這些命令和符號(hào)相關(guān)的實(shí)際段選擇子值。若寫系統(tǒng)代碼,程序員可能需要號(hào)相關(guān)的實(shí)際段選擇子值。若寫系統(tǒng)代碼,程序員可能需要直接建立段選擇子。直接建立段選擇子。當(dāng)使用分段存儲(chǔ)模式時(shí),初始,每一個(gè)段寄存器用不同當(dāng)使用分段存儲(chǔ)模式時(shí),初始,每一個(gè)段寄存器用不同的段選擇子加載,所以每個(gè)段寄存器指向線性地址空間中的的段選擇子加載,所以每個(gè)段寄存器指向線性地址空間中的不同的段。如圖不同的段。如圖2-62-6所示。所示。任何時(shí)候,一個(gè)程序能訪問多至線性地址空間中的四個(gè)任何時(shí)候,一個(gè)程序能訪問多至線性地址空間中的四個(gè)段。為訪問未由一個(gè)段寄存器指向的段,程序必須首先把要段。為訪問未由一個(gè)段寄存器指向的段,程序必須首先把要訪問的段的段選擇子加載至一個(gè)段寄存器。訪問的段的段選擇子加載至一個(gè)段寄存器。3334每個(gè)段寄存器與三種存儲(chǔ)類型之一相關(guān):代碼、數(shù)據(jù)或每個(gè)段寄存器與三種存儲(chǔ)類型之一相關(guān):代碼、數(shù)據(jù)或堆棧。例如,堆棧。例如,CSCS寄存器包含代碼段的段選擇子,其中存放正寄存器包含代碼段的段選擇子,其中存放正在執(zhí)行的指令。處理器用在在執(zhí)行的指令。處理器用在CSCS寄存器中的段選擇子和寄存器中的段選擇子和IPIP寄存寄存器中的內(nèi)容組成的邏輯地址取下一條要執(zhí)行的指令。器中的內(nèi)容組成的邏輯地址取下一條要執(zhí)行的指令。CSCS寄存寄存器不能由應(yīng)用程序直接加載,而是由改變程序控制的指令或器不能由應(yīng)用程序直接加載,而是由改變程序控制的指令或內(nèi)部處理器指令(例如,過程調(diào)用、中斷處理)隱含加載。內(nèi)部處理器指令(例如,過程調(diào)用、中斷處理)隱含加載。DSDS、ESES寄存器指向兩個(gè)數(shù)據(jù)段。兩個(gè)數(shù)據(jù)段的可用性,寄存器指向兩個(gè)數(shù)據(jù)段。兩個(gè)數(shù)據(jù)段的可用性,允許有效而又安全地訪問數(shù)據(jù)結(jié)構(gòu)的不同類型。例如,可只允許有效而又安全地訪問數(shù)據(jù)結(jié)構(gòu)的不同類型。例如,可只建立兩個(gè)不同的數(shù)據(jù)段:一個(gè)用于當(dāng)前模塊的數(shù)據(jù)結(jié)構(gòu),另建立兩個(gè)不同的數(shù)據(jù)段:一個(gè)用于當(dāng)前模塊的數(shù)據(jù)結(jié)構(gòu),另一個(gè)用于從較高級(jí)模塊輸出的數(shù)據(jù)。為了訪問附加的數(shù)據(jù)段,一個(gè)用于從較高級(jí)模塊輸出的數(shù)據(jù)。為了訪問附加的數(shù)據(jù)段,應(yīng)用程序必須按需要把這些段的段選擇子加載至應(yīng)用程序必須按需要把這些段的段選擇子加載至DSDS、ESES寄存寄存器中。器中。SSSS寄存器包含堆棧段的段選擇子。所有的堆棧操作都用寄存器包含堆棧段的段選擇子。所有的堆棧操作都用SSSS以找到堆棧段。不像以找到堆棧段。不像CSCS寄存器,寄存器,SSSS寄存器能顯式加載。它寄存器能顯式加載。它允許應(yīng)用程序設(shè)置多個(gè)堆棧并在堆棧之間切換。允許應(yīng)用程序設(shè)置多個(gè)堆棧并在堆棧之間切換。353 3FLAGSFLAGS寄存器寄存器1616位位FLAGSFLAGS寄存器包含一組狀態(tài)標(biāo)志、一個(gè)控制標(biāo)志一寄存器包含一組狀態(tài)標(biāo)志、一個(gè)控制標(biāo)志一個(gè)系統(tǒng)標(biāo)志。反映處理器的狀態(tài)和運(yùn)算結(jié)果的某些特征。個(gè)系統(tǒng)標(biāo)志。反映處理器的狀態(tài)和運(yùn)算結(jié)果的某些特征。圖圖2-72-7定義了此寄存器中的標(biāo)志。定義了此寄存器中的標(biāo)志。在處理器初始化(由在處理器初始化(由RESETRESET腳或腳或INITINIT腳有效)之后,腳有效)之后,F(xiàn)LAGSFLAGS寄存器是寄存器是0002H0002H。此寄存器的位。此寄存器的位1 1、3 3、5 5、12-1512-15保留。保留。軟件不能用或依賴于這些位中的任一個(gè)。軟件不能用或依賴于這些位中的任一個(gè)。FLAGSFLAGS寄存器中以寄存器中以下指令能用于標(biāo)志組與堆棧或下指令能用于標(biāo)志組與堆?;駻XAX寄存器之間的移動(dòng):寄存器之間的移動(dòng):LAHFLAHF、SAHFSAHF、PUSHFPUSHF、POPFPOPF。在。在FLAGSFLAGS寄存器的內(nèi)容已經(jīng)傳送至過程寄存器的內(nèi)容已經(jīng)傳送至過程堆棧或堆?;駻XAX寄存器之后,標(biāo)志能作修改。寄存器之后,標(biāo)志能作修改。當(dāng)調(diào)用中斷或異常處理時(shí),處理器自動(dòng)保存當(dāng)調(diào)用中斷或異常處理時(shí),處理器自動(dòng)保存FLAGSFLAGS寄存寄存器的狀態(tài)至堆棧上。器的狀態(tài)至堆棧上。36(1 1)狀態(tài)標(biāo)志)狀態(tài)標(biāo)志FLAGSFLAGS寄存器的狀態(tài)標(biāo)志(位寄存器的狀態(tài)標(biāo)志(位0 0、2 2、4 4、6 6、7 7和和1111)指示)指示算術(shù)指令,例如算術(shù)指令,例如ADDADD、SUBSUB、MULMUL和和DIVDIV指令的結(jié)果的一些特征。指令的結(jié)果的一些特征。狀態(tài)標(biāo)志的功能如下:狀態(tài)標(biāo)志的功能如下:進(jìn)位標(biāo)志進(jìn)位標(biāo)志CFCF(Carry FlagCarry Flag)當(dāng)結(jié)果的最高位(字節(jié)操作時(shí)的當(dāng)結(jié)果的最高位(字節(jié)操作時(shí)的D7D7或字操作時(shí)的或字操作時(shí)的Dl5Dl5、雙字操作的雙字操作的D31D31)產(chǎn)生一個(gè)進(jìn)位或借位,則)產(chǎn)生一個(gè)進(jìn)位或借位,則C C1 1,否則為,否則為0 0。這個(gè)標(biāo)志主要用于多字節(jié)數(shù)的加、減法運(yùn)算。移位和循環(huán)指這個(gè)標(biāo)志主要用于多字節(jié)數(shù)的加、減法運(yùn)算。移位和循環(huán)指令也能夠把存儲(chǔ)器或寄存器中的最高位(左移時(shí))或最低位令也能夠把存儲(chǔ)器或寄存器中的最高位(左移時(shí))或最低位(右移時(shí))放入標(biāo)志(右移時(shí))放入標(biāo)志CFCF中。中。輔助進(jìn)位標(biāo)志輔助進(jìn)位標(biāo)志AFAF(Auxitiary Carry FlagAuxitiary Carry Flag)在字節(jié)操作時(shí),則由低半字節(jié)(一個(gè)字節(jié)的低在字節(jié)操作時(shí),則由低半字節(jié)(一個(gè)字節(jié)的低4 4位)向位)向高半字節(jié)有進(jìn)位或借位,則高半字節(jié)有進(jìn)位或借位,則AFAF1 1,否則為,否則為0 0。這個(gè)標(biāo)志用于。這個(gè)標(biāo)志用于十進(jìn)制算術(shù)運(yùn)算指令中。十進(jìn)制算術(shù)運(yùn)算指令中。37 溢出標(biāo)志溢出標(biāo)志OFOF(Overflow FlagOverflow Flag)在算術(shù)運(yùn)算中,帶符號(hào)數(shù)的運(yùn)算結(jié)果超出了在算術(shù)運(yùn)算中,帶符號(hào)數(shù)的運(yùn)算結(jié)果超出了8 8位、位、1616位位帶符號(hào)數(shù)能表達(dá)的范圍,即在字節(jié)運(yùn)算時(shí)帶符號(hào)數(shù)能表達(dá)的范圍,即在字節(jié)運(yùn)算時(shí)+127+127或或128128,在字運(yùn)算時(shí)在字運(yùn)算時(shí)+32767+32767或或3276832768此標(biāo)志置位,否則復(fù)位。此標(biāo)志置位,否則復(fù)位。一個(gè)任選的溢出中斷指令,在溢出情況下能產(chǎn)生中斷。一個(gè)任選的溢出中斷指令,在溢出情況下能產(chǎn)生中斷。符號(hào)標(biāo)志符號(hào)標(biāo)志SFSF(Sign FlagSign Flag)它的值與運(yùn)算結(jié)果的最高位相同。即結(jié)果的最高位(字它的值與運(yùn)算結(jié)果的最高位相同。即結(jié)果的最高位(字操作時(shí)為操作時(shí)為D15D15)為)為1 1,則,則SFSF1 1;否則,;否則,SFSF0 0。由于在由于在X86X86系列結(jié)構(gòu)微處理器中,符號(hào)數(shù)是用補(bǔ)碼表示系列結(jié)構(gòu)微處理器中,符號(hào)數(shù)是用補(bǔ)碼表示的,所以的,所以S S表示了結(jié)果的符號(hào),表示了結(jié)果的符號(hào),SF=0SF=0為正,為正,SF=1SF=1為負(fù)。為負(fù)。奇偶標(biāo)志奇偶標(biāo)志PFPF(Parity FlagParity Flag)若操作結(jié)果中若操作結(jié)果中“1”1”的個(gè)數(shù)為偶數(shù),則的個(gè)數(shù)為偶數(shù),則PFPF1 1,否則,否則PFPF0 0。這個(gè)標(biāo)志可用于檢查在數(shù)據(jù)傳送過程中是否發(fā)生錯(cuò)誤。這個(gè)標(biāo)志可用于檢查在數(shù)據(jù)傳送過程中是否發(fā)生錯(cuò)誤。38 零標(biāo)志零標(biāo)志ZFZF(Zero FiagZero Fiag)若運(yùn)算的結(jié)果為若運(yùn)算的結(jié)果為0 0,則,則ZFZF1 1,否則,否則ZFZF0 0在這些狀態(tài)標(biāo)志中,只有進(jìn)位標(biāo)志在這些狀態(tài)標(biāo)志中,只有進(jìn)位標(biāo)志CFCF能用指令能用指令STCSTC(設(shè)(設(shè)置進(jìn)位位)、置進(jìn)位位)、CLCCLC(清除進(jìn)位位)和(清除進(jìn)位位)和CMCCMC(進(jìn)位位取反)直接(進(jìn)位位取反)直接進(jìn)行修改。也可以用位操作指令(進(jìn)行修改。也可以用位操作指令(BTBT、BTSBTS、BTRBTR和和BTCBTC)拷)拷貝規(guī)定位至貝規(guī)定位至CFCF標(biāo)志。標(biāo)志。這些狀態(tài)標(biāo)志允許單算術(shù)操作以產(chǎn)生三種不同數(shù)據(jù)類型這些狀態(tài)標(biāo)志允許單算術(shù)操作以產(chǎn)生三種不同數(shù)據(jù)類型的結(jié)果:無符號(hào)整數(shù)、符號(hào)整數(shù)和的結(jié)果:無符號(hào)整數(shù)、符號(hào)整數(shù)和BCDBCD整數(shù)。若算術(shù)操作的整數(shù)。若算術(shù)操作的結(jié)果作為無符號(hào)整數(shù)對待,結(jié)果作為無符號(hào)整數(shù)對待,CFCF標(biāo)志指示超出范圍(進(jìn)位或借標(biāo)志指示超出范圍(進(jìn)位或借位);若作為符號(hào)整數(shù)(位);若作為符號(hào)整數(shù)(2 2的補(bǔ)碼值)對待,的補(bǔ)碼值)對待,OFOF標(biāo)志指示是標(biāo)志指示是否超出范圍;若作為否超出范圍;若作為BCDBCD數(shù)對待,數(shù)對待,AFAF標(biāo)志指示進(jìn)位或借位。標(biāo)志指示進(jìn)位或借位。SFSF標(biāo)志指示符號(hào)整數(shù)的符號(hào)。標(biāo)志指示符號(hào)整數(shù)的符號(hào)。ZFZF標(biāo)志指示符號(hào)整數(shù)或無標(biāo)志指示符號(hào)整數(shù)或無符號(hào)整數(shù)是否為符號(hào)整數(shù)是否為0 0;CFCF用于與帶進(jìn)位加用于與帶進(jìn)位加/減指令一起產(chǎn)生適當(dāng)減指令一起產(chǎn)生適當(dāng)?shù)倪M(jìn)位或借位。的進(jìn)位或借位。39(2 2)控制標(biāo)志)控制標(biāo)志EFLAGSEFLAGS寄存器的控制標(biāo)志(位寄存器的控制標(biāo)志(位8 8、9 9、1010)指示程序和機(jī))指示程序和機(jī)器運(yùn)行的狀況??刂茦?biāo)志的功能如下:器運(yùn)行的狀況??刂茦?biāo)志的功能如下:方向標(biāo)志方向標(biāo)志D D(Direction FlagDirection Flag)若用指令置若用指令置DFDF1 1,則引起串操作指令為自動(dòng)減量指令,則引起串操作指令為自動(dòng)減量指令,也就是從高地址到低地址或是也就是從高地址到低地址或是“從右到左從右到左”來處理串;若使來處理串;若使DFDF0 0,則串操作指令就為自動(dòng)增量指令。,則串操作指令就為自動(dòng)增量指令。STDSTD和和CLDCLD指令分別地設(shè)置和清除指令分別地設(shè)置和清除 DF DF 標(biāo)志。標(biāo)志。中斷允許標(biāo)志中斷允許標(biāo)志IFIF(Interrupt-enable FlagInterrupt-enable Flag)若指令中置若指令中置IFIF1 1,則允許,則允許CPUCPU去接收外部的可屏蔽的中去接收外部的可屏蔽的中斷請求;若使斷請求;若使IFIF0 0,則屏蔽上述的中斷請求;對內(nèi)部產(chǎn)生,則屏蔽上述的中斷請求;對內(nèi)部產(chǎn)生的中斷不起作用。的中斷不起作用。40 追蹤標(biāo)志追蹤標(biāo)志TFTF(Trace FlagTrace Flag)置置IFIF標(biāo)志,使處理進(jìn)入單步方式,以便于調(diào)試。在這個(gè)標(biāo)志,使處理進(jìn)入單步方式,以便于調(diào)試。在這個(gè)方式下,方式下,CPUCPU在每條指令執(zhí)行以后,產(chǎn)生一個(gè)內(nèi)部的中斷,在每條指令執(zhí)行以后,產(chǎn)生一個(gè)內(nèi)部的中斷,允許程序在每條指令執(zhí)行完以后進(jìn)行檢查。允許程序在每條指令執(zhí)行完以后進(jìn)行檢查。414 4指令指針指令指針指令指針(指令指針(IPIP)寄存器包含下一條要執(zhí)行的指令在當(dāng)前)寄存器包含下一條要執(zhí)行的指令在當(dāng)前碼段中的偏移。指向微處理器在程序中順序?qū)ぶ反a段中的碼段中的偏移。指向微處理器在程序中順序?qū)ぶ反a段中的下一條指令。下一條指令。通常,它是順序增加的,從一條指令邊界至下通常,它是順序增加的,從一條指令邊界至下一條指令,但在執(zhí)行一條指令,但在執(zhí)行JMPJMP、JccJcc、CALLCALL、RETRET和和IRETIRET等指令時(shí),等指令時(shí),它可以向前或向后移動(dòng)若干條指令。它可以向前或向后移動(dòng)若干條指令。IPIP寄存器不能直接由軟件訪問;它由控制傳送指令(例寄存器不能直接由軟件訪問;它由控制傳送指令(例如,如,JMPJMP、JccJcc、CALLCALL和和RETRET)、中斷和異常隱含控制。讀)、中斷和異常隱含控制。讀IPIP寄存器的唯一方法是執(zhí)行一條寄存器的唯一方法是執(zhí)行一條CALLCALL指令,然后從堆棧中讀指指令,然后從堆棧中讀指令指針的返回值。令指針的返回值。IPIP寄存器能由修改過程堆棧上指令指針的寄存器能由修改過程堆棧上指令指針的返回值并執(zhí)行返回指令(返回值并執(zhí)行返回指令(RETRET或或IRETIRET)來間接修改。)來間接修改。422.3.3 2.3.3 存儲(chǔ)器組織存儲(chǔ)器組織處理器在它的總線上尋址的存儲(chǔ)器稱為物理存儲(chǔ)器。物處理器在它的總線上尋址的存儲(chǔ)器稱為物理存儲(chǔ)器。物理存儲(chǔ)器按字節(jié)序列組織。每個(gè)字節(jié)賦予一個(gè)唯一的地址,理存儲(chǔ)器按字節(jié)序列組織。每個(gè)字節(jié)賦予一個(gè)唯一的地址,稱為物理地址。物理地址空間的范圍從稱為物理地址。物理地址空間的范圍從0 02 2202011(1MB1MB)的)的最大值。事實(shí)上設(shè)計(jì)與最大值。事實(shí)上設(shè)計(jì)與80868086處理器一起工作的任何操作系統(tǒng)處理器一起工作的任何操作系統(tǒng)和執(zhí)行程序都使用處理器的存儲(chǔ)管理設(shè)施訪問存儲(chǔ)器。這些和執(zhí)行程序都使用處理器的存儲(chǔ)管理設(shè)施訪問存儲(chǔ)器。這些設(shè)施提供例如分段特性以允許有效地和可靠地管理存儲(chǔ)器。設(shè)施提供例如分段特性以允許有效地和可靠地管理存儲(chǔ)器。4380868086有有2020條地址引線,它的直接尋址能力為條地址引線,它的直接尋址能力為2202201M1M字字節(jié)。所以,在一個(gè)節(jié)。所以,在一個(gè)80868086組成的系統(tǒng)中,可以有多達(dá)組成的系統(tǒng)中,可以有多達(dá)1M1M字節(jié)的字節(jié)的存儲(chǔ)器。這存儲(chǔ)器。這1M1M字節(jié)邏輯上可以組織成一個(gè)線性矩陣。地址從字節(jié)邏輯上可以組織成一個(gè)線性矩陣。地址從00000H00000H到到FFFFFHFFFFFH。給定一個(gè)。給定一個(gè)2020位的地址,就可以從這位的地址,就可以從這1M1M字節(jié)字節(jié)中取出所需要的指令或操作數(shù);但是,在中取出所需要的指令或操作數(shù);但是,在80868086內(nèi)部,這內(nèi)部,這2020位位地址是如何形成的呢地址是如何形成的呢?如前所述,如前所述,80868086內(nèi)部的內(nèi)部的ALUALU能進(jìn)行能進(jìn)行1616位位運(yùn)算,有關(guān)地址的寄存器如運(yùn)算,有關(guān)地址的寄存器如SPSP、IPIP,以及,以及BPBP、SISI、DIDI等也都等也都是是1616位的,因而位的,因而80868086對地址的運(yùn)算也只能是對地址的運(yùn)算也只能是1616位。這就是說,位。這就是說,對于對于80868086來說,各種尋址方式,尋找操作數(shù)的范圍最多只能來說,各種尋址方式,尋找操作數(shù)的范圍最多只能是是64K64K字節(jié)。字節(jié)。44所以,整個(gè)所以,整個(gè)1M1M字節(jié)存儲(chǔ)器以字節(jié)存儲(chǔ)器以64K64K為范圍分為若干段。在為范圍分為若干段。在尋址一個(gè)具體物理單元時(shí),必須要由一個(gè)基地址再加上由尋址一個(gè)具體物理單元時(shí),必須要由一個(gè)基地址再加上由SPSP或或IPIP或或BPBP或或SISI或或DIDI等可由等可由CPUCPU處理的處理的1616位偏移量來形成實(shí)際位偏移量來形成實(shí)際的的2020位物理地址。這個(gè)基地址就是由位物理地址。這個(gè)基地址就是由80888088中的段寄存器,即中的段寄存器,即代碼段寄存器代碼段寄存器CSCS、堆棧段寄存器、堆棧段寄存器SSSS、數(shù)據(jù)段寄存器、數(shù)據(jù)段寄存器DSDS以及附以及附加段寄存器加段寄存器ESES中的一個(gè)來形成的。在形成中的一個(gè)來形成的。在形成2020位物理地址時(shí),位物理地址時(shí),段寄存器中的段寄存器中的1616位數(shù)會(huì)自動(dòng)左移位數(shù)會(huì)自動(dòng)左移4 4位,然后與位,然后與1616位偏移量相位偏移量相加,如圖加,如圖2-82-8所示。所示。4546存儲(chǔ)器地址的兩種表示方式存儲(chǔ)器地址的兩種表示方式物理地址和邏輯地址是兩種存儲(chǔ)單元地址的表示和標(biāo)記方法物理地址:存儲(chǔ)單元所具有的實(shí)際地址由20位二進(jìn)制代碼構(gòu)成邏輯地址:在程序中(指令中)書寫和使用的地址由兩部分構(gòu)成段基地址:偏移地址例:例:假設(shè)假設(shè)(DS)=3200H若指令中給出的偏移地址:若指令中給出的偏移地址:1050H物理地址物理地址=3200H10H+1050H=33050H邏輯地址到物理地址的變換例邏輯地址到物理地址的變換例邏輯地址也稱相對地址或虛擬地址,它是目標(biāo)程序中的地址。邏輯地址也稱相對地址或虛擬地址,它是目標(biāo)程序中的地址。物理地址也稱絕對地址或?qū)嵉刂?,它是物理存貯器的單元地址。物理地址也稱絕對地址或?qū)嵉刂罚俏锢泶尜A器的單元地址。物理地址段基地址物理地址段基地址16偏移地址。偏移地址。BIU中的中的地址加法器地址加法器,實(shí)現(xiàn)邏輯地址到物理地址的變換,實(shí)現(xiàn)邏輯地址到物理地址的變換48每次在需要產(chǎn)生一個(gè)每次在需要產(chǎn)生一個(gè)2020位地址的時(shí)候,一個(gè)段寄存器會(huì)位地址的時(shí)候,一個(gè)段寄存器會(huì)自動(dòng)被選擇,且能自動(dòng)左移自動(dòng)被選擇,且能自動(dòng)左移4 4位再與一個(gè)位再與一個(gè)1616位的地址偏移量位的地址偏移量相加,以產(chǎn)生所需要的相加,以產(chǎn)生所需要的2020位物理地址。位物理地址。每當(dāng)是取指令的時(shí)候,則自動(dòng)選擇代碼段寄存器每當(dāng)是取指令的時(shí)候,則自動(dòng)選擇代碼段寄存器CSCS,再,再加上由加上由IPIP所決定的所決定的1616位偏移量,計(jì)算得到要取的指令的物理位偏移量,計(jì)算得到要取的指令的物理地址。地址。每當(dāng)是涉及到一個(gè)堆棧操作時(shí),則自動(dòng)選擇堆棧段寄存每當(dāng)是涉及到一個(gè)堆棧操作時(shí),則自動(dòng)選擇堆棧段寄存器器SSSS,再加上由,再加上由SPSP所決定的所決定的1616位偏移量,計(jì)算得到堆棧操作位偏移量,計(jì)算得到堆棧操作所需要的所需要的2020位物理地址。位物理地址。每當(dāng)涉及到一個(gè)操作數(shù),則自動(dòng)選擇數(shù)據(jù)段寄存器每當(dāng)涉及到一個(gè)操作數(shù),則自動(dòng)選擇數(shù)據(jù)段寄存器DSDS或或附加段寄存器附加段寄存器ESES,再加上,再加上1616位偏移量,計(jì)算得到操作數(shù)的位偏移量,計(jì)算得到操作數(shù)的2020位物理地址。而位物理地址。而1616位偏移量,可以是包含在指令中的直接地位偏移量,可以是包含在指令中的直接地址,也可以是某一個(gè)址,也可以是某一個(gè)1616位地址寄存器的值,也可以是指令中位地址寄存器的值,也可以是指令中的位移量加上的位移量加上1616位地址寄存器中的值等等,這取決于指令的位地址寄存器中的值等等,這取決于指令的尋址方式。尋址方式。49在在80868086系統(tǒng)中,存儲(chǔ)器的訪問,如圖系統(tǒng)中,存儲(chǔ)器的訪問,如圖2-92-9所示。所示。段首地址、段基地址和偏移地址段首地址、段基地址和偏移地址70002H12H70000H0 0 0 0段基地址(段基地址(16位)位)段首地址段首地址(20位位)偏移地址偏移地址=0002H每個(gè)段都從低每個(gè)段都從低4位為位為0的存儲(chǔ)單元開始的存儲(chǔ)單元開始段首地址的高段首地址的高16位稱為段基地址位稱為段基地址偏移地址為相對于段首地址的偏移量偏移地址為相對于段首地址的偏移量00H一定為一定為051存儲(chǔ)器的邏輯分段原則存儲(chǔ)器的邏輯分段原則 編程時(shí),存儲(chǔ)器單元地址由段地址和偏移量表示,二者編程時(shí),存儲(chǔ)器單元地址由段地址和偏移量表示,二者結(jié)合稱為邏輯地址。結(jié)合稱為邏輯地址。段寄存器段寄存器1616位,存放段起始地址的高位,存放段起始地址的高1616位,稱為段基址,低位,稱為段基址,低4 4位指定為位指定為0000B0000B。在存儲(chǔ)器管理中,從在存儲(chǔ)器管理中,從0 0地址單元開始,每地址單元開始,每1616個(gè)字節(jié)為一小個(gè)字節(jié)為一小段,稱為節(jié)(段,稱為節(jié)(ParagraphParagraph)。節(jié)起始地址的低)。節(jié)起始地址的低4 4位也是位也是0000B0000B,顯然段起始地址必須是節(jié)起始地址。顯然段起始地址必須是節(jié)起始地址。將段基址左移將段基址左移4 4位與偏移地址相加,即為某一存儲(chǔ)器單位與偏移地址相加,即為某一存儲(chǔ)器單元的物理地址,也稱為絕對地址。元的物理地址,也稱為絕對地址。物理地址段基址物理地址段基址1616偏移地址偏移地址 52在不改變段寄存器值的情況下,尋址的最大范圍是在不改變段寄存器值的情況下,尋址的最大范圍是64KB64KB。所以,若有一個(gè)任務(wù),它的程序長度、堆棧長度以及數(shù)據(jù)區(qū)所以,若有一個(gè)任務(wù),它的程序長度、堆棧長度以及數(shù)據(jù)區(qū)長度都不超過長度都不超過64KB64KB,則可在程序開始時(shí),分別給,則可在程序開始時(shí),分別給DSDS、SSSS、ESES置值,然后在程序中就可以不再考慮這些段寄存器,程序就置值,然后在程序中就可以不再考慮這些段寄存器,程序就可以在