《微型計(jì)算機(jī)技術(shù)》第13章 32位微處理器的軟件特點(diǎn)_第1頁
《微型計(jì)算機(jī)技術(shù)》第13章 32位微處理器的軟件特點(diǎn)_第2頁
《微型計(jì)算機(jī)技術(shù)》第13章 32位微處理器的軟件特點(diǎn)_第3頁
《微型計(jì)算機(jī)技術(shù)》第13章 32位微處理器的軟件特點(diǎn)_第4頁
《微型計(jì)算機(jī)技術(shù)》第13章 32位微處理器的軟件特點(diǎn)_第5頁
已閱讀5頁,還剩151頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2023/1/301微型計(jì)算機(jī)技術(shù)WeixinɡJisuɑnjiJishu

(第3版)

2023/1/302

第13章

32位微處理器的

軟件特點(diǎn)2023/1/30332位微處理器的軟件特點(diǎn)

13.1

32位微處理器的存儲(chǔ)器管理

13.1.1

80386的工作方式

13.1.2保護(hù)方式下的存儲(chǔ)管理

13.2

32位指令的尋址方式的特點(diǎn)

13.2.1數(shù)據(jù)的尋址方式

13.2.2轉(zhuǎn)移地址的尋址方式

13.3保護(hù)方式下的尋址方式

13.3.1描述子和選擇子

13.3.2保護(hù)方式下的存儲(chǔ)器尋址過程簡(jiǎn)介

13.3.3保護(hù)方式下的存儲(chǔ)器尋址過程舉例2023/1/30432位微處理器的軟件特點(diǎn)13.4

32位微處理器指令系統(tǒng)簡(jiǎn)介

13.4.1實(shí)方式下的32位微處理器指令系統(tǒng)

13.4.232位微處理器擴(kuò)充指令

13.4.3高級(jí)指令和保護(hù)控制指令

13.4.4

80386新增加的指令

13.4.5

80486新增加的指令

13.4.6

Pentium處理器新增加的指令2023/1/30513.1

32位微處理器的存儲(chǔ)器管理

13.1.1

80386的工作方式

13.1.2保護(hù)方式下的存儲(chǔ)管理2023/1/30613.1.180386的工作方式80386有3種工作方式———

實(shí)方式保護(hù)方式虛擬8086方式2023/1/3071.實(shí)方式又稱實(shí)地址方式。系統(tǒng)啟動(dòng)后,自動(dòng)進(jìn)入實(shí)方式,采用類似8086的體系結(jié)構(gòu)。80386在實(shí)方式下的工作原理和8086的相同,主要差別是80386可以處理32位的數(shù)據(jù),如進(jìn)行32位的寄存器運(yùn)算以及偏移地址在64KB以內(nèi)的32位的數(shù)據(jù)傳送。另外,在實(shí)方式下80386新增加的兩個(gè)段寄存器FS和GS是可用的。實(shí)方式是80386在復(fù)位后立即出現(xiàn)的工作方式,即使是想讓系統(tǒng)運(yùn)行在保護(hù)方式,啟動(dòng)程序(系統(tǒng)初始化或引導(dǎo))也需要在實(shí)方式中運(yùn)行,以便初始化保護(hù)方式。2023/1/308實(shí)方式的主要特點(diǎn)①尋址方式、存儲(chǔ)器管理、中斷處理同8086。②操作數(shù)默認(rèn)為16位,允許訪問32位寄存器。③不使用虛擬存儲(chǔ)器,最大地址范圍仍為1MB,只采用分段部件,每段最大為64KB。④存儲(chǔ)器中保留2個(gè)固定的區(qū)域———

初始化程序區(qū)FFFFFH~FFFF0H和中斷向量表0003FFH~00000H。⑤80386指令集中的絕大多數(shù)指令可以運(yùn)行。2023/1/3092.保護(hù)方式又稱虛方式或虛地址方式?!氨Wo(hù)”是指在執(zhí)行多任務(wù)操作時(shí),對(duì)不同任務(wù)使用的虛擬存儲(chǔ)器空間進(jìn)行完全的隔離,以保證每個(gè)任務(wù)順利地執(zhí)行。系統(tǒng)啟動(dòng)后先進(jìn)入實(shí)方式,在CR0的PE位為1時(shí),完成系統(tǒng)初始化后,立即轉(zhuǎn)入保護(hù)方式。這種方式提供了多任務(wù)環(huán)境下的各種復(fù)雜功能以及對(duì)復(fù)雜存儲(chǔ)器組織的管理機(jī)制。這是80386最常用的方式,只有在此方式下,80386才能發(fā)揮其固有的強(qiáng)大功能。2023/1/3010保護(hù)方式80386在保護(hù)方式下可以訪問4GB的物理存儲(chǔ)空間,段的長(zhǎng)度在啟動(dòng)頁功能時(shí)是4GB,不啟動(dòng)頁功能時(shí)是1MB。頁功能是可選的。在這種方式下,可以引入虛擬存儲(chǔ)器的概念,以擴(kuò)充軟件占用的存儲(chǔ)空間。保護(hù)方式是支持多任務(wù)的方式,提供了一系列的保護(hù)機(jī)制———

任務(wù)地址空間的分離、0~3共4個(gè)特權(quán)級(jí)、有特權(quán)指令、段和頁的訪問權(quán)限(如只讀、只執(zhí)行)和段限檢查。2023/1/3011保護(hù)方式的主要特點(diǎn)①采用虛擬地址空間、線性地址空間和物理地址空間來描述存儲(chǔ)器;通過描述子、選擇子的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)對(duì)內(nèi)存的訪問。②強(qiáng)大的尋址空間。每個(gè)任務(wù)的最大虛擬地址空間可達(dá)64TB。③使用4級(jí)保護(hù)功能,可實(shí)現(xiàn)程序與程序、用戶與用戶、用戶與OS之間的隔離和保護(hù),為多任務(wù)OS提供優(yōu)化支持。④既可進(jìn)行16位運(yùn)算,又可進(jìn)行32位運(yùn)算,只要在保護(hù)方式,就能啟動(dòng)其分頁單元,以支持虛擬內(nèi)存。2023/1/30123.虛擬8086方式虛擬8086方式(又稱V86方式)是既有保護(hù)功能又能執(zhí)行8086代碼的工作方式,是一種動(dòng)態(tài)方式。在這種方式中,80386能夠迅速、反復(fù)地進(jìn)行虛擬8086方式和保護(hù)方式之間的切換,即從保護(hù)方式進(jìn)入虛擬8086方式執(zhí)行8086程序,然后離開虛擬8086方式,進(jìn)入保護(hù)方式繼續(xù)執(zhí)行固有的80386程序。2023/1/3013虛擬8086方式“虛擬8086”是指一個(gè)多任務(wù)的環(huán)境,即模擬多個(gè)8086的工作方式,在此方式下,80386被模擬成多個(gè)8086處理器并行工作。虛擬8086方式允許80386將內(nèi)存劃分成若干部分,每一個(gè)部分由OS分配給不同的應(yīng)用程序,而應(yīng)用程序、數(shù)據(jù)以及內(nèi)存管理程序等部分則存放在所分配的內(nèi)存中。因此OS可根據(jù)“時(shí)間上的平均分配”或“優(yōu)先級(jí)”,分配每個(gè)應(yīng)用程序的執(zhí)行時(shí)間。2023/1/3014虛擬8086方式的主要特點(diǎn)①可執(zhí)行原來采用8086書寫的應(yīng)用程序。②段寄存器的用法同實(shí)方式。③可采用分頁方式,將內(nèi)存以4KB為單位進(jìn)行劃分,4KB為一“頁”,比分段劃分要細(xì),從而可以處理較小的應(yīng)用程序和數(shù)據(jù)段。④應(yīng)用程序在最低特權(quán)的3段上運(yùn)行,80386指令系統(tǒng)中的特權(quán)指令不能使用。2023/1/3015虛擬8086方式虛擬8086方式下線性地址是20位,即1MB空間。但由于線性地址可以通過頁表映射到任何32位物理地址,所以應(yīng)用程序可在80386現(xiàn)有實(shí)際內(nèi)存的任何地方執(zhí)行。在80386多任務(wù)系統(tǒng)中,可以使其中一個(gè)或幾個(gè)任務(wù)使用虛擬8086方式,此時(shí),一個(gè)任務(wù)所用的全部頁面可以定位于某個(gè)物理地址空間,另一個(gè)任務(wù)的頁面可以定位于其他區(qū)域,即每個(gè)虛擬8086方式下的任務(wù)可以轉(zhuǎn)換到物理存儲(chǔ)器的不同位置,這樣把存儲(chǔ)器虛擬化了,故稱為虛擬8086方式。2023/1/30164.實(shí)方式與虛擬8086方式的主要區(qū)別這是兩種類似8086的工作方式。①實(shí)方式的內(nèi)存管理只采用分段,虛擬8086方式既采用分段又采用分頁。②實(shí)方式的最大尋址空間為1MB。虛擬8086方式每個(gè)任務(wù)可在整個(gè)內(nèi)存空間尋址,即1MB的尋址空間可在整個(gè)存儲(chǔ)器范圍移動(dòng)。虛擬8086方式的實(shí)際尋址空間為4GB。2023/1/3017實(shí)方式與虛擬8086方式的主要區(qū)別③實(shí)方式下微處理器的所有保護(hù)機(jī)制都不起作用。不支持多任務(wù)。虛擬8086方式既可運(yùn)行8086程序,又支持多任務(wù)操作。虛擬8086方式可以是80386保護(hù)方式中多任務(wù)操作的一個(gè)任務(wù)。實(shí)方式總是針對(duì)整個(gè)80386系統(tǒng)的。2023/1/301880386的三種工作方式之間的轉(zhuǎn)換

