版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第五章 32位x86處理器編程環(huán)境 32位處理器寄存器的擴展 實模式和保護模式 32處理器的內(nèi)存尋址方式 指令前綴 32位處理器指令的擴展 保護模式下的內(nèi)存訪問5.1 32位處理器寄存器的擴展 通用寄存器的擴展:將16位處理器的8個通用寄存器AX、BX、CX、DX、SI、DI、BP和SP分別擴展為32位寄存器,成為EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP。IA-32的16位工作模式是為了兼容8086處理器的工作模式,成為實模式。IA-32的32位工作模式特指32位保護模式,在這種模式下,可以完全充分地發(fā)揮處理器的性能。同時,在這種模式下,處理器可以使用它全部的32位地址線
2、,能夠訪問4G內(nèi)存。5.1 32位處理器寄存器的擴展 通用寄存器的擴展:32位處理器擴展了IP,使其達到32,即EIP。當(dāng)它工作在16位模式下時,依然使用16位的IP;工作在32位模式下時,使用的是全部的32位的EIP。標(biāo)志寄存器FLAGS也由16位擴展成32位,即EFLAGS,低16位和原先保持一致。5.2 實模式和保護模式 16位模式下,一個程序可以自由訪問不屬于它的內(nèi)存位置,甚至可以對那些地方進行修改,是不安全的。 在32位模式下,處理器要求在加載程序時,先定義該程序所擁有的段,然后允許使用這些段。定義段時,除了基地址(起始地址)外,還附加了段界限、特權(quán)級別、類型等屬性。當(dāng)程序訪問一個段
3、時,處理器將用固件檢查,以防止對內(nèi)存的違規(guī)訪問。5.2 實模式和保護模式 盡管在32位模式下,從理論上說不再需要分段,但是IA-32架構(gòu)的處理器是基于分段模型的,依然需要以段為單位訪問內(nèi)存。不過,它也提供了一種變通的方案,即只分一個段,段的基地址為0 x00000000,段的長度為4G。在這種情況下,可以視為不分段,即平坦模型(Flat Mode)。 32位處理器除了原來的CS、DS、SS、ES外,增加了兩個額外的段寄存器FS和GS,并都擴展為32位。 IA-32處理器支持分頁功能。頁的大小是固定的,一般為4KB。5.3 32處理器的內(nèi)存尋址方式 16位工作模式的內(nèi)存尋址方式: 如:mov a
4、x, bxmov ax, bx+dimov ax, bx+si+0 x02 5.3 32處理器的內(nèi)存尋址方式 32位工作模式的內(nèi)存尋址方式: 5.3 32處理器的內(nèi)存尋址方式 32位工作模式的內(nèi)存尋址方式: 如:add eax, 0 x2008;有效地址為0 x00002008sub eax, eax+0 x08 ; 有效地址是32位的mov ecx, eax+ebx*8+0 x02; 有效地址是32位的5.4 指令前綴 為了不增加處理器的復(fù)雜性,又能夠使32位處理器兼容16位模式,一個可行的解決方案是,讓16位指令和32位指令共用相同的指令碼,但通過不同的指令前綴,結(jié)合處理器當(dāng)前的運行狀態(tài)來
5、決定該指令的尋址方式: 當(dāng)處理器運行在16位模式時,如果沒有指令前綴0 x66,則認(rèn)為指令是傳統(tǒng)的16位尋址方式;若有指令前綴0 x66,則指令是新的32位尋址方式。 如果處理器當(dāng)前運行在32位模式下,且沒有指令前綴0 x66,則視為默認(rèn)的32位尋址方式,否則就是傳統(tǒng)的16位尋址方式。5.4 指令前綴 IA-32的指令格式:每個前綴的長度是1個字節(jié),每條指令可以有14個前綴,或者不使用前綴。前綴有:重復(fù)前綴(REP/REPE/REPNE)、段超越前綴(如ES:)、總線封鎖前綴(LOCK)等。操作碼長度為13字節(jié),用于指示什么樣的操作,同時操作碼還可以用來指示操作的字長,即數(shù)據(jù)寬度是字節(jié)還是字。
6、立即數(shù)可以是1、2或者4字節(jié),偏移量也可以是1、2或者4字節(jié)。5.4 指令前綴 在編寫程序的時候,就應(yīng)當(dāng)考慮到指令的執(zhí)行環(huán)境。為了指明程序的默認(rèn)運行環(huán)境,編譯器提供了偽指令bits,用于指明其后的指令應(yīng)該被編譯成16位的,還是32位的。比如:bits 16mov cx, dx;89 D1mov eax, ebx;66 89 D8bits 32mov cx, dx;66 89 D1mov eax, ebx;89 D8bits 16 或者bits 32可以放在方括號中,寫成bits 16 或者bits 32。5.5 32位處理器指令的擴展 一般指令的擴展:由于32位處理器有32位的寄存器和算術(shù)邏輯
7、部件,而且同內(nèi)存芯片之間的數(shù)據(jù)通路至少是32位的,因此所有以寄存器或者內(nèi)存單元為操作數(shù)的指令都被擴展,以適應(yīng)32位的算術(shù)邏輯操作。并且這些擴展的操作即使是在16位模式下也是可用的。如:add al, bladd ax, bxadd eax, ebxinc alinc dword 0 x2000dec dword eax*2 5.5 32位處理器指令的擴展 邏輯移動指令,目的操作數(shù)也擴展至32位,表示移動次數(shù)的源操作數(shù)是寄存器的話,仍然使用CL,因為已經(jīng)夠用。同時32位處理器在實際執(zhí)行的時候,要先將CL同0 x1f做邏輯與,因此,實際移動的次數(shù)最大為31。如:shl eax, 1shl eax,
8、 9shl dword eax*2+0 x08, cl 在32位處理器上,如果當(dāng)前的運行模式是16位的,loop指令執(zhí)行時使用CX;否則,如果運行在32位模式下,則使用的是ECX寄存器。5.5 32位處理器指令的擴展 無符號乘法指令mul可以擴展為32位:mul r/m8;AXALr/m8mul r/m16;DX:AXAXr/m16mul r/m32;EDX:EAXEAXr/m32 除法指令div或idiv:div r/m16idiv r/m16div r/m32idiv r/m32被除數(shù)可以64位(EDX:EAX),商在EAX,余數(shù)在EDX。 5.5 32位處理器指令的擴展 push和pop
9、指令也擴展為32位,另一個擴展允許壓入立即數(shù)。對于立即數(shù),在16位模式下,默認(rèn)壓入字,而在32位模式下,默認(rèn)壓入雙字。對于寄存器,可以壓入16位或者32位通用寄存器。對于內(nèi)存數(shù)據(jù),壓入時必須指明是字,還是雙字。對于段寄存器,在16位模式下,壓入字;在32位模式下,要先將段寄存器用0擴展到32位,壓入雙字。 5.6 保護模式下的內(nèi)存訪問在保護模式下,對內(nèi)存的訪問仍然使用段地址和偏移地址,但是在每個段能夠訪問前,必須先登記。 段描述符(Segment Descriptor):每個段都有一個段描述符,段描述符為8個字。為了存放這些描述符,需要在內(nèi)存中開辟出一段空間,在這段空間內(nèi),所有的描述符都挨在一
10、起,集中存放,就構(gòu)成一個描述符表。 全局描述符表:最主要的描述符表是全局描述符表(Global Descriptor Table,GDT),所謂全局,意味著該表是為整個軟硬件系統(tǒng)服務(wù)的。在進入保護模式之前,必須要定義全局描述符表。 5.6 保護模式下的內(nèi)存訪問 全局描述符表寄存器GDTR:為了跟蹤全局描述符表,處理器內(nèi)部有一個48位的寄存器,稱為全局描述符表寄存器GDTR。該寄存器分為兩部分,分別是32位的線性地址和16位的邊界。 5.6 保護模式下的內(nèi)存訪問 GDTR的32位線性基地址部分保存的是全局描述符表在內(nèi)存中的起始線性地址,16位邊界部分保存的是全局描述符表的邊界,其在數(shù)值上等于表的
11、大小減一。 由于在實模式下只能訪問1MB內(nèi)存,故GDT通常都定義在1MB以下的內(nèi)存范圍中,當(dāng)然允許在進入保護模式之后換個位置重新定義GDT。 lgdt指令:指令格式為lgdt m48,是一個內(nèi)存訪問指令,操作數(shù)在內(nèi)存中。該指令的工作是加載段描述符表的線性基地址和界限到GDTR寄存器。該指令在16位模式和32位模式下都可以執(zhí)行。在16位模式下,地址是16位的,在32位模式下,地址是32位的。該指令在實模式和保護模式下都可以執(zhí)行。 5.6 保護模式下的內(nèi)存訪問 段描述符格式如下: 5.6 保護模式下的內(nèi)存訪問 每個段描述符在GDT中占8個字節(jié),或者64位,圖中,下面是低32位,上面是高32位。 段
12、描述符指出了段的32位基地址和20位的段界限。 G位是粒度(Granularity)位:G=0時,段界限以字節(jié)為單位,段的擴展范圍是1B1MB;G=1時,段界限以4KB為單位,段的擴展范圍是4KB4GB。 S位指出段的類型:S=0時,表示一個系統(tǒng)段;S=1時,表示一個代碼段或數(shù)據(jù)段(棧段是特殊的數(shù)據(jù)段。 5.6 保護模式下的內(nèi)存訪問 DPL表示描述符的特權(quán)級別(Descriptor Privilege Level,DPL):0、1、2、3級,0級為最高特權(quán)級,3為最低特權(quán)級。 P為是段存在(Present)位:用于指示描述符所對應(yīng)的段是否存在。P=0時,所對應(yīng)的段不存在;P=1,所對應(yīng)的段存在
13、。用于實現(xiàn)虛擬內(nèi)存。 D/B位是“默認(rèn)操作數(shù)大小”(Default Operation Size)位,或者“默認(rèn)的棧指針大小” (Default Stack Pointer Size)位,又或者“上部邊界(Upper Bound)標(biāo)志”。D/B=0,操作數(shù)或偏移地址為16位;D/B=1,操作數(shù)或偏移地址為32位。設(shè)立該標(biāo)志位是為了能夠在32位處理器上兼容運行16位保護模式的程序。 L位是64位代碼標(biāo)志。保留此位給64位處理器使用。現(xiàn)在將此位置0。 5.6 保護模式下的內(nèi)存訪問 代碼段和數(shù)據(jù)段描述符的TYPE字段: A位是已訪問位,指示它所指向的段最近是否被訪問過。用于實現(xiàn)虛擬內(nèi)存管理。 AVL
14、是軟件可以使用的位,留給操作系統(tǒng)使用。 5.6 保護模式下的內(nèi)存訪問 A20問題:在實模式下,地址線A20被強制為低電平,即被屏蔽。在保護模式下,地址線A20應(yīng)該被打開。 5.6 保護模式下的內(nèi)存訪問 A20問題:從圖中可以看出,地址線A20的打開可以通過鍵盤控制器,也可以通過快速A20和初始化寄存器的第1位??焖貯20和初始化寄存器的第0位用于初始化處理器。 保護模式的開啟:處理器中有一個控制寄存器CR0,它的最低位是保護模式允許位(Protection Enable,PE),如果把該位置1,則處理器進入保護模式,按保護模式的規(guī)則開始運行。5.6 保護模式下的內(nèi)存訪問 32位處理器的段寄存器
15、有CS、DS、ES、SS、FS和GS,結(jié)構(gòu)如下: 5.6 保護模式下的內(nèi)存訪問 用戶程序只能使用前16位,后面部分對程序員是不可見的,緩存該段的描述符,由處理器內(nèi)部使用。 在實模式下:CS、DS、ES、SS的前16位作為段的基地址使用。 在保護模式下,段寄存器的前16位不是作為段的基地址使用,而是作為段選擇器使用,用于指向一個段。段選擇器的格式如下: 5.6 保護模式下的內(nèi)存訪問 段描述符索引號:用來在段描述符表中選擇一個段描述符。 TI:描述符表指示器(Table Indicator),TI=0,表示描述符在GDT中;TI=1,表示描述符在LDT中。 RPL:請求特權(quán)級。 5.6 保護模式下
16、的內(nèi)存訪問 保護模式下,當(dāng)處理器在執(zhí)行任何改變段選擇器的指令時(比如pop、mov、jmp far、call far、iret、retf),就將指令中提供的索引號乘以8作為偏移地址,同GDTR中提供的線性基地址相加,以訪問GDT。如果沒有什么問題(比如超出了GDT的界限),就自動地找到相應(yīng)的段描述符加載到對應(yīng)的段寄存器的描述符高速緩存器部分。 5.6 保護模式下的內(nèi)存訪問 圖為段寄存器的描述符高速緩存器加載過程: 5.6 保護模式下的內(nèi)存訪問 段寄存器的描述符高速緩存器加載之后,每當(dāng)有訪問內(nèi)存的指令之后,就不再訪問GDT中的段描述符。圖為保護模式下的內(nèi)存訪問過程: 5.6 保護模式下的內(nèi)存訪問 在32位保護模式下,處理器取指令時,會自動用CS段寄存器的描述符高速緩存器的32位線性基地址加上指令指針寄存器EIP提供的32位偏移量,形成32位物理地址,從內(nèi)存中取得指令,加以執(zhí)行。圖為保護模式下的取指令過程: 5.6 保護模式下的內(nèi)存訪問 PUSHA/POPA,PUSHAD/POPAD指令:PUSHAD指令壓入32位寄存器,使他們按照EDI,ESI,E
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度區(qū)塊鏈技術(shù)解決方案個人勞務(wù)合同4篇
- 二零二五版家政服務(wù)人員健康管理與保險協(xié)議3篇
- 水平定向鉆孔施工方案
- 2024年中班教案:《耳朵》
- 2025年金融資產(chǎn)打包收購合同模板3篇
- 二零二五年度門窗安裝工程環(huán)保評估合同8篇
- 2024年新東方初中數(shù)學(xué)初一年級寒假 滿分版 第9講 平行線的性質(zhì)與判定的綜合含答案
- 二零二五版民辦學(xué)校校長任期學(xué)生心理健康聘用合同4篇
- 2024版商業(yè)保理合同
- 玻璃鋼防腐工程施工方案
- 人教版初中語文2022-2024年三年中考真題匯編-學(xué)生版-專題08 古詩詞名篇名句默寫
- 2024-2025學(xué)年人教版(2024)七年級(上)數(shù)學(xué)寒假作業(yè)(十二)
- 山西粵電能源有限公司招聘筆試沖刺題2025
- 醫(yī)療行業(yè)軟件系統(tǒng)應(yīng)急預(yù)案
- 使用錯誤評估報告(可用性工程)模版
- 《精密板料矯平機 第2部分:技術(shù)規(guī)范》
- 2024光伏發(fā)電工程交流匯流箱技術(shù)規(guī)范
- 旅游活動碳排放管理評價指標(biāo)體系構(gòu)建及實證研究
- 2022年全國職業(yè)院校技能大賽-電氣安裝與維修賽項規(guī)程
- 2024年黑龍江省政工師理論知識考試參考題庫(含答案)
- 四年級上冊脫式計算300題及答案
評論
0/150
提交評論