第二章-80X86微處理器課件_第1頁
第二章-80X86微處理器課件_第2頁
第二章-80X86微處理器課件_第3頁
第二章-80X86微處理器課件_第4頁
第二章-80X86微處理器課件_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

寄存器存儲器分段及地址堆棧微處理器的工作模式發(fā)展新技術(shù)1GSFSSSESDSCSFLAGSIPDISIBPSPDLCLBLALDHCHBHAHEDXECXEBXEAXEDIESIEBPESPEFLAGSEIP31150DXCXBXAX80x86/Pentium處理器的寄存器模型2EIP是一個專用寄存器,用于尋址當(dāng)前需要取出的指令字節(jié)。當(dāng)CPU從內(nèi)存中取出一個指令字節(jié)后,EIP就自動加1,指向下一指令字節(jié)。當(dāng)微處理器工作在實(shí)模式下時,這個寄存器為IP(16位);當(dāng)80386及更高型號的微處理器工作于保護(hù)模式下時,則是EIP(32位)。程序員不能對EIP/IP進(jìn)行存取操作。程序中的轉(zhuǎn)移指令、返回指令以及中斷處理能對EIP/IP進(jìn)行操作。3.8086/8088標(biāo)志寄存器的格式及各位的功能1514131211109876543210OFDFIFTFSFZFAFPFCF狀態(tài)標(biāo)志方向標(biāo)志中斷標(biāo)志跟蹤標(biāo)志TraceFlag控制標(biāo)志進(jìn)位標(biāo)志奇偶標(biāo)志半進(jìn)位標(biāo)志零標(biāo)志符號標(biāo)志溢出標(biāo)志4六個狀態(tài)標(biāo)志的功能簡述如下:(1)進(jìn)位標(biāo)志CF(CarryFlag):當(dāng)執(zhí)行算術(shù)運(yùn)算指令時,其結(jié)果的最高位有進(jìn)位或借位時將CF置1;否則將CF置0。(2)奇偶標(biāo)志PF(ParityFlag):該標(biāo)志位反映操作結(jié)果低8位中“1”的個數(shù)情況,若為偶數(shù)個“1”,則將PF置“1”;若為奇數(shù)個“1”,則將PF置“0”。(3)

輔助進(jìn)位標(biāo)志AF(AuxiliarycarryFlag):輔助進(jìn)位標(biāo)志也稱“半進(jìn)位”標(biāo)志。AF=1,表示本次運(yùn)算的低4位中的最高位有進(jìn)位(加法運(yùn)算時)或有借位(減法運(yùn)算時)。AF一般用于BCD運(yùn)算中是否進(jìn)行十進(jìn)制調(diào)整的依據(jù)。十進(jìn)制調(diào)整指令DAA和DAS測試這個標(biāo)志位。(4)零標(biāo)志ZF(ZeroFlag):反映運(yùn)算結(jié)果是否為零。若結(jié)果為零,則ZF=1;若結(jié)果不為零,則ZF=0。5(5)符號標(biāo)志SF(SignFlag):反映帶符號數(shù)(以二進(jìn)制補(bǔ)碼表示)運(yùn)算結(jié)果符號位的情況。若結(jié)果為負(fù)數(shù),則SF=1;若結(jié)果為正數(shù),則SF=0。SF的取值總是與運(yùn)算結(jié)果的最高位(字節(jié)操作為D7,字操作為D15,雙字操作為D31)取值一致。(6)溢出標(biāo)志OF(OverflowFlag):反映有符號數(shù)運(yùn)算結(jié)果是否發(fā)生溢出。若發(fā)生溢出,則OF=1;否則,OF=0。所謂溢出,是指運(yùn)算結(jié)果超出了計算裝置所能表示的數(shù)值范圍。例如,對于字節(jié)運(yùn)算,數(shù)值表示范圍為-128~+127;對于字運(yùn)算,數(shù)值表示范圍為-32768~+32767。若超過上述范圍,則發(fā)生了溢出。溢出是一種差錯,系統(tǒng)應(yīng)做相應(yīng)的處理。“溢出”與“進(jìn)位”是兩種不同的概念。某次運(yùn)算結(jié)果有“溢出”,不一定有“進(jìn)位”;反之,有“進(jìn)位”,也不一定發(fā)生“溢出”。另外,“溢出”標(biāo)志實(shí)際上是針對有符號數(shù)運(yùn)算而言,對于無符號數(shù)運(yùn)算,不考慮溢出標(biāo)志。6