2023/1/301913.1.2保護(hù)方式下的存儲(chǔ)管理存儲(chǔ)管理包含兩大機(jī)制,一是地址轉(zhuǎn)換機(jī)制,二是保護(hù)機(jī)制。地址轉(zhuǎn)換機(jī)制使操作系統(tǒng)可以靈活地把存儲(chǔ)區(qū)域分配給各個(gè)任務(wù),而保護(hù)機(jī)制用來避免系統(tǒng)中的一個(gè)任務(wù)越權(quán)訪問屬于另一個(gè)任務(wù)的存儲(chǔ)區(qū)域或?qū)儆诓僮飨到y(tǒng)的存儲(chǔ)區(qū)域。虛擬地址空間可達(dá)64TB,用戶在程序中所使用的地址都是由“段選擇子”和“偏移量”兩部分組成的虛擬地址。2023/1/30201.地址轉(zhuǎn)換機(jī)制

80386以上的32位微處理器有三種存儲(chǔ)器地址空間———

虛擬地址(邏輯地址)、線性地址和物理地址。32位微處理器工作在保護(hù)方式時(shí),線性地址的地址空間可達(dá)4GB,物理地址空間與線性地址空間相同,而虛擬地址空間可達(dá)64TB。用戶在程序中所使用的地址都是由“段選擇子”和“偏移量”兩部分組成的虛擬地址,程序在系統(tǒng)中運(yùn)行時(shí),由存儲(chǔ)管理機(jī)制把虛擬地址轉(zhuǎn)換成物理地址。2023/1/3021地址轉(zhuǎn)換機(jī)制在80386以上的32位微處理器中集成有MMU(存儲(chǔ)管理部件),這一MMU采用了分段機(jī)制和分頁機(jī)制以實(shí)現(xiàn)兩級(jí)“虛擬地址—

物理地址”的轉(zhuǎn)換,如圖13-2所示。2023/1/3022圖13-2兩級(jí)“虛擬地址—

物理地址”的轉(zhuǎn)換

2023/1/3023地址轉(zhuǎn)換機(jī)制分段機(jī)制實(shí)現(xiàn)虛擬地址到線性地址的轉(zhuǎn)換,它把用戶程序中的64TB的虛擬地址空間分成1~4GB大小不等的存儲(chǔ)分段,并且有實(shí)施段間隔離與保護(hù)的硬件機(jī)構(gòu)。分段存儲(chǔ)管理直接支持高級(jí)語言的模塊化程序設(shè)計(jì)技術(shù),有效地簡(jiǎn)化了操作系統(tǒng)的段式存儲(chǔ)管理和模塊重定位的軟件模塊的設(shè)計(jì)。2023/1/3024地址轉(zhuǎn)換機(jī)制

分頁機(jī)制實(shí)現(xiàn)了線性地址到物理地址的轉(zhuǎn)換,它把用戶的線性地址空間等分為固定大小的塊,每一線性地址塊稱為頁,線性地址以“頁號(hào)頁內(nèi)地址對(duì)”表示。系統(tǒng)也把存儲(chǔ)器物理空間等分成同樣大小、位置固定的塊,每一物理存儲(chǔ)塊稱為頁幀(80386MMU的分頁機(jī)制將4KB大小的頁稱為頁幀)。存儲(chǔ)空間的物理地址也以“頁幀號(hào)頁內(nèi)地址對(duì)”表示。2023/1/3025地址轉(zhuǎn)換機(jī)制為實(shí)現(xiàn)頁面管理,系統(tǒng)為每個(gè)作業(yè)建立一張頁面對(duì)照表———

頁表,頁表內(nèi)記錄了每個(gè)線性地址塊的頁號(hào)和為其分配的物理存儲(chǔ)塊的頁幀號(hào),操作系統(tǒng)頁表實(shí)施線性地址到物理地址的映射。32位微處理器MMU的分頁存儲(chǔ)管理使用二級(jí)頁表變換技術(shù),并在芯片內(nèi)集成有一個(gè)TLB(轉(zhuǎn)換后備緩沖器),這是一個(gè)4路組相連高速緩沖存儲(chǔ)器,其間保存了32個(gè)最近使用的物理頁的頁表項(xiàng)。這種分頁存儲(chǔ)管理機(jī)制有效地加速了從線性地址到物理地址的轉(zhuǎn)換過程外,這一機(jī)制還具有頁級(jí)的違章和保護(hù)作用,從而可以有效地簡(jiǎn)化操作系統(tǒng)的頁面存儲(chǔ)管理軟件模塊的設(shè)計(jì)。2023/1/3026地址轉(zhuǎn)換機(jī)制32位微處理器的分頁機(jī)制和分段機(jī)制都使用駐留在存儲(chǔ)器中的各種表格,規(guī)定各自的轉(zhuǎn)換函數(shù),這些表格具有彼此獨(dú)立的表結(jié)構(gòu),段表存儲(chǔ)在線性地址空間,而頁表存儲(chǔ)在物理地址空間。必須指出的是,這些存儲(chǔ)在存儲(chǔ)器中的表格只允許由操作系統(tǒng)進(jìn)行訪問,應(yīng)用程序不能對(duì)其進(jìn)行修改。操作系統(tǒng)為每一任務(wù)維護(hù)一個(gè)不同的轉(zhuǎn)換表格集,使每個(gè)任務(wù)可使用的地址跨越整個(gè)虛擬地址空間。這樣不僅使每個(gè)任務(wù)具有不同的虛擬地間,并且使任務(wù)之間可以彼此隔離。2023/1/30272.保護(hù)機(jī)制80386以上的32位微處理器支持兩個(gè)主要的保護(hù)機(jī)制:一個(gè)是通過給每個(gè)任務(wù)分配不同的虛擬地址空間,使任務(wù)之間完全隔離,每個(gè)任務(wù)有不同的“虛擬地址—

