




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、微型計(jì)算機(jī)原理及應(yīng)用2.1 80 x86系列微處理器是8086的延伸2.2 8086的功能結(jié)構(gòu)2.3 8086微處理器的執(zhí)行環(huán)境第2章 80 x86系列結(jié)構(gòu)微處理器與808622.1 x86系列微處理器是8086的延伸2.1.1 8086功能的擴(kuò)展2.1.2 8086性能的提高32.1.1 8086功能的擴(kuò)展1.從16位擴(kuò)展為32位8086是16位微處理器。它的內(nèi)部寄存器的主體是16位的。它的主要用于存放操作數(shù)的數(shù)據(jù)寄存器是16位的。它的主要的用作為地址指針的指針寄存器也是16位的。依賴分段機(jī)制,用20位段基地址加上16位的偏移量形成了20位的地址,可以尋址1MB的物理地址。用16位作為地址,
2、它只能表示64KB,是一個(gè)十分小的地址范圍,遠(yuǎn)遠(yuǎn)不能滿足應(yīng)用的需要。因而,于1985年,Intel公司推出了第一個(gè)32位的微處理器 - 80386,開創(chuàng)了微處理器的32位時(shí)代。目前,計(jì)算機(jī)正從32位向64位轉(zhuǎn)移。432位,無論從能表示的數(shù)的范圍,還是能尋址的物理地址,特別是能尋址的物理地址都極大的擴(kuò)展了。使得微處理器能取代以前的所謂“大型機(jī)”,能應(yīng)用于各種領(lǐng)域,從而極大地促進(jìn)了計(jì)算機(jī)在各行各業(yè)中的應(yīng)用。32位地址能尋址4GB物理地址。到目前,仍遠(yuǎn)大于主流計(jì)算機(jī)的實(shí)際內(nèi)存配置,仍有廣闊的應(yīng)用余地。52.從實(shí)模式至保護(hù)模式當(dāng)1981年,IBM公司剛推出IBM-PC時(shí),主頻是5MHz,內(nèi)存是64KB
3、-128KB,沒有硬盤,只有單面單密度的軟盤,到了PC/XT,才有10MB硬盤。在這樣的硬件資源下,采用的操作系統(tǒng)是PC-DOS(MS-DOS)。這是單用戶、單任務(wù)的磁盤操作系統(tǒng)。操作系統(tǒng)本身沒有程序隔離、沒有保護(hù)。這是DOS遭受病毒泛濫的內(nèi)因。隨著PC機(jī)的大量普及,隨著硬件性能的迅速提高。要求有能保護(hù)操作系統(tǒng)核心軟件的多任務(wù)操作系統(tǒng)。為使這樣的操作系統(tǒng)能在微型計(jì)算機(jī)系統(tǒng)中應(yīng)用與普及,要求微處理器本身為這樣的操作系統(tǒng)提供支持。于是,從80286開始,在80386中真正完善保護(hù)模式。在保護(hù)模式下,程序運(yùn)行于四個(gè)特權(quán)級(jí)。這樣,可以實(shí)現(xiàn)操作系統(tǒng)核心程序與應(yīng)用程序的嚴(yán)格的隔離。保護(hù)模式支持多任務(wù)機(jī)制,
4、任務(wù)之間完全隔離。63.片內(nèi)存儲(chǔ)管理單元(MMU)32位地址,可尋址4GB物理地址。但大多數(shù)PC機(jī)的物理內(nèi)存配置遠(yuǎn)小于4GB。但應(yīng)用程序卻需要龐大的地址空間。因此,在操作系統(tǒng)中提供了虛擬存儲(chǔ)器管理機(jī)制,而這要求硬件支持。因而,在80386中提供了片內(nèi)的MMU。提供了4K頁(yè)、頁(yè)表等支持。以上三點(diǎn)是80386相對(duì)于8086的主要功能擴(kuò)展。4.浮點(diǎn)支持工程應(yīng)用、圖形處理、科學(xué)計(jì)算等要求浮點(diǎn)支持(實(shí)數(shù)運(yùn)算)。因此,自80486芯片開始,在x86系列微處理器中集成了x87(及其增強(qiáng))浮點(diǎn)單元。75.MMX技術(shù)為支持多媒體技術(shù)的應(yīng)用,如音樂合成、語音合成。語音識(shí)別、音頻和視頻壓縮(編碼)和解壓縮(譯碼)、
5、2D 和 3D 圖形(包括 3D 結(jié)構(gòu)映像)和流視頻等等。x86系列處理器中增加MMX技術(shù)及相應(yīng)的指令。6.流SIMD擴(kuò)展(SSE) 自Pentium III處理器開始,在x86系列微處理器中引進(jìn)了流SIMD(單指令多數(shù)據(jù))擴(kuò)展(SSE)技術(shù)。SSE擴(kuò)展把由Intel MMX引進(jìn)的SIMD執(zhí)行模式擴(kuò)展為新的128位XMM寄存器和能在包裝的單精度浮點(diǎn)數(shù)上執(zhí)行SIMD操作。8奔騰4處理器又進(jìn)一步擴(kuò)展為流SIMD擴(kuò)展2(SSE2):用144條新指令擴(kuò)展Intel MMX技術(shù)和SSE擴(kuò)展,它包括支持: 128位SIMD整數(shù)算術(shù)操作。 128位SIMD雙精度浮點(diǎn)操作。128 位指令設(shè)計(jì)以支持媒體和科學(xué)應(yīng)
6、用。由這些指令所用的向量操作數(shù)允許應(yīng)用程序在多個(gè)向量元素上并行操作。元素能是整數(shù)(從字節(jié)至四字)或浮點(diǎn)數(shù)(單精度或雙精度)。算術(shù)運(yùn)算產(chǎn)生有符號(hào)的、無符號(hào)的和/或混合的結(jié)果。92.1.2 8086性能的提高x86系列系列芯片的發(fā)展的一個(gè)重要方面是提高性能。1.利用流水線技術(shù)提高操作的并行性提高性能的一個(gè)重要方面是利用超大規(guī)模集成電路的工藝與制造技術(shù)提高芯片的主頻。即減少一個(gè)時(shí)鐘周期的時(shí)間。提高性能的另一重要方面是縮短執(zhí)行指令的時(shí)鐘周期數(shù)。在8086中,利用流水線把取指令與執(zhí)行指令重疊,減少了等待取指令的時(shí)間,從而使大部分指令的執(zhí)行為四個(gè)時(shí)鐘周期。80386利用芯片內(nèi)由6個(gè)能并行操作的功能部件組成
7、,從而使執(zhí)行一條指令縮短為兩個(gè)時(shí)鐘周期。1080486將80386處理器的指令譯碼和執(zhí)行部件擴(kuò)展成五級(jí)流水線,進(jìn)一步增強(qiáng)了其并行處理能力,在五級(jí)流水線中最多可有五條指令被同時(shí)執(zhí)行,每級(jí)都能在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行一條指令,80486微處理器最快能夠在每個(gè)CPU時(shí)鐘周期內(nèi)執(zhí)行一條指令。到了奔騰處理器增加了第二個(gè)執(zhí)行流水線以達(dá)到超標(biāo)量性能(兩個(gè)已知的流水線u和v,一起工作能實(shí)現(xiàn)每個(gè)時(shí)鐘執(zhí)行兩條指令)。Intel Pentium 4處理器是第一個(gè)基于Intel NetBurst微結(jié)構(gòu)的處理器。Intel NetBurst微結(jié)構(gòu)是新的32bit微結(jié)構(gòu),它允許處理器能在比以前的X86系列處理器更高的時(shí)鐘速度
8、和性能等級(jí)上進(jìn)行操作。Intel Pentium 4處理器有快速的執(zhí)行引擎、Hyper流水線技術(shù)與高級(jí)的動(dòng)態(tài)執(zhí)行。使指令執(zhí)行的并行性進(jìn)一步提高,從而做到在一個(gè)時(shí)鐘周期中可以執(zhí)行多條指令。112.引入片內(nèi)緩存(CACHE)隨著超大規(guī)模集成電路技術(shù)的發(fā)展,存儲(chǔ)器的集成度和工作速度都有了極大的提高。但是,相對(duì)于CPU的工作速度仍然至少差一個(gè)數(shù)量級(jí)。為了減少?gòu)拇鎯?chǔ)器中取指令與數(shù)據(jù)的時(shí)間,利用指令執(zhí)行的局部性原理,把近期可能要用到的指令與數(shù)據(jù)放在工作速度比主存儲(chǔ)器更高(當(dāng)然,容量更小)的緩存中。這樣的思想,進(jìn)一步在處理器中實(shí)現(xiàn),即在處理器芯片中實(shí)現(xiàn)了緩存。目前,通常在處理器芯片上有指令和數(shù)據(jù)分開的一級(jí)緩
9、存與指令與數(shù)據(jù)混合的二級(jí)緩存。且緩存的容量越來越大。從而進(jìn)一步提高了處理器的性能。總之,x86系列系列處理器芯片就是沿著這樣的思路發(fā)展的。因此,8086是x86系列系列處理器的基礎(chǔ)。而且,任一種x86系列處理器芯片在上電后,就是處在8086的實(shí)模式。根據(jù)需要,用指令進(jìn)入各種操作模式。所以,學(xué)習(xí)x86系列處理器必須學(xué)習(xí)掌握8086,也只能從8086入手。12從指令,從編程來說,幾乎沒有用匯編語言來使用浮點(diǎn)指令、MMX指令與XMM指令的,都是通過高級(jí)語言來使用這些指令的。因而,絕大部分程序員,除了編寫操作系統(tǒng)代碼的外,面對(duì)x86系列處理器的指令,實(shí)際上是面對(duì)8086指令。因此,本書從8086入手來
10、學(xué)習(xí)與掌握x86系列處理器。13148086/8088 CPU的內(nèi)部結(jié)構(gòu)基本相同均由兩個(gè)獨(dú)立的工作部件組成 一個(gè)稱為執(zhí)行部件(EU) 一個(gè)稱為總線接口部件 (BIU)2.2 8086的功能結(jié)構(gòu)BIU包括:4個(gè)16位的段地址寄存器(CS、DS、SS、ES);1個(gè)16位的指令指針寄存器IP;1個(gè)20位的地址加法器;指令隊(duì)列寄存器;內(nèi)部寄存器;輸入輸出總線控制邏輯;EU包括:4個(gè)16位的通用數(shù)據(jù)寄存器(AX、BX、CX、DX);4個(gè)16位的專用寄存器(BP、SP、SI、DI);1個(gè)16位的標(biāo)志寄存器FR;2.2 8086的功能結(jié)構(gòu)158086CPU從功能上來說分成兩大部分:總線接口單元BIU(Bus
11、 Interface Unit)和執(zhí)行單元EU(Execution Unit)。BIU負(fù)責(zé)8086CPU與存儲(chǔ)器之間的信息傳送。具體地說,即BIU負(fù)責(zé)從內(nèi)存的指定單元取出指令,送至指令流隊(duì)列中排隊(duì)(8086的指令流隊(duì)列是6個(gè)字節(jié));在執(zhí)行指令時(shí)所需的操作數(shù),也由BIU從內(nèi)存的指定區(qū)域取出,傳送給EU部分去執(zhí)行。EU部分負(fù)責(zé)指令的執(zhí)行。其中主要由數(shù)據(jù)寄存器、指針寄存器與算術(shù)邏輯單元(ALU)組成。這樣,取指部分與執(zhí)行指令部分是分開的,于是在一條指令的執(zhí)行過程中,就可以取出下一條(或多條)指令,在指令流隊(duì)列中排隊(duì)。在一條指令執(zhí)行完以后就可以立即執(zhí)行下一條指令,減少了CPU為取指令而等待的時(shí)間,提高
12、了CPU的利用率,提高了整個(gè)運(yùn)行速度。168086CPU外部數(shù)據(jù)總線為16位、指令隊(duì)列為6字節(jié)指令隊(duì)列的設(shè)置使指令的取出與執(zhí)行并行進(jìn)行,以提高了程序的運(yùn)行速度 178086/8088CPU的內(nèi)部結(jié)構(gòu)寄存器是中央處理器內(nèi)的組成部份寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數(shù)據(jù)和地址。指令:確定運(yùn)算與操作數(shù)據(jù):運(yùn)算或讀寫操作的對(duì)象地址:標(biāo)記和確定內(nèi)存空間中具體的存儲(chǔ)位置地址加法器的作用是根據(jù)段寄存器存放的段基地址與EU送出的16位偏移地址計(jì)算得到20位的實(shí)際地址 輸出輸入控制電路實(shí)現(xiàn)總線控制,決定讀或?qū)?、?duì)內(nèi)存或?qū)/O接口 取指令、指令譯碼、產(chǎn)生并傳送操作信號(hào) 18算術(shù)邏輯單元(運(yùn)
13、算器)8個(gè)通用寄存器1個(gè)標(biāo)志寄存器EU部分控制電路執(zhí)行部件EU的組成及作用取指令,指令譯碼執(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ì)列為
14、4個(gè)字節(jié)指令隊(duì)列緩沖器的指令存放狀態(tài)順序指令執(zhí)行:指令隊(duì)列存放緊接在執(zhí)行指令后面的那一條指令執(zhí)行轉(zhuǎn)移指令:立即清除指令隊(duì)列中的內(nèi)容,從新的地址取入指令,并立即送往執(zhí)行單元,然后再?gòu)男聠卧_始重新填滿隊(duì)列實(shí)現(xiàn)CPU的流水線處理操作指令隊(duì)列是用來暫存指令的一組寄存器,按“先進(jìn)先出”原則讀寫。在8086/8088 CPU中,只要指令隊(duì)列未填滿,BIU就從外部存儲(chǔ)器取指令并放入指令隊(duì)列中;另一方面,只要指令隊(duì)列中不空,EU就可將指令隊(duì)列中已有的指令取出執(zhí)行,這樣BIU和EU按并行方式重疊操作,大大提高了CPU的利用率,也降低了CPU對(duì)存儲(chǔ)器、I/O端口存取速度的要求。8086CPU中的指令隊(duì)列緩沖器長(zhǎng)
15、度為6個(gè)字節(jié),而8088CPU只有4個(gè)字節(jié)。21如前所述,在8080與8085以及標(biāo)準(zhǔn)的8位微處理器中,程序的執(zhí)行是由取指和執(zhí)行指令的循環(huán)來完成的。即執(zhí)行的順序?yàn)槿〉谝粭l指令,執(zhí)行第一條指令;取第二條指令,執(zhí)行第二條指令;直至取最后一條指令,執(zhí)行最后一條指令。這樣,在每一條指令執(zhí)行完以后,CPU必須等待到下一條指令取出來以后才能執(zhí)行。所以,它的工作順序如圖2-2所示。但在8086中,由于BIU和EU是分開的,所以,取指和執(zhí)行可以重疊并行。它的執(zhí)行順序如圖2-3所示。于是就大大減少了等待對(duì)取指所需的時(shí)間,提高了CPU的利用率。一方面可以提高整個(gè)程序的執(zhí)行速度,另一方面又降低了與之相配的存儲(chǔ)器的存
16、取速度的要求。這種重疊的操作技術(shù),過去只在大型機(jī)中才使用稱為流水線,在X86系列系列微處理器中得到了廣泛的使用與提高。在遇到系統(tǒng)復(fù)位或執(zhí)行轉(zhuǎn)移指令等特殊情況,指令隊(duì)列被刷新時(shí),EU才需要等待BIU進(jìn)行取指操作?;蛘咴贓U需要操作數(shù)而BIU正忙時(shí), EU需要等待BIU執(zhí)行完當(dāng)前的操作,再去取操作數(shù),等到EU得到操作數(shù)以后,才能進(jìn)行這條指令的執(zhí)行操作。232.3 8086微處理器的執(zhí)行環(huán)境本節(jié)描述匯編語言程序員看到的8086處理器的執(zhí)行環(huán)境。它描述處理器如何執(zhí)行指令及如何存儲(chǔ)和操作數(shù)據(jù)。執(zhí)行環(huán)境包括內(nèi)存(地址空間)、通用數(shù)據(jù)寄存器、段寄存器、標(biāo)志寄存器(EFLAGES)和指令指針寄存器等。242.
17、3.1 基本執(zhí)行環(huán)境概要在8086處理器上執(zhí)行的程序或任務(wù)都有一組執(zhí)行指令的資源用于存儲(chǔ)代碼、數(shù)據(jù)和狀態(tài)信息。這些資源構(gòu)成了8086處理器的執(zhí)行環(huán)境。地址空間。8086處理器上運(yùn)行的任一任務(wù)或程序能尋址1MB(220)字節(jié)的線性地址空間?;境绦驁?zhí)行寄存器。八個(gè)通用寄存器、四個(gè)段寄存器、標(biāo)志寄存器FLAGS和IP(指令指針)寄存器組成了執(zhí)行通用指令的基本執(zhí)行環(huán)境。這些指令執(zhí)行字節(jié)、字整型數(shù)的基本整數(shù)算術(shù)運(yùn)算,處理程序流程控制,在字節(jié)串上操作并尋址存儲(chǔ)器。25堆棧(stack)。為支持過程或子程序調(diào)用并在過程或子程序之間傳遞參數(shù),堆棧和堆棧管理資源包含在基本執(zhí)行環(huán)境中。堆棧定位在內(nèi)存中。I/O端
18、口。8086結(jié)構(gòu)支持?jǐn)?shù)據(jù)在處理器和輸入輸出(I/O)端口之間的傳送。8086處理器的基本執(zhí)行環(huán)境如圖2-4所示。26272.3.2 基本的程序執(zhí)行寄存器處理器為了應(yīng)用程序編程提供了如圖2-4所示的14個(gè)基本程序執(zhí)行寄存器。這些寄存器能分組如下: 通用寄存器。這八個(gè)寄存器能用于存放操作數(shù)和指針。 段寄存器。這些寄存器最多能保存四個(gè)段選擇子。 FLAGS(程序狀態(tài)和控制)寄存器。FLAGS寄存器報(bào)告正在執(zhí)行的程序的狀態(tài),并允許有限地(應(yīng)用程序級(jí))控制處理器。 IP(指令指針)寄存器。IP寄存器包合下一條要執(zhí)行的指令的16位指針。281通用寄存器八個(gè)32位通用寄存器AX、BX、CX、DX、SI、DI
19、、BP和SP用于處理以下項(xiàng): 邏輯和算術(shù)操作的操作數(shù); 用于地址計(jì)算的操作數(shù); 內(nèi)存指針。雖然所有這些寄存器都可用于存放操作數(shù)、結(jié)果和指針,但在引用SP寄存器時(shí)要特別小心。SP寄存器保持堆棧指針,通常不要用于其它目的。2930這些通用寄存器中的前四個(gè),即AX、BX、CX、DX通常稱為數(shù)據(jù)寄存器,用以存放操作數(shù)。后四個(gè),即SI、DI、BP、SP通常稱為指針寄存器。雖然它們也可以存放操作數(shù),但主要用作地址指針。數(shù)據(jù)寄存器AX、BX、CX和DX又可以分別作為AH、BH、CH和DH(高字節(jié))以及AL、BL、CL和DL(低字節(jié))8位寄存器引用,如圖2-5所示。SP是堆棧指針,稱為堆棧指針寄存器,它與段寄
20、存器SS一起確定在堆棧操作時(shí),堆棧在內(nèi)存中的位置。BP(Base Pointer Register),稱作基址指針寄存器,尋址堆棧操作數(shù)時(shí),也是尋址堆棧段。SI(Source Index Register)和DI(Destination Index Register)常用于串操作。SP給出棧頂?shù)钠频刂?。BP則是用來存放位于堆棧段中的一個(gè)數(shù)據(jù)區(qū)基址的偏移地址的。31堆棧是一個(gè)按照后進(jìn)先出(LIFO)的原則存取數(shù)據(jù)的存儲(chǔ)區(qū)域。堆棧的作用是為了在調(diào)用子程序(或轉(zhuǎn)向中斷服務(wù)程序)時(shí),把斷點(diǎn)及有關(guān)的寄存器、標(biāo)志位及時(shí)正確地保存下來,并保證逐次正確返回。利用堆棧指針SP可以實(shí)現(xiàn)對(duì)棧區(qū)的自動(dòng)管理。例如:要
21、把AX寄存器中的內(nèi)容壓入堆棧,用入棧指令PUSH AX(設(shè)SP原值為1000H),其操作過程如下所示:第一步:先把SPlSP,然后把AH(高位字節(jié))送入SP所指單元(即SP=1FFFH);第二步:再次使SP1SP,把AL(低位字節(jié))送至SP所指單元(此時(shí)SP=1FFEH);數(shù)據(jù)出棧操作與入棧過程正相反:彈出時(shí),先把AL內(nèi)容彈出,然后修改SP1SP;再把AH內(nèi)容彈出,再修改SP1SP。322段寄存器段寄存器(CS、DS、SS、ES)保存16位段選擇子。一個(gè)段選擇子是標(biāo)志內(nèi)存中一個(gè)段的特殊指針。為訪問在內(nèi)存中的具體段,此段的段選擇子必須存在于適當(dāng)?shù)亩渭拇嫫髦小.?dāng)寫應(yīng)用程序代碼時(shí),程序用匯編程序的命
22、令和符號(hào)建立段選擇子。然后匯編程序和別的工具建立與這些命令和符號(hào)相關(guān)的實(shí)際段選擇子值。若寫系統(tǒng)代碼,程序員可能需要直接建立段選擇子。當(dāng)使用分段存儲(chǔ)模式時(shí),初始,每一個(gè)段寄存器用不同的段選擇子加載,所以每個(gè)段寄存器指向線性地址空間中的不同的段。如圖2-6所示。任何時(shí)候,一個(gè)程序能訪問多至線性地址空間中的四個(gè)段。為訪問未由一個(gè)段寄存器指向的段,程序必須首先把要訪問的段的段選擇子加載至一個(gè)段寄存器。3334每個(gè)段寄存器與三種存儲(chǔ)類型之一相關(guān):代碼、數(shù)據(jù)或堆棧。例如,CS寄存器包含代碼段的段選擇子,其中存放正在執(zhí)行的指令。處理器用在CS寄存器中的段選擇子和IP寄存器中的內(nèi)容組成的邏輯地址取下一條要執(zhí)行
23、的指令。CS寄存器不能由應(yīng)用程序直接加載,而是由改變程序控制的指令或內(nèi)部處理器指令(例如,過程調(diào)用、中斷處理)隱含加載。DS、ES寄存器指向兩個(gè)數(shù)據(jù)段。兩個(gè)數(shù)據(jù)段的可用性,允許有效而又安全地訪問數(shù)據(jù)結(jié)構(gòu)的不同類型。例如,可只建立兩個(gè)不同的數(shù)據(jù)段:一個(gè)用于當(dāng)前模塊的數(shù)據(jù)結(jié)構(gòu),另一個(gè)用于從較高級(jí)模塊輸出的數(shù)據(jù)。為了訪問附加的數(shù)據(jù)段,應(yīng)用程序必須按需要把這些段的段選擇子加載至DS、ES寄存器中。SS寄存器包含堆棧段的段選擇子。所有的堆棧操作都用SS以找到堆棧段。不像CS寄存器,SS寄存器能顯式加載。它允許應(yīng)用程序設(shè)置多個(gè)堆棧并在堆棧之間切換。353FLAGS寄存器16位FLAGS寄存器包含一組狀態(tài)標(biāo)
24、志、一個(gè)控制標(biāo)志一個(gè)系統(tǒng)標(biāo)志。反映處理器的狀態(tài)和運(yùn)算結(jié)果的某些特征。圖2-7定義了此寄存器中的標(biāo)志。在處理器初始化(由RESET腳或INIT腳有效)之后,F(xiàn)LAGS寄存器是0002H。此寄存器的位1、3、5、12-15保留。軟件不能用或依賴于這些位中的任一個(gè)。FLAGS寄存器中以下指令能用于標(biāo)志組與堆?;駻X寄存器之間的移動(dòng):LAHF、SAHF、PUSHF、POPF。在FLAGS寄存器的內(nèi)容已經(jīng)傳送至過程堆?;駻X寄存器之后,標(biāo)志能作修改。當(dāng)調(diào)用中斷或異常處理時(shí),處理器自動(dòng)保存FLAGS寄存器的狀態(tài)至堆棧上。36(1)狀態(tài)標(biāo)志FLAGS寄存器的狀態(tài)標(biāo)志(位0、2、4、6、7和11)指示算術(shù)指令
25、,例如ADD、SUB、MUL和DIV指令的結(jié)果的一些特征。狀態(tài)標(biāo)志的功能如下: 進(jìn)位標(biāo)志CF(Carry Flag)當(dāng)結(jié)果的最高位(字節(jié)操作時(shí)的D7或字操作時(shí)的Dl5、雙字操作的D31)產(chǎn)生一個(gè)進(jìn)位或借位,則C1,否則為0。這個(gè)標(biāo)志主要用于多字節(jié)數(shù)的加、減法運(yùn)算。移位和循環(huán)指令也能夠把存儲(chǔ)器或寄存器中的最高位(左移時(shí))或最低位(右移時(shí))放入標(biāo)志CF中。 輔助進(jìn)位標(biāo)志AF(Auxitiary Carry Flag)在字節(jié)操作時(shí),則由低半字節(jié)(一個(gè)字節(jié)的低4位)向高半字節(jié)有進(jìn)位或借位,則AF1,否則為0。這個(gè)標(biāo)志用于十進(jìn)制算術(shù)運(yùn)算指令中。37 溢出標(biāo)志OF(Overflow Flag)在算術(shù)運(yùn)算中
26、,帶符號(hào)數(shù)的運(yùn)算結(jié)果超出了8位、16位帶符號(hào)數(shù)能表達(dá)的范圍,即在字節(jié)運(yùn)算時(shí)+127或128,在字運(yùn)算時(shí)+32767或32768此標(biāo)志置位,否則復(fù)位。一個(gè)任選的溢出中斷指令,在溢出情況下能產(chǎn)生中斷。 符號(hào)標(biāo)志SF(Sign Flag)它的值與運(yùn)算結(jié)果的最高位相同。即結(jié)果的最高位(字操作時(shí)為D15)為1,則SF1;否則,SF0。 由于在X86系列結(jié)構(gòu)微處理器中,符號(hào)數(shù)是用補(bǔ)碼表示的,所以S表示了結(jié)果的符號(hào),SF=0為正,SF=1為負(fù)。 奇偶標(biāo)志PF(Parity Flag)若操作結(jié)果中“1”的個(gè)數(shù)為偶數(shù),則PF1,否則PF0。這個(gè)標(biāo)志可用于檢查在數(shù)據(jù)傳送過程中是否發(fā)生錯(cuò)誤。 38 零標(biāo)志ZF(Ze
27、ro Fiag)若運(yùn)算的結(jié)果為0,則ZF1,否則ZF0在這些狀態(tài)標(biāo)志中,只有進(jìn)位標(biāo)志CF能用指令STC(設(shè)置進(jìn)位位)、CLC(清除進(jìn)位位)和CMC(進(jìn)位位取反)直接進(jìn)行修改。也可以用位操作指令(BT、BTS、BTR和BTC)拷貝規(guī)定位至CF標(biāo)志。這些狀態(tài)標(biāo)志允許單算術(shù)操作以產(chǎn)生三種不同數(shù)據(jù)類型的結(jié)果:無符號(hào)整數(shù)、符號(hào)整數(shù)和BCD整數(shù)。若算術(shù)操作的結(jié)果作為無符號(hào)整數(shù)對(duì)待,CF標(biāo)志指示超出范圍(進(jìn)位或借位);若作為符號(hào)整數(shù)(2的補(bǔ)碼值)對(duì)待,OF標(biāo)志指示是否超出范圍;若作為BCD數(shù)對(duì)待,AF標(biāo)志指示進(jìn)位或借位。 SF標(biāo)志指示符號(hào)整數(shù)的符號(hào)。ZF標(biāo)志指示符號(hào)整數(shù)或無符號(hào)整數(shù)是否為0;CF用于與帶進(jìn)位
28、加/減指令一起產(chǎn)生適當(dāng)?shù)倪M(jìn)位或借位。39(2)控制標(biāo)志EFLAGS寄存器的控制標(biāo)志(位8、9、10)指示程序和機(jī)器運(yùn)行的狀況??刂茦?biāo)志的功能如下: 方向標(biāo)志D(Direction Flag) 若用指令置DF1,則引起串操作指令為自動(dòng)減量指令,也就是從高地址到低地址或是“從右到左”來處理串;若使DF0,則串操作指令就為自動(dòng)增量指令。STD和CLD指令分別地設(shè)置和清除 DF 標(biāo)志。 中斷允許標(biāo)志IF(Interrupt-enable Flag)若指令中置IF1,則允許CPU去接收外部的可屏蔽的中斷請(qǐng)求;若使IF0,則屏蔽上述的中斷請(qǐng)求;對(duì)內(nèi)部產(chǎn)生的中斷不起作用。40 追蹤標(biāo)志TF(Trace Fl
29、ag)置IF標(biāo)志,使處理進(jìn)入單步方式,以便于調(diào)試。在這個(gè)方式下,CPU在每條指令執(zhí)行以后,產(chǎn)生一個(gè)內(nèi)部的中斷,允許程序在每條指令執(zhí)行完以后進(jìn)行檢查。414指令指針指令指針(IP)寄存器包含下一條要執(zhí)行的指令在當(dāng)前碼段中的偏移。指向微處理器在程序中順序?qū)ぶ反a段中的下一條指令。通常,它是順序增加的,從一條指令邊界至下一條指令,但在執(zhí)行JMP、Jcc、CALL、RET和IRET等指令時(shí),它可以向前或向后移動(dòng)若干條指令。IP寄存器不能直接由軟件訪問;它由控制傳送指令(例如,JMP、Jcc、CALL和RET)、中斷和異常隱含控制。讀IP寄存器的唯一方法是執(zhí)行一條CALL指令,然后從堆棧中讀指令指針的返
30、回值。IP寄存器能由修改過程堆棧上指令指針的返回值并執(zhí)行返回指令(RET或IRET)來間接修改。422.3.3 存儲(chǔ)器組織處理器在它的總線上尋址的存儲(chǔ)器稱為物理存儲(chǔ)器。物理存儲(chǔ)器按字節(jié)序列組織。每個(gè)字節(jié)賦予一個(gè)唯一的地址,稱為物理地址。物理地址空間的范圍從02201(1MB)的最大值。事實(shí)上設(shè)計(jì)與8086處理器一起工作的任何操作系統(tǒng)和執(zhí)行程序都使用處理器的存儲(chǔ)管理設(shè)施訪問存儲(chǔ)器。這些設(shè)施提供例如分段特性以允許有效地和可靠地管理存儲(chǔ)器。438086有20條地址引線,它的直接尋址能力為2201M字節(jié)。所以,在一個(gè)8086組成的系統(tǒng)中,可以有多達(dá)1M字節(jié)的存儲(chǔ)器。這1M字節(jié)邏輯上可以組織成一個(gè)線性矩
31、陣。地址從00000H到FFFFFH。給定一個(gè)20位的地址,就可以從這1M字節(jié)中取出所需要的指令或操作數(shù);但是,在8086內(nèi)部,這20位地址是如何形成的呢?如前所述,8086內(nèi)部的ALU能進(jìn)行16位運(yùn)算,有關(guān)地址的寄存器如SP、IP,以及BP、SI、DI等也都是16位的,因而8086對(duì)地址的運(yùn)算也只能是16位。這就是說,對(duì)于8086來說,各種尋址方式,尋找操作數(shù)的范圍最多只能是64K字節(jié)。 44所以,整個(gè)1M字節(jié)存儲(chǔ)器以64K為范圍分為若干段。在尋址一個(gè)具體物理單元時(shí),必須要由一個(gè)基地址再加上由SP或IP或BP或SI或DI等可由CPU處理的16位偏移量來形成實(shí)際的20位物理地址。這個(gè)基地址就是
32、由8088中的段寄存器,即代碼段寄存器CS、堆棧段寄存器SS、數(shù)據(jù)段寄存器DS以及附加段寄存器ES中的一個(gè)來形成的。在形成20位物理地址時(shí),段寄存器中的16位數(shù)會(huì)自動(dòng)左移4位,然后與16位偏移量相加,如圖2-8所示。 4546存儲(chǔ)器地址的兩種表示方式物理地址和邏輯地址是兩種存儲(chǔ)單元地址的表示和標(biāo)記方法物理地址:存儲(chǔ)單元所具有的實(shí)際地址由20位二進(jìn)制代碼構(gòu)成邏輯地址:在程序中(指令中)書寫和使用的地址由兩部分構(gòu)成段基地址 :偏移地址例:假設(shè) ( DS)=3200H若指令中給出的偏移地址: 1050H物理地址 = 3200H10H +1050H= 33050H邏輯地址到物理地址的變換例邏輯地址也稱
33、相對(duì)地址或虛擬地址,它是目標(biāo)程序中的地址。物理地址也稱絕對(duì)地址或?qū)嵉刂?,它是物理存貯器的單元地址。物理地址段基地址16偏移地址。BIU中的地址加法器,實(shí)現(xiàn)邏輯地址到物理地址的變換左移4位48每次在需要產(chǎn)生一個(gè)20位地址的時(shí)候,一個(gè)段寄存器會(huì)自動(dòng)被選擇,且能自動(dòng)左移4位再與一個(gè)16位的地址偏移量相加,以產(chǎn)生所需要的20位物理地址。每當(dāng)是取指令的時(shí)候,則自動(dòng)選擇代碼段寄存器CS,再加上由IP所決定的16位偏移量,計(jì)算得到要取的指令的物理地址。每當(dāng)是涉及到一個(gè)堆棧操作時(shí),則自動(dòng)選擇堆棧段寄存器SS,再加上由SP所決定的16位偏移量,計(jì)算得到堆棧操作所需要的20位物理地址。每當(dāng)涉及到一個(gè)操作數(shù),則自動(dòng)
34、選擇數(shù)據(jù)段寄存器DS或附加段寄存器ES,再加上16位偏移量,計(jì)算得到操作數(shù)的20位物理地址。而16位偏移量,可以是包含在指令中的直接地址,也可以是某一個(gè)16位地址寄存器的值,也可以是指令中的位移量加上16位地址寄存器中的值等等,這取決于指令的尋址方式。49在8086系統(tǒng)中,存儲(chǔ)器的訪問,如圖2-9所示。段首地址、段基地址和偏移地址70002H12H70000H0 0 0 0段基地址(16位)段首地址(20位) 偏移地址=0002H每個(gè)段都從低4位為0的存儲(chǔ)單元開始段首地址的高16位稱為段基地址偏移地址為相對(duì)于段首地址的偏移量00H一定為051存儲(chǔ)器的邏輯分段原則 編程時(shí),存儲(chǔ)器單元地址由段地址
35、和偏移量表示,二者結(jié)合稱為邏輯地址。段寄存器16位,存放段起始地址的高16位,稱為段基址,低4位指定為0000B。在存儲(chǔ)器管理中,從0地址單元開始,每16個(gè)字節(jié)為一小段,稱為節(jié)(Paragraph)。節(jié)起始地址的低4位也是0000B,顯然段起始地址必須是節(jié)起始地址。 將段基址左移4位與偏移地址相加,即為某一存儲(chǔ)器單元的物理地址,也稱為絕對(duì)地址。物理地址段基址16偏移地址 52在不改變段寄存器值的情況下,尋址的最大范圍是64KB。所以,若有一個(gè)任務(wù),它的程序長(zhǎng)度、堆棧長(zhǎng)度以及數(shù)據(jù)區(qū)長(zhǎng)度都不超過64KB,則可在程序開始時(shí),分別給DS、SS、ES置值,然后在程序中就可以不再考慮這些段寄存器,程序就可以在各自的區(qū)域中正常地進(jìn)行工作。若某一個(gè)任務(wù)所需的總的存儲(chǔ)器長(zhǎng)度(包括程序長(zhǎng)度、堆棧長(zhǎng)度和數(shù)據(jù)長(zhǎng)度等)不超過64KB,則可在程序開始時(shí)使CS、SS、DS相等,程序也能正常地工作。 53規(guī)則字與非規(guī)則字存放一個(gè)字?jǐn)?shù)據(jù)的低字節(jié)地址如果是偶數(shù)地址,則稱為“規(guī)則字”存放一個(gè)字?jǐn)?shù)據(jù)的低字節(jié)地址如果是奇數(shù)地址,則稱為“非規(guī)則字”存取“規(guī)則字”與“非規(guī)則字”,其操作過程不同(即所使用的總線周期數(shù)不同)54在8086系
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 東莞美容院加盟合同范本
- 個(gè)人房產(chǎn)與中介合同范本
- 先拿貨后付款合同范例
- 2024年吳忠市人民醫(yī)院自主招聘事業(yè)單位工作人員考試真題
- 加盟授權(quán)合同范例范例
- 農(nóng)村空地出售合同范本
- 2024年曲靖六十九醫(yī)院人才招聘考試真題
- 以資抵債合同范本
- 2024年廣州市天河區(qū)體育西路小學(xué)聘用制專任教師招聘考試真題
- 創(chuàng)意園廠房合同范例
- 2025年企業(yè)法務(wù)顧問聘用協(xié)議范本
- 無菌手術(shù)臺(tái)鋪置的細(xì)節(jié)管理
- 《康復(fù)評(píng)定技術(shù)》課件-第五章 運(yùn)動(dòng)控制
- 議論文8(試題+審題+范文+點(diǎn)評(píng)+素材)-2025年高考語文寫作復(fù)習(xí)
- 【理特咨詢】2024生成式人工智能GenAI在生物醫(yī)藥大健康行業(yè)應(yīng)用進(jìn)展報(bào)告
- 2025新人教版英語七年級(jí)下單詞默寫表(小學(xué)部分)
- 2025年春新外研版(三起)英語三年級(jí)下冊(cè)課件 Unit6第1課時(shí)Startup
- 2025江蘇蘇州高新區(qū)獅山商務(wù)創(chuàng)新區(qū)下屬國(guó)企業(yè)招聘9人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 平拋運(yùn)動(dòng)的經(jīng)典例題
- 錄井作業(yè)現(xiàn)場(chǎng)風(fēng)險(xiǎn)評(píng)估及控制措施
- 2025年度商會(huì)工作計(jì)劃
評(píng)論
0/150
提交評(píng)論