解(1)00101(2)11111+01010+110101111110101所以,OF=1SF=1ZF=0OF=0SF=1ZF=0AF=0PF=0CF=0AF=0PF=1CF=1例:指出80x86CPU執(zhí)行如下指令后,標(biāo)志寄存器中各狀態(tài)標(biāo)志位的值:

(1)MOVAX,32C5H(2)MOVAX,0E453HADDAX,546AHADDAX,0C572H7實(shí)模式下的存儲器地址空間在實(shí)模式下存儲器的地址空間為1M字節(jié)單元,其地址范圍為00000H~FFFFFH。實(shí)模式下的存儲器地址空間被分為通用和專用兩種存儲區(qū)。

從地址00000H~003FFH這第一個1024個字節(jié)單元是專用的。這個存儲區(qū)為中斷向量表區(qū),專門用來存放256個中斷服務(wù)程序的入口地址(也稱中斷向量),每個入口地址占4個字節(jié)單元。從地址FFFF0H~FFFFFH這16個字節(jié)單元保留給系統(tǒng)的初始化代碼。當(dāng)處理器加電或復(fù)位(Reset)時,CPU執(zhí)行的第一條指令就是起始于地址FFFF0H的。通常是在FFFF0H處存放一條無條件轉(zhuǎn)移指令,以轉(zhuǎn)移到系統(tǒng)程序的入口處。通用區(qū)域用來存儲一般的程序指令和數(shù)據(jù)。由圖可見,它的地址范圍為00400H~FFFEFH。8FFFFFHFFFF0H通用區(qū)專用區(qū)FFFEFH00400H003FFH00000H專用區(qū)實(shí)模式下存儲器地址空間9為什麼要采用存儲器“分段”技術(shù)?實(shí)模式下CPU可直接尋址的地址空間為220=1M字節(jié)單元。CPU需輸出20位地址信息才能實(shí)現(xiàn)對1M字節(jié)單元存儲空間的尋址。但實(shí)模式下CPU中所使用的寄存器均是16位的,內(nèi)部ALU也只能進(jìn)行16位運(yùn)算,其尋址范圍局限在216=65536(64K)字節(jié)單元。為了實(shí)現(xiàn)對1M字節(jié)單元的尋址,80x86系統(tǒng)采用了存儲器分段技術(shù)。各個邏輯段在實(shí)際的存儲空間中可以完全分開,也可以部分重疊,甚至完全重疊。段的起始地址的計算和分配通常是由操作系統(tǒng)完成的,并不需要普通用戶參與。10物理地址與邏輯地址物理地址是信息在存儲器中實(shí)際存放的地址,它是CPU訪問存儲器時實(shí)際輸出的地址。例如,實(shí)模式下的80x86/Pentium系統(tǒng)的物理地址是20位,存儲空間為220=1M字節(jié)單元,地址范圍從00000H到FFFFFH。CPU和存儲器交換數(shù)據(jù)時所使用的就是這樣的物理地址。邏輯地址是編程時所使用的地址?;蛘哒f程序設(shè)計時所涉及的地址是邏輯地址而不是物理地址。編程時不需要知道產(chǎn)生的代碼或數(shù)據(jù)在存儲器中的具體物理位置。這樣可以簡化存儲資源的動態(tài)管理。在實(shí)模式下的軟件結(jié)構(gòu)中,邏輯地址由“段基值”和“偏移量”兩部分構(gòu)成。11..段基值(16位)偏移量(16位)150150段基值(16位)1500000段寄存器地址加法器物理地址(20位)190物理地址邏輯地址實(shí)模式下物理地址的產(chǎn)生12..42320066423200660段基值偏移量左移4位物理地址邏輯地址

42386+)例設(shè)代碼段寄存器CS的內(nèi)容為4232H,指令指針寄存器IP的內(nèi)容為0066H,即CS=4232H,IP=0066H,則訪問代碼段存儲單元的物理地址計算如下:13例若段寄存器內(nèi)容是002AH,產(chǎn)生的物理地址是002C3H,則偏移量是多少?

解:

將段寄存器內(nèi)容左移4位,低位補(bǔ)0得:002A0H。從物理地址中減去上列值得偏移量為:002C3H-002A0H=0023H。