物理地址”的轉(zhuǎn)換映射;另一個(gè)是任務(wù)內(nèi)的保護(hù)機(jī)制操作,保護(hù)操作系統(tǒng)存儲(chǔ)段及特別的處理器寄存器,使其不能被其他應(yīng)用程序破壞。2023/1/3028保護(hù)機(jī)制在存儲(chǔ)器的虛擬地址空間中僅由一個(gè)任務(wù)占有的虛擬地址空間部分,即不被其他任務(wù)共享的虛擬地址部分,稱為局部地址空間。局部地址空間包含的代碼和數(shù)據(jù)是任務(wù)私有的,需要與系統(tǒng)中的其他任務(wù)相隔離。而各個(gè)任務(wù)公用的一部分虛擬地址空間稱為全局地址空間,操作系統(tǒng)存儲(chǔ)在全局地址空間中,以使操作系統(tǒng)為所有任務(wù)所共享,并且每一任務(wù)可以對(duì)其進(jìn)行訪問,既保護(hù)了操作系統(tǒng),又使其不被應(yīng)用程序破壞。2023/1/3029保護(hù)機(jī)制32位微處理器支持4級(jí)保護(hù)的特權(quán)級(jí)(PrivilegeLevel),如圖13-3所示。特權(quán)級(jí)標(biāo)號(hào)為0~3,其中,0級(jí)為最高特權(quán)級(jí),處于最內(nèi)層,3級(jí)為最低特權(quán)級(jí),處于最外層。每個(gè)存儲(chǔ)段都與一個(gè)特權(quán)級(jí)相聯(lián)系,只有足夠級(jí)別的程序才可對(duì)相應(yīng)的段進(jìn)行訪問。在運(yùn)行程序時(shí),微處理器是從CS寄存器尋址的段中取出指令并執(zhí)行指令的,當(dāng)前活躍代碼段的特權(quán)級(jí)稱為當(dāng)前特權(quán)級(jí)(CurrentPrivilegeLevel,CPL),CPL確定哪些段可由程序訪問。處理器的保護(hù)機(jī)制規(guī)定,對(duì)給定CPL的執(zhí)行程序,只允許訪問同一級(jí)別或外層級(jí)別的數(shù)據(jù)段,若試圖訪問內(nèi)層級(jí)別的數(shù)據(jù)段則屬于非法操作,將產(chǎn)生一個(gè)異常,向操作系統(tǒng)報(bào)告這一違反特權(quán)規(guī)則的操作。2023/1/3030圖13-3特權(quán)級(jí)層次結(jié)構(gòu)

2023/1/3031保護(hù)機(jī)制特權(quán)級(jí)的典型用法是,將操作系統(tǒng)核心放在0級(jí),將操作系統(tǒng)的其余部分放在1~3級(jí):將系統(tǒng)服務(wù)程序放在1級(jí),將應(yīng)用系統(tǒng)服務(wù)程序(OS擴(kuò)展)中間軟件級(jí)放在2級(jí),將應(yīng)用程序放在3級(jí)。這樣,一個(gè)任務(wù)的操作系統(tǒng)程序、中斷服務(wù)程序和其他系統(tǒng)軟件因處于不同的特權(quán)層而得到保護(hù),因而可與應(yīng)用程序在同一地址空間內(nèi)共處而不發(fā)生越權(quán)操作。2023/1/303213.2

32位指令的尋址方式的特點(diǎn)

13.2.1數(shù)據(jù)的尋址方式

13.2.2轉(zhuǎn)移地址的尋址方式2023/1/303313.2.1數(shù)據(jù)的尋址方式所謂指令的尋址方式(AddressingMode)是指在指令中操作數(shù)的表示方式。指令中的操作數(shù)通常有兩類,即操作數(shù)據(jù)和轉(zhuǎn)移地址,下面分別討論這兩種操作數(shù)的相應(yīng)的尋址方式。與數(shù)據(jù)有關(guān)的尋址方式有三大類:立即尋址寄存器尋址存儲(chǔ)器尋址。2023/1/3034立即尋址

(ImmediateAddressing)

當(dāng)操作數(shù)據(jù)就在指令中時(shí),即為立即尋址。這種操作數(shù)稱為立即數(shù),在指令中立即數(shù)可用十六進(jìn)制數(shù)(以H結(jié)尾)、二進(jìn)制數(shù)(以B結(jié)尾)和十進(jìn)制數(shù)(不需加特殊符號(hào))表示,也可以使用用撇號(hào)“′”括起來的ASCII碼的字符和字符串。注意,如果十六進(jìn)制數(shù)以字母A~F打頭,則必須在前面加上一個(gè)“0”,這是匯編程序的要求。2023/1/3035立即尋址在立即尋址中,立即數(shù)為一個(gè)常量,在8086、80286微處理器中,可以是字節(jié)(8位數(shù))或字(16位數(shù)),而在80386以上的微處理器中,立即數(shù)還可以是雙字(32位數(shù))。以使用最頻繁的MOV指令為例說明立即尋址時(shí)操作數(shù)在指令中的表示方法。

2023/1/3036立即尋址8位立即數(shù):

MOV

AL,43H;43H→AL

MOVAL,01000011B;01000011B→AL

MOVAL,67;67→AL16位立即數(shù):

MOVAX,4142H;4142H→AX

MOVAX,0100000101000010B

;0100000101000010B→AX2023/1/3037立即尋址

32位立即數(shù):

MOVAX,16701;16701→AX

MOVEAX,12345678H;12345678H→EAX

字符或字符串:

MOVAL,′A′;41H→AL

(41H為A的ASCII碼)2023/1/30382.寄存器尋址操作數(shù)在寄存器中,即寄存器的內(nèi)容就是操作數(shù)的數(shù)據(jù)。在用匯編語言表示的指令中,以寄存器符號(hào)表示,可用做80X86操作數(shù)的寄存器如表13-1所示。采用寄存器尋址時(shí)要注意如下幾點(diǎn):①當(dāng)指令中的源操作數(shù)和目的操作數(shù)都是寄存器時(shí),必須采用同樣字長(zhǎng)的寄存器,否則匯編時(shí)會(huì)出錯(cuò)。②兩個(gè)操作數(shù)不能同時(shí)為段寄存器。③目的操作數(shù)不能是代碼段寄存器,例如指令“

MOVCS,AX”

,匯編時(shí)沒有出錯(cuò),可得機(jī)器碼為8EC8H,但執(zhí)行時(shí)會(huì)發(fā)生問題。2023/1/3039表13-1寄存器尋址中的寄存器

2023/1/3040寄存器尋址在數(shù)據(jù)的尋址方式中,寄存器尋址方式是一種最普通的方式,使用最方便,匯編后的機(jī)器碼長(zhǎng)度最短。另外,由于寄存器是在處理器內(nèi)部,整個(gè)操作都在處理器內(nèi)部進(jìn)行,不需訪問內(nèi)存的總線周期,因此其執(zhí)行速度最快。2023/1/3041寄存器尋址寄存器尋址時(shí)操作數(shù)在指令中的表示方法。8位操作:

MOV

BL,AL

16位操作:

MOVBX,AX

32位操作:

MOVEBX,EAX

2023/1/3042寄存器尋址而以下指令是非法的:

MOVBL,AX

MOVSS,DS

MOVCS,AX2023/1/30433.存儲(chǔ)器尋址存儲(chǔ)器尋址的指令操作數(shù)在存儲(chǔ)器中,處理器要訪問存儲(chǔ)器操作數(shù),必須先計(jì)算操作數(shù)的物理地址(PhysicalAddress,PA),在32位系統(tǒng)中物理地址的形成與16位系統(tǒng)是不同的,32位系統(tǒng)中,存儲(chǔ)器尋址的能力有所增強(qiáng)2023/1/304432位系統(tǒng)中的存儲(chǔ)器尋址80386以上的32位微處理器的基本存儲(chǔ)單元是字節(jié),都是字節(jié)編址的結(jié)構(gòu),32位微處理器可以訪問字節(jié)(8位)信息、字(16位)信息和雙字(32位)信息。一個(gè)16位的字信息存儲(chǔ)在存儲(chǔ)器的兩個(gè)連續(xù)單元中,高字節(jié)存儲(chǔ)在高地址,低字節(jié)存儲(chǔ)在低地址。一個(gè)32位的雙字信息存儲(chǔ)在存儲(chǔ)器的4個(gè)連續(xù)單元中,最高字節(jié)存放在最高地址,最低字節(jié)存放在最低地址。字或雙字的地址由其最低字節(jié)的存放地址給出。除上述字節(jié)、字和雙字外,還用兩種更大的存儲(chǔ)單位———

段(Segment)和頁(Page)

。2023/1/304532位系統(tǒng)中的存儲(chǔ)器尋址32位系統(tǒng)(80386以上的系統(tǒng))的存儲(chǔ)器可以分為一個(gè)或多個(gè)可變長(zhǎng)度的段,它們可以同磁盤交換信息,或由若干程序所共享。對(duì)于邏輯模塊組織存儲(chǔ)而言,分段是應(yīng)用程序員的有效工具,每個(gè)段的最大容量為4GB。存儲(chǔ)器還可組織成一個(gè)或多個(gè)容量為4KB的頁,特別在多用戶、多任務(wù)操作系統(tǒng)中,分頁是系統(tǒng)程序員管理一個(gè)系統(tǒng)的物理存儲(chǔ)器的有用工具。32位系統(tǒng)的存儲(chǔ)器采用分段和分頁的工具為系統(tǒng)設(shè)計(jì)員提供了極大的靈活性。2023/1/3046三種存儲(chǔ)器地址空間32位系統(tǒng)中有三種存儲(chǔ)器地址空間———

