《微型計算機技術》第13章 32位微處理器的軟件特點_第1頁
《微型計算機技術》第13章 32位微處理器的軟件特點_第2頁
《微型計算機技術》第13章 32位微處理器的軟件特點_第3頁
《微型計算機技術》第13章 32位微處理器的軟件特點_第4頁
《微型計算機技術》第13章 32位微處理器的軟件特點_第5頁
已閱讀5頁,還剩151頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2023/1/301微型計算機技術WeixinɡJisuɑnjiJishu

(第3版)

2023/1/302

第13章

32位微處理器的

軟件特點2023/1/30332位微處理器的軟件特點

13.1

32位微處理器的存儲器管理

13.1.1

80386的工作方式

13.1.2保護方式下的存儲管理

13.2

32位指令的尋址方式的特點

13.2.1數據的尋址方式

13.2.2轉移地址的尋址方式

13.3保護方式下的尋址方式

13.3.1描述子和選擇子

13.3.2保護方式下的存儲器尋址過程簡介

13.3.3保護方式下的存儲器尋址過程舉例2023/1/30432位微處理器的軟件特點13.4

32位微處理器指令系統簡介

13.4.1實方式下的32位微處理器指令系統

13.4.232位微處理器擴充指令

13.4.3高級指令和保護控制指令

13.4.4

80386新增加的指令

13.4.5

80486新增加的指令

13.4.6

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

32位微處理器的存儲器管理

13.1.1

80386的工作方式

13.1.2保護方式下的存儲管理2023/1/30613.1.180386的工作方式80386有3種工作方式———

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

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

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

2023/1/301913.1.2保護方式下的存儲管理存儲管理包含兩大機制,一是地址轉換機制,二是保護機制。地址轉換機制使操作系統可以靈活地把存儲區域分配給各個任務,而保護機制用來避免系統中的一個任務越權訪問屬于另一個任務的存儲區域或屬于操作系統的存儲區域。虛擬地址空間可達64TB,用戶在程序中所使用的地址都是由“段選擇子”和“偏移量”兩部分組成的虛擬地址。2023/1/30201.地址轉換機制

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

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

物理地址”的轉換,如圖13-2所示。2023/1/3022圖13-2兩級“虛擬地址—

物理地址”的轉換

2023/1/3023地址轉換機制分段機制實現虛擬地址到線性地址的轉換,它把用戶程序中的64TB的虛擬地址空間分成1~4GB大小不等的存儲分段,并且有實施段間隔離與保護的硬件機構。分段存儲管理直接支持高級語言的模塊化程序設計技術,有效地簡化了操作系統的段式存儲管理和模塊重定位的軟件模塊的設計。2023/1/3024地址轉換機制

分頁機制實現了線性地址到物理地址的轉換,它把用戶的線性地址空間等分為固定大小的塊,每一線性地址塊稱為頁,線性地址以“頁號頁內地址對”表示。系統也把存儲器物理空間等分成同樣大小、位置固定的塊,每一物理存儲塊稱為頁幀(80386MMU的分頁機制將4KB大小的頁稱為頁幀)。存儲空間的物理地址也以“頁幀號頁內地址對”表示。2023/1/3025地址轉換機制為實現頁面管理,系統為每個作業建立一張頁面對照表———

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

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

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

32位指令的尋址方式的特點

13.2.1數據的尋址方式

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

(ImmediateAddressing)

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

2023/1/3036立即尋址8位立即數:

MOV

AL,43H;43H→AL

MOVAL,01000011B;01000011B→AL

MOVAL,67;67→AL16位立即數:

MOVAX,4142H;4142H→AX

MOVAX,0100000101000010B

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

32位立即數:

MOVAX,16701;16701→AX

MOVEAX,12345678H;12345678H→EAX

字符或字符串:

MOVAL,′A′;41H→AL

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

MOVCS,AX”

,匯編時沒有出錯,可得機器碼為8EC8H,但執行時會發生問題。2023/1/3039表13-1寄存器尋址中的寄存器

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

MOV

BL,AL

16位操作:

MOVBX,AX

32位操作:

MOVEBX,EAX

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

MOVBL,AX

MOVSS,DS

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

段(Segment)和頁(Page)

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

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

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

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

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

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

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

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

或8(對應于操作數的長度為1、2、4

或8個字節)的比例因子,這種尋址方式對于訪問數組或結構特別有用。2023/1/3056表13-2

32位系統中存儲器尋址表

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

MOVEAX,DWORDI”為直接尋址,將雙字單元DWORDI中的雙字數據傳送到32位寄存器EAX中。②指令“

MOVAL,[ECX]”為寄存器間接尋址,將數據段中由ECX尋址的存儲單元中的1個字節數據傳送到8位寄存器AL中。③指令“

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

④指令“

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

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

⑥指令“

MOVAL,[EBX+2×EDI]”為基址比例變址尋址,將數據段中有效地址為EBX+2×EDI的存儲單元中的1個字節的數據傳送到8位寄存器AL中。⑦指令“MOVEAX,[EBX+ECX+2]”為基址變址位移尋址,將數據段中有效地址為EBX+ECX+2的存儲單元中的雙字數據傳送到32位寄存器EAX中。⑧指令“

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

標號(Label),例如,指令JMPSTART中的標號START即轉移地址的符號表示。標號有三種屬性———

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

IP←[EA+1]:[EA]

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

13.3.1描述子和選擇子

13.3.2保護方式下的存儲器尋址過程簡介

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

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

BASE———

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

LIMIT———

段限,段的長度、范圍邊界。

P———