需注意的是,每個存儲單元有惟一的物理地址,但它可以由不同的“段基值”和“偏移量”轉(zhuǎn)換而來,這只要把段基值和偏移量改變?yōu)橄鄳?yīng)的值即可。也就是說,同一個物理地址可以由不同的邏輯地址來構(gòu)成?;蛘哒f,同一個物理地址與多個邏輯地址相對應(yīng)。例如,段基值為0020H,偏移量為0013H,構(gòu)成的物理地址為00213H;然而,若段基值改變?yōu)?021H,配以新的偏移量0003H,其物理地址仍然是00213H,如圖所示。14..00213H00212H00211H00210H0020FH0020EH0020DH0020CH0020BH0020AH00209H00208H00207H00206H00205H00204H00203H00202H00201H00200H段基值(0021H)段基值(0020H)偏移量(13H)物理地址偏移量(03H)邏輯地址一個物理地址對應(yīng)多個邏輯地址15還需指出的是,在這種“段加偏移”的尋址機(jī)制中,由于是將段寄存器的內(nèi)容左移4位(相當(dāng)于乘以十進(jìn)制數(shù)16)來作為段的起始地址的,所以實(shí)模下各個邏輯段只能起始于存儲器中16字節(jié)整數(shù)倍的邊界。這樣可以簡化實(shí)模式下CPU生成物理地址的操作。通常稱這16字節(jié)的小存儲區(qū)域?yàn)椤胺侄巍被颉肮?jié)”(paragraph)。在“段加偏移”的尋址機(jī)制中,微處理器有一套用于定義各種尋址方式中段寄存器和偏移地址寄存器的組合規(guī)則。如表1和表2所示。16..段寄存器偏移地址寄存器主要用途CSIP指令地址SSSP或BP堆棧地址DSBX、DI、SI、8位或16位數(shù)數(shù)據(jù)地址ES串操作指令的DI串操作目的地址表1默認(rèn)的16位“段+偏移”尋址組合段寄存器偏移地址寄存器主要用途CSEIP指令地址SSESP或EBP堆棧指針DSEAX、EBX、ECX、EDX、EDI、ESI、8位(16位或32位)數(shù)數(shù)據(jù)地址ES串操作指令的EDI串操作目的地址FS無默認(rèn)一般地址GS無默認(rèn)一般地址表2默認(rèn)的32位“段+偏移”尋址組合17

堆棧定義:堆棧是存儲器中的一個特定的存儲區(qū),它的一端(棧底)是固定的,另一端(棧頂)是浮動的,信息的存入和取出都只能在浮動的一端進(jìn)行,并且遵循后進(jìn)先出的原則。堆棧的用途:

堆棧主要用來暫時保存程序運(yùn)行時的一些地址或數(shù)據(jù)信息。例如,當(dāng)CPU執(zhí)行調(diào)用(Call)指令時,用堆棧保存程序的返回地址(亦稱斷點(diǎn)地址);在中斷響應(yīng)及中斷處理時,通過堆?!氨4娆F(xiàn)場”和“恢復(fù)現(xiàn)場”;有時也利用堆棧為子程序傳遞參數(shù)。堆棧的結(jié)構(gòu):堆棧是在存儲器中實(shí)現(xiàn)的,并由堆棧段寄存器SS和堆棧指針寄存器SP來定位。SS寄存器存放堆棧段的段基值,它確定了堆棧段的起始位置。SP寄存器中存放堆棧操作單元的偏移量,SP總是指向棧頂。圖給出了堆棧的基本結(jié)構(gòu)及操作示意圖。18

SSSSSSSPSPSP高地址棧底(棧頂)存儲器(字寬)低地址78H56H34H12H棧底棧頂棧頂棧底78H56H34H12H(a)空棧堆(b)壓入:PUSHAX;AX=1234HPUSHBX;BX=5678H(c)彈出:POPCX;堆棧的結(jié)構(gòu)與操作19值得注意的是,這種結(jié)構(gòu)的堆棧是所謂“向下生長的”,即棧底在堆棧的高地址端,當(dāng)堆棧為空時SP就指向棧底。因此,堆棧段的段基址(由SS寄存器確定)并不是棧底。堆棧的操作特點(diǎn):實(shí)模式下的堆棧為16位寬(字寬),堆棧操作指令(PUSH指令或POP指令)對堆棧的操作總是以字為單位進(jìn)行。即要壓棧(執(zhí)行PUSH指令)時,先將SP的值減2,然后將16位的信息壓入新的棧頂;要彈棧(執(zhí)行POP指令)時,先從當(dāng)前棧頂取出16位的信息,然后將SP的值加2??筛爬椋骸皦簵r,先修改棧指針后壓入”,“彈棧時,先彈出后修改棧指針”。

例:

若寄存器AX,BX,CX,DX的內(nèi)容分別為10,20,30,40時,依次執(zhí)行PUSHAX,PUSHBX,POPCX,POPDX,PUSHCX,PUSHDX,POPAX,POPBX后,寄存器AX和BX的內(nèi)容分別為10,2020微處理器的工作模式(1)實(shí)模式(2)保護(hù)模式(3)虛擬8086模式21實(shí)模式

80286以上的微處理器所采用的8086的工作模式。在實(shí)模式下,采用類似于8086的體系結(jié)構(gòu),其尋址機(jī)制、中斷處理機(jī)制均和8086相同;物理地址的形成也同8086一樣:將段寄存器的內(nèi)容左移四位再與偏移地址相加。

尋址空間為1MB,并采用分段方式,每段大小為64KB(216);此外,在實(shí)模式下,存儲器中保留兩個專用區(qū)域,一個為初始化程序區(qū):FFFF0H~FFFFFH,存放進(jìn)入ROM引導(dǎo)程序的一條跳轉(zhuǎn)指令;另一個為中斷向量表區(qū):00000H~003FFH,在這1K字節(jié)的存儲空間中存放256個中斷服務(wù)程序的入口地址,每個入口地址占4個字節(jié),這與8086的情形相同。

22實(shí)模式是80x86處理器在加電或復(fù)位后立即出現(xiàn)的工作方式,即使是想讓系統(tǒng)運(yùn)行在保護(hù)模式,系統(tǒng)初始化或引導(dǎo)程序也需要在實(shí)模式下運(yùn)行,以便為保護(hù)模式所需要的數(shù)據(jù)結(jié)構(gòu)做好各種配置和準(zhǔn)備。

實(shí)模式是為建立保護(hù)式做準(zhǔn)備的工作模式。23保護(hù)模式

保護(hù)模式是支持多任務(wù)的工作模式。它提供了一系列的保護(hù)機(jī)制,如任務(wù)地址空間的隔離,設(shè)置特權(quán)級(0~3共4個特權(quán)級),設(shè)置特權(quán)指令,進(jìn)行訪問權(quán)限(如只讀、只執(zhí)行)及段限檢查等。

80386以上的微處理器在保護(hù)模式下可以訪問4G字節(jié)的物理存儲空間,段的長度在啟動分頁功能時是4G字節(jié),不啟動分頁功能時是1M字節(jié),分頁功能是可選的。在這種方式下,可以引入虛擬存儲器的概念,以擴(kuò)充編程者所使用的地址空間。24虛擬8086模式

虛擬8086模式又稱“V86模式”。

它是既有保護(hù)功能又能執(zhí)行8086代碼的工作模式,是一種動態(tài)工作模式。在這種工作模式下,處理器能夠迅速、反復(fù)進(jìn)行V86模式和保護(hù)模式之間的切換,從保護(hù)模式進(jìn)入V86模式執(zhí)行8086程序,然后離開V86模式,進(jìn)入保護(hù)模式繼續(xù)執(zhí)行原來的保護(hù)模式程序。25

保護(hù)模式實(shí)模式虛擬8086模式復(fù)位復(fù)位復(fù)位復(fù)位PE=1PE=0作業(yè)切換中斷返回中斷、異常圖注:(1)PE——保護(hù)模式允許,是80x86控制寄存器CR0的一位(2)異?!?0286以上的處理器中,稱“內(nèi)部中斷”為異常三種工作模式的轉(zhuǎn)換2680286的地址方式

80286訪問存儲器時,有兩種方式即實(shí)地址方式和虛地址保護(hù)方式。(1)實(shí)地址方式:80286加電后即進(jìn)入實(shí)地址方式。在實(shí)地址方式下,80286與8086在目標(biāo)碼一級是向上兼容的,它兼容了8086的全部功能,8086的匯編語言源程序可以不做任何修改在80286上運(yùn)行。(2)虛地址保護(hù)方式:此方式是集實(shí)地址方式、存儲器管理、對于虛擬存儲器的支持和對地址空間的保護(hù)為一體而建立起來的一種特殊工作方式,使80286能支持多用戶、多任務(wù)系統(tǒng)。2780386的工作方式(1)實(shí)地址方式:系統(tǒng)啟動后,80386自動進(jìn)入實(shí)地址方式。此方式下,采用類似于8086的體系結(jié)構(gòu)(2)保護(hù)方式:是指在執(zhí)行多任務(wù)操作時,對不同任務(wù)使用的虛擬存儲器空間進(jìn)行完全的隔離,保護(hù)每個任務(wù)順利執(zhí)行。(3)虛擬8086方式:是

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論