邏輯地址線性地址物理地址這三種地址的關(guān)系如圖13-4所示。2023/1/3047圖13-4地址空間的轉(zhuǎn)換

2023/1/30481)邏輯地址又稱虛擬地址,由一個(gè)選擇子(段選擇子)和一個(gè)偏移量組成,偏移量是在尋址方式中求得的有效地址EA。32位系統(tǒng)中每個(gè)任務(wù)最大可以包含由16K個(gè)選擇子確定的16個(gè)存儲(chǔ)段,每個(gè)存儲(chǔ)段最大為4GB(即由32位偏移量確定),從而每個(gè)任務(wù)可以有64TB的邏輯地址空間。2023/1/30492)線性地址32位微處理器芯片內(nèi)的分段部件將邏輯地址空間轉(zhuǎn)換為32位的線性地址空間。分段部件如何完成從邏輯地址到線性地址的轉(zhuǎn)換是處理器的實(shí)方式和保護(hù)方式的主要區(qū)別。在實(shí)方式下,段寄存器中的內(nèi)容就是段基值,把段基值左移4位形成20位的段基地址,加上16位的偏移量,形成線性地址。而在保護(hù)方式下,每個(gè)選擇子都有一個(gè)32位的線性基地址與之相聯(lián)系。段寄存器的內(nèi)容中有一個(gè)INDEX(描述子入口變址值),由該值可以從全局描述子表或局部描述子表中讀出相應(yīng)的線性基地址,然后同32位的偏移量相加,從而形成最后的線性地址。2023/1/30503)物理地址32位微處理器芯片內(nèi)的分頁部件將存儲(chǔ)單元的線性地址空間轉(zhuǎn)換為物理地址空間,物理地址空間就是處理器芯片的引腳上出現(xiàn)的地址。如果不允許分頁部件操作,則分段部件轉(zhuǎn)換后的32位線性地址即為物理地址。2023/1/305132位的尋址方式的特點(diǎn):①通用寄存器(EAX、EBX、ECX、EDX、EBP、ESP、ESI和EDI)都可用做基址寄存器,用于修改內(nèi)存地址。②通用寄存器除ESP外都可用做變址寄存器。③能以1、2、4或8的比例因子對(duì)變址值進(jìn)行換算,以便于對(duì)數(shù)組結(jié)構(gòu)的尋址。2023/1/30529種存儲(chǔ)器尋址方式32位系統(tǒng)提供了9種存儲(chǔ)器尋址方式,這9種尋址方式提供了操作數(shù)所在的存儲(chǔ)單元的有效地址。存儲(chǔ)單元的段基地址和有效地址EA(即偏移地址)組成存儲(chǔ)單元的線性地址(LinearAddress),在32位微處理器中,線性地址經(jīng)過分頁部件(PagingUnit,PU)后生成物理地址。線性地址的形成如圖13-5所示。2023/1/30539種存儲(chǔ)器尋址方式2023/1/30549種存儲(chǔ)器尋址方式段基地址由某一個(gè)段寄存器對(duì)應(yīng)的描述子寄存器確定,而有效地址EA由基址寄存器、變址寄存器、位移量和比例因子4部分按一定表達(dá)式組合而成:EA=[基址寄存器]+[變址寄存器]×

[比例因子]+[位移量]2023/1/30559種存儲(chǔ)器尋址方式式中各組成部分的說明如下:①位移量———

為指令中提供的一個(gè)8位或16位值。②基址寄存器———

通用寄存器都可用做基址寄存器,其內(nèi)容即基址值,通常為編譯器所用,指向局部變量區(qū)的首地址。③變址寄存器———

除ESP之外的所有通用寄存器都可用做變址寄存器,其內(nèi)容即為變址值,變址寄存器用于訪問數(shù)組元素或字符串。④比例因子———

變址寄存器的值可以乘以1、2、4

或8(對(duì)應(yīng)于操作數(shù)的長(zhǎng)度為1、2、4

或8?jìng)€(gè)字節(jié))的比例因子,這種尋址方式對(duì)于訪問數(shù)組或結(jié)構(gòu)特別有用。2023/1/3056表13-2

32位系統(tǒng)中存儲(chǔ)器尋址表

2023/1/30579種存儲(chǔ)器尋址方式例如:①指令“

MOVEAX,DWORDI”為直接尋址,將雙字單元DWORDI中的雙字?jǐn)?shù)據(jù)傳送到32位寄存器EAX中。②指令“

MOVAL,[ECX]”為寄存器間接尋址,將數(shù)據(jù)段中由ECX尋址的存儲(chǔ)單元中的1個(gè)字節(jié)數(shù)據(jù)傳送到8位寄存器AL中。③指令“

MOVBX,[EAX+40H]”為基址尋址或變址尋址,將數(shù)據(jù)段中EAX+40H確定的存儲(chǔ)單元中的字?jǐn)?shù)據(jù)傳送到16位寄存器BX中。2023/1/30589種存儲(chǔ)器尋址方式

④指令“

MOVEAX,[4×ECX]”為比例變址尋址,將數(shù)據(jù)段中有效地址EA為ECX×4的存儲(chǔ)單元中的雙字?jǐn)?shù)據(jù)傳送到32位寄存器EAX中。⑤指令“

MOVEAX,[EBX+ECX]”為基址變址尋址,將數(shù)據(jù)段中有效地址為EBX+ECX的存儲(chǔ)單元中的雙字?jǐn)?shù)據(jù)傳送到32位寄存器EAX中。2023/1/30599種存儲(chǔ)器尋址方式

⑥指令“

MOVAL,[EBX+2×EDI]”為基址比例變址尋址,將數(shù)據(jù)段中有效地址為EBX+2×EDI的存儲(chǔ)單元中的1個(gè)字節(jié)的數(shù)據(jù)傳送到8位寄存器AL中。⑦指令“MOVEAX,[EBX+ECX+2]”為基址變址位移尋址,將數(shù)據(jù)段中有效地址為EBX+ECX+2的存儲(chǔ)單元中的雙字?jǐn)?shù)據(jù)傳送到32位寄存器EAX中。⑧指令“

MOVAL,[EBX+2×EDI-2]”為基址比例變址位移尋址,將數(shù)據(jù)段中有效地址為EBX+2×EDI-2的存儲(chǔ)單元中的1個(gè)字節(jié)的數(shù)據(jù)傳送到8位寄存器AL中。2023/1/306013.2.3轉(zhuǎn)移地址的尋址方式控制轉(zhuǎn)移指令使程序不再順序執(zhí)行,而是按指令中給出的操作數(shù)轉(zhuǎn)移到相應(yīng)的目的地址,控制轉(zhuǎn)移指令中的操作數(shù)是轉(zhuǎn)移的目的地址,稱為轉(zhuǎn)移地址,它的尋址方式有三種,即直接尋址、寄存器尋址和存儲(chǔ)器尋址。2023/1/30611.直接尋址指令中直接給出轉(zhuǎn)移地址,通常給出的是符號(hào)地址———

標(biāo)號(hào)(Label),例如,指令JMPSTART中的標(biāo)號(hào)START即轉(zhuǎn)移地址的符號(hào)表示。標(biāo)號(hào)有三種屬性———