存在位,為1表示存在(在實內存中),為0表示不存在。

DPL———

描述子特權級,0~3。

S———

段描述子,為1表示代碼或數據描述子,為0表示系統描述子2023/1/3069段描述子TYPE———

段的類型。

A———

已訪問位,為1表示已經訪問過。

G———

粒度位,段限所用單位,

為1表示頁(4KB),

為0表示字節。

B/D———

默認操作數大小,

為0表示16位,

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

2023/1/3076圖13-8

IDTR與IDT

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

LDTR與LDT

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

2023/1/3081

段選擇子的格式

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

INDEX———

13位長的選擇子變址(索引)值,據此值到GDT或LDT中查找對應的描述子。

TI(TableIndex)———

1位長的表指示符。TI=1時,在LDT中;TI=0時,在GDT中。

RPL(RequestPrivilegeLevel)———

2位長的段選擇子的請求特權級。2023/1/3082圖13-11段選擇子

2023/1/308313.3.2保護方式下的存儲器

尋址過程簡介

①準備工作———

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

GDT的定義2023/1/3085尋址過程簡介②給定一個48位虛擬地址指針(程序的邏輯地址),通過選擇子、描述子數據結構以及全局描述子表GDT和局部描述子表LDT實現從虛擬地址到線性地址的轉換。

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

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

2023/1/3086尋址過程簡介

c.選擇子中TI=0時,則描述子在GDT中,進入步驟⑤。

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

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

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

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

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

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

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

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

③分頁機制采用了二級分頁方案,查2個表———

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

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

4732310005AH00010000HSelecterOffset2023/1/30922023/1/309313.3.3保護方式下的存儲器

尋址過程舉例

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

13.3.3保護方式下的存儲器

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

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

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

2.準備工作———

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

LGDTQWORDPTRn

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

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

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

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

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

MOV

AX,005AH

MOV

DS,AX

MOV

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

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

32位微處理器指令系統簡介

13.4.1實方式下的32位微處理器指令系統

13.4.2

32位微處理器擴充指令

13.4.3高級指令和保護控制指令

13.4.4

80386新增加的指令

13.4.5

80486新增加的指令

13.4.6

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

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

可在000000H~1FFFEFH范圍內尋址(因為32位微處理器實際上使用32位地址訪問存儲器)。例如,欲訪問FFFFH:FFFFH內存單元,在8086系統中,CPU計算物理地址得到10FFEFH,舍棄最高位1,訪問0FFEFH單元,而在32位系統中,CPU計算物理地址得到1FFEFH,即訪問10FFEFH內存單元。2023/1/30110實方式下的32位微處理器指令系統

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

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

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

FS、GS寄存器進棧、出棧指令。2023/1/30112實方式下的32位微處理器指令系統

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

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

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

2023/1/30115擴充指令

(2)CDQ

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

dest是移位對象,可為reg或mem;count是移位次數,可為data8或CL。2023/1/30116擴充指令

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

2023/1/30117擴充指令

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

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

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

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

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

2023/1/30120擴充指令

(13)LOOPWdest

CX←CX-1,CX≠0轉移到dest(以“標號”標識)的目的地址。(14)LOOPDdest

ECX←ECX-1,ECX≠0轉移到dest。2023/1/30121擴充指令

(15)LOOPEWdest/LOOPEDdest

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

CX←CX-1,CX≠0且ZF=0或ECX←ECX-1,ECX≠0且ZF=0轉移到dest。

2023/1/30122擴充指令

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

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

(2)ENTERdata16,data8

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

(3)LEAVE

LEAVE指令用來退出過程,釋放堆棧空間。LEAVE指令與ENTER指令相反,它破壞堆棧結構,采用局部存儲的過程釋放堆棧空間,LEAVE指令重新存儲BP(EBP)的先前值和調用者的結構指針,所有暫存在堆棧中的數據丟失。2023/1/30127高級指令和保護控制指令

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

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

。2023/1/30130高級指令和保護控制指令

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

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

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

(17)VERRdest讀段校驗,dest可為reg16或mem16。VERR指令用來確認由dest(選擇子)所指示的段是否能從當前的特權級(CPL)訪問并且是可讀的。若可讀,則ZF置1,否則清零。被校驗的為代碼段(因為代碼段可以讀保護)。(18)VERWdest寫段校驗。dest可為reg16或mem16。VERW指令用來確認由dest(選擇子)所指示的段是否能從當前的特權級(CPL)訪問并且是可寫的。若可寫,則ZF置1,否則清零。被校驗的為數據段(因為數據段可以寫入保護)。2023/1/30134高級指令和保護控制指令

(19)CLTS清除CR0/MSW中的任務切換標志。任務切換標志(TS)每次發生任務切換時,由處理器設置,但必須由人工控制清除,CLTS指令是系統程序在允許一個新任務訪問系統資源之前為操作系統提供的一個保存所需信息的機會(例如協處理器的狀態)。2023/1/3013513.4.4

80386新增加的指令

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

1)BTdest,src位測試指令。dest為reg或mem,src為data8。功能:測試dest中由src指定的位,測試結果存入進位標志。2)BTCdest,src位測試并求反指令。dest為reg或mem,src為data8或reg。功能:測試dest中由src指定的位,測試結果存入進位標志,dest中該位取反。

2023/1/30137位操作指令

3)BTSdest,src位測試并置位指令。dest為reg或mem,src為data8或reg。功能:測試dest中由src指定的位,測試結果存入進位標志,然后將dest中的該位置1。

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

溫馨提示

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

評論

0/150

提交評論