段屬性、偏移量屬性和類型屬性。段屬性和偏移量屬性就是該標(biāo)號(hào)所指向的指令的段基址與段內(nèi)偏移量,而類型屬性有“遠(yuǎn)”(FAR)和“近”(NEAR)兩種,遠(yuǎn)型標(biāo)號(hào)可供段間轉(zhuǎn)移,近型標(biāo)號(hào)僅供段內(nèi)轉(zhuǎn)移。如果JMPSTART指令的下一條指令同標(biāo)號(hào)START的距離在-128~+127之間,則在操作數(shù)START前加運(yùn)算符SHORT,即指令書寫為JMPSHORTSTART,稱為短跳轉(zhuǎn)。2023/1/30622.寄存器尋址指令中給出寄存器名,該寄存器的內(nèi)容即轉(zhuǎn)移的目的地址,僅用于段內(nèi)轉(zhuǎn)移。例如指令JMPBX,該指令執(zhí)行時(shí)BX→IP,由于是段內(nèi)轉(zhuǎn)移,CS值不變,為原段地址。作為目標(biāo)地址的寄存器可以是16位寄存器AX、BX、CX、DX、SP、BP、SI和DI,在32位微處理器中,擴(kuò)展寄存器也可用做轉(zhuǎn)移指令的轉(zhuǎn)移地址。例如指令JMPEAX,轉(zhuǎn)移到當(dāng)前代碼段中的某一指令處,該指令所在存儲(chǔ)單元的偏移地址為ECX的內(nèi)容。2023/1/30633.存儲(chǔ)器尋址指令中給出內(nèi)存的有效地址EA,轉(zhuǎn)移去的目的地址在數(shù)據(jù)段的內(nèi)存單元中,其目的地址由EA指出。例如,指令JMPDWORDPTR[BX]為段間轉(zhuǎn)移,其目的地址為由EA指出的雙字?jǐn)?shù)據(jù),即

IP←[EA+1]:[EA]

CS←[EA+3]:[EA+2][]中的寄存器可以是BX、BP、DI或SI,也可以用其中任一個(gè)寄存器加上位移量作為EA。另外,也可用變量加上寄存器來表示。2023/1/3064存儲(chǔ)器尋址例如指令JMPTABLEI[BX],轉(zhuǎn)移到當(dāng)前代碼段的某一指令處,該指令的偏移地址為數(shù)據(jù)段中以TABLEI+BX為有效地址的存儲(chǔ)單元中的內(nèi)容,TABLEI為變量名。注意:采用存儲(chǔ)器尋址的程序轉(zhuǎn)移指令除非用FARPTR或DWORDPTR等偽操作指明為一條段間轉(zhuǎn)移指令外,一般匯編程序默認(rèn)轉(zhuǎn)移指令為段內(nèi)轉(zhuǎn)移。例如,指令JMP[BX]和指令JMP[BX+50H]以及指令JMPTABELI[BX]都是段內(nèi)轉(zhuǎn)移指令(TABELI一般為字變量),而指令JMPFARPTR[BX]和指令JMPDWORDPTR[BX]都是段間轉(zhuǎn)移指令。2023/1/306513.3保護(hù)方式下的尋址方式

13.3.1描述子和選擇子

13.3.2保護(hù)方式下的存儲(chǔ)器尋址過程簡(jiǎn)介

13.3.3保護(hù)方式下的存儲(chǔ)器尋址過程舉例2023/1/306613.3.1描述子和選擇子在保護(hù)方式下,80386以上的32位微處理器的存儲(chǔ)空間由可變長(zhǎng)度的段組成,每個(gè)段由可以多達(dá)4GB的相鄰字節(jié)序列組成。段與段之間相互獨(dú)立,段的位置不受限制,段與段之間可以連續(xù)排列,也可以不連續(xù),還可以重疊,每一個(gè)段的起始地址稱為段基地址(SegmentBaseAddress)或段地址,段的長(zhǎng)度稱為段限(Limit)。80386微處理器采用“段描述子”和“段選擇子”的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)保護(hù)方式下的存儲(chǔ)器操作數(shù)的尋址。段描述子(SegmentDescriptor)又稱為段描述符,用來描述對(duì)應(yīng)存儲(chǔ)段的一些基本特性,段描述子的格式如圖13-6所示。2023/1/3067圖13-6段描述子

2023/1/3068段描述子其中:

BASE———

段基地址或者段地址,為段的起始地址。

LIMIT———

段限,段的長(zhǎng)度、范圍邊界。

P———

存在位,為1表示存在(在實(shí)內(nèi)存中),為0表示不存在。

DPL———

描述子特權(quán)級(jí),0~3。

S———

段描述子,為1表示代碼或數(shù)據(jù)描述子,為0表示系統(tǒng)描述子2023/1/3069段描述子TYPE———

段的類型。

A———

已訪問位,為1表示已經(jīng)訪問過。

G———

粒度位,段限所用單位,

為1表示頁(4KB),

為0表示字節(jié)。

B/D———

默認(rèn)操作數(shù)大小,

為0表示16位,

為1表示32位(僅用于代碼段描述子)。2023/1/3070段描述子表在保護(hù)方式下,80386微處理器常用三類描述子(全局描述子、局部描述子和中斷描述子)來描述程序中所使用的各種存儲(chǔ)段的特性,這些描述子分別存放在三種段描述子表(全局描述子表、局部描述子表和中斷描述子表)之中,所有這些表都是變長(zhǎng)的數(shù)組,其長(zhǎng)度在8B~64KB之間,存放在內(nèi)存中。每個(gè)表最多可以容納8192(213)個(gè)8B的段描子,用戶程序使用的虛擬地址(邏輯地址)存儲(chǔ)空間由全局描述子表和局部描述子表定義的存儲(chǔ)分段組成。每個(gè)段的最大可尋址存儲(chǔ)空間是4GB(232),所以處理器為用戶提供了2×8K×4GB=64TB(246B)的虛擬地址空間。2023/1/3071全局描述子表全局描述子表(GlobalDescriptorTable,GDT)定義了能被系統(tǒng)中所有任務(wù)公用的存儲(chǔ)分段,可以避免對(duì)同一系統(tǒng)服務(wù)程序的不必要的重復(fù)定義與存儲(chǔ)。GDT中包含了除中斷服務(wù)程序所在的段以外的所有類型存儲(chǔ)分段的描述符。通常在GDT中包含了操作系統(tǒng)使用的代碼段、數(shù)據(jù)段、任務(wù)狀態(tài)段以及系統(tǒng)中各個(gè)LDT所在段的段描述子。一個(gè)系統(tǒng)只能有一個(gè)GDT。2023/1/3072局部描述子表局部描述子表(LocalDescriptorTable,LDT)包含了與某個(gè)任務(wù)相關(guān)聯(lián)的段描述子,在設(shè)計(jì)操作系統(tǒng)時(shí),通常每個(gè)任務(wù)有一個(gè)獨(dú)立的LDT。LDT提供了將一個(gè)任務(wù)的代碼段、數(shù)據(jù)段與操作系統(tǒng)的其余部分相隔離的機(jī)制。2023/1/3073中斷描述子表中斷描述子表(InterruptDescriptorTable,IDT)最多包含256個(gè)中斷服務(wù)程序的位置的描述子。為容納Intel保留的32個(gè)中斷描述子,IDT的長(zhǎng)度至少應(yīng)有256B,系統(tǒng)所使用的每種類型的中斷在IDT中必須有一個(gè)描述子表項(xiàng),IDT的表項(xiàng)通過中斷指令、外部中斷和異常事件來訪問。2023/1/3074描述子表GDT在內(nèi)存中的位置及其長(zhǎng)度由全局描述子表寄存器GDTR給出,這是一個(gè)48位寄存器,其高32位存放了GDT的基地址,低16位存放了GDT的長(zhǎng)度(段限),GDTR同GDT的關(guān)系如圖13-7所示。同樣IDT在內(nèi)存中的位置及長(zhǎng)度也由一個(gè)中斷描述子表寄存器IDTR給出,IDTR同LDT的關(guān)系如圖13-8所示。2023/1/3075圖13-7GDTR與GDT

2023/1/3076圖13-8

IDTR與IDT

2023/1/3077LDTLDT的定位與GDT的不同,LDT的段基址與段限由LDT描述子表示,該描述子同一般的段描述子一樣存放在全局描述子表中,因此首先要從GDT中找到LDT描述子。80386微處理器中有一個(gè)局部描述子表寄存器LDTR,這是一個(gè)16位寄存器,LDTR中存放著一個(gè)稱為段選擇子(SegmentSelector)的16位數(shù),段選擇子用來在GDT中尋找LDT描述子,LDTR同LDT的關(guān)系如圖13-9所示。2023/1/3078IDTR與IDT在保護(hù)方式下,要訪問某一存儲(chǔ)段,必須知道該存儲(chǔ)段所對(duì)應(yīng)的段描述子,而段描述子是以8B長(zhǎng)的數(shù)據(jù)結(jié)構(gòu)存放在GDT或LDT中的,要找到該描述子,首先要知道該描述子在GDT或LDT中置。在32位微處理器中采用一種稱為段選擇子的數(shù)據(jù)結(jié)構(gòu),它是一個(gè)16位數(shù),存放在要訪問的存儲(chǔ)段所對(duì)應(yīng)的段寄存器(CS、DS、SS、ES、FS、GS)中,當(dāng)一個(gè)段選擇子的值裝入段寄存器時(shí),處理器自動(dòng)地從LDT或GDT中選擇一個(gè)段描述子,經(jīng)調(diào)整后得到對(duì)應(yīng)的段描述子寄存器(又稱段高速緩存器)。段選擇子、段描述子寄存器以及LDT或GDT的關(guān)系如圖13-10所示。2023/1/3079圖13-9

LDTR與LDT

2023/1/3080圖13-10段選擇子與段描述子寄存器

2023/1/3081

段選擇子的格式

段選擇子的格式如圖13-11所示。其中:

INDEX———

13位長(zhǎng)的選擇子變址(索引)值,據(jù)此值到GDT或LDT中查找對(duì)應(yīng)的描述子。

TI(TableIndex)———

1位長(zhǎng)的表指示符。TI=1時(shí),在LDT中;TI=0時(shí),在GDT中。

RPL(RequestPrivilegeLevel)———

2位長(zhǎng)的段選擇子的請(qǐng)求特權(quán)級(jí)。2023/1/3082圖13-11段選擇子

2023/1/308313.3.2保護(hù)方式下的存儲(chǔ)器

尋址過程簡(jiǎn)介

①準(zhǔn)備工作———

進(jìn)行描述子表的定義。在進(jìn)入保護(hù)方式前,用LGDT指令裝入GDTR,以定義GDT,如圖13-12所示。在保護(hù)方式下,用LLDT指令裝入LDTR,LDTR中為16位的選擇子,再按此選擇子從GDT中選擇LDT描述子,并由LDT描述子定義LDT。2023/1/3084圖13-12

GDT的定義2023/1/3085尋址過程簡(jiǎn)介②給定一個(gè)48位虛擬地址指針(程序的邏輯地址),通過選擇子、描述子數(shù)據(jù)結(jié)構(gòu)以及全局描述子表GDT和局部描述子表LDT實(shí)現(xiàn)從虛擬地址到線性地址的轉(zhuǎn)換。

a.48位虛擬地址指針中的16位為段選擇子,可通過MOV指令對(duì)有關(guān)段寄存器(DSSS、ES、FS、GS)賦值來設(shè)置,32位偏移量由指令的尋址方式指定。

b.從段寄存器中取出選擇子。

2023/1/3086尋址過程簡(jiǎn)介

c.選擇子中TI=0時(shí),則描述子在GDT中,進(jìn)入步驟⑤。

d.選擇子中TI=1時(shí),則描述子在LDT中:

.從LDTR中取出用于LDT的選擇子。

.從選擇子中取出Index,左移3位(×8)。

.計(jì)算8×Index+GDT的段基地址,從GDT中取出該LDT的描述子。

.從描述子中取出的LDT的段基地址就是LDT的表地址。2023/1/3087尋址過程簡(jiǎn)介

e.取出段寄存器中選擇子的Index×8加到LDT或GDT的表地址中,從LDT或GDT中取出描述子。

f.在LDT或GDT中找到的描述子上取出段基地址。

g.48位地址指針中用“偏移地址+段基地址”得到32位的線性地址。2023/1/3088圖13-13分段機(jī)制實(shí)現(xiàn)地址轉(zhuǎn)換2023/1/3089尋址過程簡(jiǎn)介必須指出的是,在轉(zhuǎn)換過程中還需要注意以下幾點(diǎn):第一,步驟e中Index×8后的值要與LDTR或GDTR中的表進(jìn)行限值比較,看是否超過。如未超過,處理器的保護(hù)機(jī)制還需對(duì)該描述子的訪問權(quán)進(jìn)行檢查,若該描述子的訪問是合法的,處理器就自動(dòng)地把該描述子中所要訪問存儲(chǔ)段的基地址、段限和訪問權(quán)字節(jié)裝入相應(yīng)段寄存器的Cache寄存器(段描述子寄存器)中。第二,步驟e后,用已經(jīng)裝入Cache的訪問權(quán)字節(jié)中的類型字段所規(guī)定的內(nèi)容,對(duì)有關(guān)的存儲(chǔ)段引用請(qǐng)求進(jìn)行檢查,同時(shí)還要對(duì)地址指針中的偏移量進(jìn)行檢查,以便確定該偏移量是否超出為該存儲(chǔ)段所規(guī)定的段限,若未超過,則進(jìn)入步驟⑦。2023/1/3090尋址過程簡(jiǎn)介

③分頁機(jī)制采用了二級(jí)分頁方案,查2個(gè)表———

頁目錄表和頁表,將32位線性地址映射到32位物理地址,這一映射機(jī)制如圖13-14所示,具體過程在“操作系統(tǒng)”課程中論述。2023/1/3091圖13-14二級(jí)分頁機(jī)制13.3.3保護(hù)方式下的存儲(chǔ)器

尋址過程舉例1.給出條件1)虛擬地址指針

4732310005AH00010000HSelecterOffset2023/1/30922023/1/309313.3.3保護(hù)方式下的存儲(chǔ)器

尋址過程舉例

1.給出條件1)虛擬地址指針

13.3.3保護(hù)方式下的存儲(chǔ)器

尋址過程舉例2023/1/3094尋址過程舉例2)全局描述子表首地址(表基地址)和表長(zhǎng)度(表限)4732310005AH00010000H(表限)(表基地址)

2023/1/30952023/1/3096尋址過程舉例2)全局描述子表首地址(表基地址)和表長(zhǎng)度(表限)

尋址過程舉例2023/1/30972023/1/3098尋址過程舉例3)全局描述子表中給出4個(gè)描述子,分別如下:訪問權(quán)段限段基地址表內(nèi)地址偏移量0A3H20000H00056000H50H0A2H30000H00046000H58H8A2H20000H00076000H60H8A3H30000H00086000H68H尋址過程舉例2023/1/30993)全局描述子表中給出4個(gè)描述子訪問權(quán)段限段基地址表內(nèi)地址偏移量尋址過程舉例2023/1/301002023/1/30101尋址過程舉例

2.準(zhǔn)備工作———

定義描述子表1)在實(shí)方式用LGDT指令裝入GDTR

LGDTQWORDPTRn

n=1000000000FFH高32位(10000000H)送GDTR中的表基地址。低16位(00FFH)送GDTR中的表限。2023/1/30102尋址過程舉例

2)在保護(hù)方式,用LLDT指令裝入LDTR

LDTR為16位選擇子。本題中的描述子在全局描述子表中,故本步可省略。2023/1/30103尋址過程舉例

3.求解過程①虛擬地址指針中的Selector值可由MOV指令對(duì)DS、SS、ES、PS、GS賦值。

Offset由指令尋址方式指定在本題中由下述指令給出:

MOV

AX,005A(chǔ)H

MOV

DS,AX

MOV

AL,[00010000H]2023/1/30104尋址過程舉例

②從段寄存器中取出選擇子:005A(chǔ)H=0000000001011010B,從中取出高13位0000000001011(0BH),左移3位(即×8)得到58H,從005A(chǔ)H的D2位為0可知對(duì)應(yīng)段的描述子在全局描述子表中。③GDT的表基地址10000000H+58H=10000058H,從GDT中取出對(duì)應(yīng)的描述子(如下所示),2023/1/30105尋址過程舉例從描述子中取出段基地址00046000H。④48位地址指針中Offset+段基地址得到32位的線性地址:00046000H+00010000H=00056000H2023/1/3010613.4

32位微處理器指令系統(tǒng)簡(jiǎn)介

13.4.1實(shí)方式下的32位微處理器指令系統(tǒng)

13.4.2

32位微處理器擴(kuò)充指令

13.4.3高級(jí)指令和保護(hù)控制指令

13.4.4

80386新增加的指令

13.4.5

80486新增加的指令

13.4.6

Pentium處理器新增加的指令2023/1/3010732位微處理器指令系統(tǒng)簡(jiǎn)介在第3章3.1節(jié)中詳細(xì)介紹了8086微處理器的指令系統(tǒng),這是對(duì)80286以上微處理器(包括全部32位80X86微處理器)都適用的指令集,本小節(jié)在此基礎(chǔ)上對(duì)80386以上的32位微處理器的指令系統(tǒng)作一簡(jiǎn)單介紹,包括實(shí)方式下的指令系統(tǒng)以及保護(hù)方式下的指令系統(tǒng)。80386以上的32位微處理器有三種基本的工作方式,即實(shí)方式、保護(hù)方式和虛擬8086方式。這一系列的32位微處理器的指令系統(tǒng)包含了8086微處理器的全部指令系統(tǒng),同時(shí)針對(duì)各類32位微處理器的硬件結(jié)構(gòu),擴(kuò)充和增加了許多指令。2023/1/3010813.4.1實(shí)方式下的32位微處理器

指令系統(tǒng)8086的目標(biāo)代碼程序可以不加修改地在8086以上的32位微處理器的實(shí)方式下正常運(yùn)行,但是32位微處理器的指令系統(tǒng)在實(shí)方式下有許多擴(kuò)充。32位微處理器提供了32位寄存器,支持32位地址尋址,可以使用32位偏移量來進(jìn)行存儲(chǔ)器尋址,還可以使用32位通用寄存器EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP作為基址寄存器和變址寄存器(除ESP外)。2023/1/30109實(shí)方式下的32位微處理器指令系統(tǒng)32位微處理器在實(shí)方式下的物理地址最多有21位有效位———

可在000000H~1FFFEFH范圍內(nèi)尋址(因?yàn)椋常参晃⑻幚砥鲗?shí)際上使用32位地址訪問存儲(chǔ)器)。例如,欲訪問FFFFH:FFFFH內(nèi)存單元,在8086系統(tǒng)中,CPU計(jì)算物理地址得到10FFEFH,舍棄最高位1,訪問0FFEFH單元,而在32位系統(tǒng)中,CPU計(jì)算物理地址得到1FFEFH,即訪問10FFEFH內(nèi)存單元。2023/1/30110實(shí)方式下的32位微處理器指令系統(tǒng)

擴(kuò)大了以下指令的工作范圍。(1)LFSreg,mem將指針mem裝入reg和FS,reg可以是16位,也可以是32位。(2)LGSreg,mem將指針mem裝入reg和FS,reg可以是16位,也可以是32位。

2023/1/30111擴(kuò)大了以下指令的工作范圍(3)LSSreg,mem將指針mem裝入reg和SS,reg可以是16位,也可以是32位。(4)JECXZdest

ECX=0,轉(zhuǎn)移到dest所指的目的地址。(5)PUSHFS、PUSHGS、POPFS和POPGS

FS、GS寄存器進(jìn)棧、出棧指令。2023/1/30112實(shí)方式下的32位微處理器指令系統(tǒng)

(6)PUSHA/PUSHAD將全部通用寄存器進(jìn)棧,進(jìn)棧次序?yàn)锳X、CX、DX、BX、SP、BP、SI、DI/EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI。(7)POPA/POPAD從堆棧彈出全部通用寄存器,彈出次序與PUSHA/PUSHAD相反。

2023/1/30113實(shí)方式下的32位微處理器指令系統(tǒng)(8)PUSHFD將EFLAGS進(jìn)棧。(9)POPFD從堆棧彈出EFLAGS。(10)PUSHimm式中imm為立即數(shù),該指令可將立即數(shù)進(jìn)棧,imm可以是data8/data16/data32,若為data8,則符號(hào)擴(kuò)展。2023/1/3011413.4.2

32位微處理器擴(kuò)充指令80386以上的微處理器還擴(kuò)充了以下指令的功能。(1)IMULdest,src1,src2立即乘法指令,dest為reg16,src1為reg16/mem16,src2為data8/data16。功能:dest←src1(被乘數(shù))×src2(乘數(shù))。注意:結(jié)果只能是16位。

2023/1/30115擴(kuò)充指令

(2)CDQ

EAX中的雙字符號(hào)擴(kuò)展為EDX:EAX中的四字。(3)CWDE將AX中的字符號(hào)擴(kuò)展為EAX中的雙字。(4)SAL/SHL/SAR/SHRdest,count

dest是移位對(duì)象,可為reg或mem;count是移位次數(shù),可為data8或CL。2023/1/30116擴(kuò)充指令

(5)RCL/RCR/ROL/RORdest,count對(duì)dest和count的要求同SAL指令。(6)SHLDdest,src,count雙精度左移指令,使雙精度量左移,產(chǎn)生一個(gè)單精度量,dest可以是reg或mem,src為reg,count為data8或CL。功能:dest左移count次,移出位送到CF,右端空出位用src的高位部分填補(bǔ),src值不變。(7)SHRDdest,src,count雙精度右移指令,對(duì)dest、src、count的要求同SHLD指令,功能為右移,類似于SHLD。

2023/1/30117擴(kuò)充指令

(8)MOVSD/CMPSD/LODSD/STOSD/SCASD這5條串操作指令實(shí)現(xiàn)了32位數(shù)據(jù)的串操作,源地址數(shù)為[DS:ESI]或EAX,目的操作數(shù)為[ES:EDI]或EAX,功能同MOVSB/CMPSB/LODSB/STOB/SCASB(見第3章3.1.2小節(jié)),并按DF值自動(dòng)修改ESI/EDI指針。2023/1/30118擴(kuò)充指令

(9)INSdest,DX從I/O端口輸入串到存儲(chǔ)器。式中,dest為mem,規(guī)定為[ES:EDI/DI],DX存放輸入端口的地址。功能:[DS:EDI/DI]←[DX],按DF值修改EDI/DI指針。(10)INSB/INSW/INSD功能:功能同INS指令,傳送單位由助記符中B/W/D指定為字節(jié)/字/雙字。

INS/INSB/INSW/INSD指令可采用REP前綴。

2023/1/30119擴(kuò)充指令(11)OUTSDX,src式中,src為mem規(guī)定[DS:ESI/SI],DX存放輸出端口的地址。功能:[DX]←[DS:ESI/SI],按DF值修改ESI/SI指針。(12)OUTSB/OUTSW/OUTSD功能:功能同OUTS指令,傳送單位由助記符中B/W/D指定為字節(jié)/字/雙字。

OUTSB/OUTSW/OUTSD指令可采用REP前綴。

2023/1/30120擴(kuò)充指令

(13)LOOPWdest

CX←CX-1,CX≠0轉(zhuǎn)移到dest(以“標(biāo)號(hào)”標(biāo)識(shí))的目的地址。(14)LOOPDdest

ECX←ECX-1,ECX≠0轉(zhuǎn)移到dest。2023/1/30121擴(kuò)充指令

(15)LOOPEWdest/LOOPEDdest

CX←CX-1,CX≠0且ZF=1或ECX←ECX-1,ECX≠0且ZF=1轉(zhuǎn)移到dest。(16)LOOPNEWdest和LOOPNEDdest

CX←CX-1,CX≠0且ZF=0或ECX←ECX-1,ECX≠0且ZF=0轉(zhuǎn)移到dest。

2023/1/30122擴(kuò)充指令

(17)MOVSXdest,src帶符號(hào)擴(kuò)展的傳送,dest為reg,src為reg或mem。src為8位或16位,dest為16位或32位。(18)MOVSZdest,src帶零擴(kuò)展的傳送,對(duì)dest和src的要求同MOVSX指令。2023/1/3012313.4.3高級(jí)指令和保護(hù)控制指令80286微處理器是高檔的16位微處理器,增加了3條高級(jí)指令———BOUND、ENTER和LEAVE。80386以上的32位微處理器的指令系統(tǒng)兼容80286的指令系統(tǒng),因此必然包括了這三條高級(jí)指令。另外,80386以上的32位微處理器的指令系統(tǒng)是80286指令系統(tǒng)的超集,支持實(shí)方式、保護(hù)方式和虛擬8086方式三種程序運(yùn)行方式,具有模擬8086、80286任務(wù)的能力。32位保護(hù)控制指令是由非保護(hù)方式的指令系統(tǒng)和僅在保護(hù)方式下使用的一組指令組成。上述高級(jí)指令和保護(hù)控制指令如下所示。2023/1/30124高級(jí)指令和保護(hù)控制指令

(1)BOUNDreg,src檢查數(shù)組索引的邊界,reg是任一16位或32位寄存器,src為內(nèi)存中的兩個(gè)字或雙字,是被檢查數(shù)組的上限和下限。該指令使reg中的值與src中的值進(jìn)行比較,若reg中的值在src的上下限之間,則繼續(xù)執(zhí)行下一條指令,否則產(chǎn)生5號(hào)中斷,注意,該中斷的返回地址是BOUND指令的地址。2023/1/30125高級(jí)指令和保護(hù)控制指令

(2)ENTERdata16,data8

ENTER指令用來建立一個(gè)高級(jí)數(shù)據(jù)塊結(jié)構(gòu)所需的暫存區(qū)和堆棧結(jié)構(gòu)。ENTER指令通常是進(jìn)入過程時(shí)要執(zhí)行的第一條指令。分配給堆棧的存儲(chǔ)單元字節(jié)數(shù)由第一個(gè)操作數(shù)data16給定,這個(gè)存儲(chǔ)區(qū)對(duì)本過程是局部的,過程的嵌套級(jí)(0~31)由第二個(gè)操作數(shù)data8給出,并決定了堆棧結(jié)構(gòu)指針。該指針被從當(dāng)前堆棧復(fù)制到新堆棧,BP/EBP寄存器用做堆棧結(jié)構(gòu)指針。若使用16位堆棧,BP用做堆棧結(jié)構(gòu)指針,SP用做堆棧指針;若使用32位堆棧,相應(yīng)地,ESP和EBP用做堆棧指針和堆棧結(jié)構(gòu)指針。2023/1/30126高級(jí)指令和保護(hù)控制指令

(3)LEAVE

LEAVE指令用來退出過程,釋放堆??臻g。LEAVE指令與ENTER指令相反,它破壞堆棧結(jié)構(gòu),采用局部存儲(chǔ)的過程釋放堆??臻g,LEAVE指令重新存儲(chǔ)BP(EBP)的先前值和調(diào)用者的結(jié)構(gòu)指針,所有暫存在堆棧中的數(shù)據(jù)丟失。2023/1/30127高級(jí)指令和保護(hù)控制指令

(4)LMSWsrc裝入機(jī)器狀態(tài)字,src為reg16或mem16。功能:MSW←src,用于從實(shí)方式切換到保護(hù)方式。(5)SMSWdest存儲(chǔ)機(jī)器狀態(tài)字,dest為reg16或mem16功能:dest←MSW。2023/1/30128高級(jí)指令和保護(hù)控制指令(6)LGDTsrc裝入全局描述子表寄存器,src為6個(gè)字節(jié)的mem。功能:GDTR←src,把存儲(chǔ)器的第一個(gè)字裝入GDTR的段限字段,下面的4個(gè)字節(jié)裝入GDTR的基地址字段。(7)SGDTdest存儲(chǔ)全局描述子表寄存器。dest為6個(gè)字節(jié)的mem。功能:dest←GDTR,段限存入存儲(chǔ)器中的第一個(gè)字,基地址存入下面的4個(gè)字節(jié)。2023/1/30129高級(jí)指令和保護(hù)控制指令

(8)LIDTsrc裝入中斷描述子表寄存器。src為6個(gè)字節(jié)的mem。功能:IDTR←src,過程同LGDT。(9)SIDTdest存儲(chǔ)中斷描述子表寄存器。dest為6個(gè)字節(jié)的mem。功能:dest←IDTR,過程同SGDT

。2023/1/30130高級(jí)指令和保護(hù)控制指令

(10)LLDTsrc裝入局部描述子表寄存器,src為reg16或mem16功能:LDTR←src。(11)SLDTdest存儲(chǔ)局部描述子表寄存器,dest為reg16或mem16功能:dest←LDTR。(12)LTRsrc裝入任務(wù)寄存器,src為reg16或mem16。功能:TR←src,并標(biāo)記所裝入的任務(wù)狀態(tài)段TSS忙,不實(shí)行任務(wù)切換。2023/1/30131高級(jí)指令和保護(hù)控制指令

(13)STRdest存儲(chǔ)任務(wù)寄存器,dest為reg16或mem16。功能:dest←TR。(14)LARdest,src裝入訪問權(quán)字節(jié),dest為reg16,src為reg或mem。功能:在當(dāng)前特權(quán)級(jí)(CPL)和選擇子請(qǐng)求特權(quán)級(jí)(RPL),描述子是可訪問的,將由src選擇子所指定的描述子中的訪問權(quán)字節(jié)裝入dest的高字節(jié)(低字節(jié)置0)。該指令用來對(duì)程序所要使用的內(nèi)存段的訪問權(quán)進(jìn)行檢查。2023/1/30132高級(jí)指令和保護(hù)控制指令

(15)LSLdest,src裝入段限,dest為reg,src為reg或mem。功能:當(dāng)src中的選擇子在CPL中是可訪問的時(shí),則將src給出的選擇子指定的段描述子的段限字段裝入由dest指定的寄存器中,該指令用來檢測(cè)一個(gè)段的段限值。(16)ARPLdest,src調(diào)整選擇子的RPL(請(qǐng)求特權(quán)級(jí))。dest為reg16或mem16,若其中含有選擇子的值,則src必須是reg,且通常其內(nèi)容為調(diào)用任務(wù)的CS選擇子值。若dest的低兩位(即RPL字段)小于更高特權(quán)級(jí)src的RPL,則ZF置1,且將dest的RPL字段置為src的RPL值,即RPLdest←RPLsrc。2023/1/30133高級(jí)指令和保護(hù)控制指令

(17)VERRdest讀段校驗(yàn),dest可為reg16或mem16。VERR指令用來確認(rèn)由dest(選擇子)所指示的段是否能從當(dāng)前的特權(quán)級(jí)(CPL)訪問并且是可讀的。若可讀,則ZF置1,否則清零。被校驗(yàn)的為代碼段(因?yàn)榇a段可以讀保護(hù))。(18)VERWdest寫段校驗(yàn)。dest可為reg16或mem16。VERW指令用來確認(rèn)由dest(選擇子)所指示的段是否能從當(dāng)前的特權(quán)級(jí)(CPL)訪問并且是可寫的。若可寫,則ZF置1,否則清零。被校驗(yàn)的為數(shù)據(jù)段(因?yàn)閿?shù)據(jù)段可以寫入保護(hù))。2023/1/30134高級(jí)指令和保護(hù)控制指令

(19)CLTS清除CR0/MSW中的任務(wù)切換標(biāo)志。任務(wù)切換標(biāo)志(TS)每次發(fā)生任務(wù)切換時(shí),由處理器設(shè)置,但必須由人工控制清除,CLTS指令是系統(tǒng)程序在允許一個(gè)新任務(wù)訪問系統(tǒng)資源之前為操作系統(tǒng)提供的一個(gè)保存所需信息的機(jī)會(huì)(例如協(xié)處理器的狀態(tài))。2023/1/3013513.4.4

80386新增加的指令

為了充分發(fā)揮硬件的先進(jìn)特性,提高編程的靈活性和編程效率,80386微處理器又增加了許多新指令,這些指令是位操作指令、條件設(shè)置指令和傳送指令。2023/1/301361.位操作指令

1)BTdest,src位測(cè)試指令。dest為reg或mem,src為data8。功能:測(cè)試dest中由src指定的位,測(cè)試結(jié)果存入進(jìn)位標(biāo)志。2)BTCdest,src位測(cè)試并求反指令。dest為reg或mem,src為data8或reg。功能:測(cè)試dest中由src指定的位,測(cè)試結(jié)果存入進(jìn)位標(biāo)志,dest中該位取反。

2023/1/30137位操作指令

3)BTSdest,src位測(cè)試并置位指令。dest為reg或mem,src為data8或reg。功能:測(cè)試dest中由src指定的位,測(cè)試結(jié)果存入進(jìn)位標(biāo)志,然后將dest中的該位置1。

4)BTRdest,src位測(cè)試并復(fù)位指令。dest為reg或mem,src為data8或reg。功能:測(cè)試dest中由src指定的位,測(cè)試結(jié)果存入進(jìn)位標(biāo)志,然后將dest中的該位復(fù)位。2023/1/30138位操作指令5)BSFdest,src向前位掃描指令。dest為reg,src為reg或mem。功能:從最低位開始測(cè)試src中的各位,遇到為1的位,將ZF置0,并將該位序號(hào)送到dest,若src中全為0,則ZF置1。6)BSRdest,src反向位掃描指令。dest為reg,src為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論