《微型計算機基本原理與應(yīng)用》課件第3章 微處理器的編程結(jié)構(gòu)_第1頁
《微型計算機基本原理與應(yīng)用》課件第3章 微處理器的編程結(jié)構(gòu)_第2頁
《微型計算機基本原理與應(yīng)用》課件第3章 微處理器的編程結(jié)構(gòu)_第3頁
《微型計算機基本原理與應(yīng)用》課件第3章 微處理器的編程結(jié)構(gòu)_第4頁
《微型計算機基本原理與應(yīng)用》課件第3章 微處理器的編程結(jié)構(gòu)_第5頁
已閱讀5頁,還剩98頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章

微處理器的編程結(jié)構(gòu)本章主要內(nèi)容(1)微處理器的工作模式(2)微處理器的編程結(jié)構(gòu)(3)實模式下的存儲器尋址(4)堆棧的結(jié)構(gòu)與操作3.0引言Moore定律:“晶體管的大小將以指數(shù)速率變小,而集成到芯片上的晶體管數(shù)目將2-3年【18-24個月】翻一番?!? --GordonMoore,1965*GordonMoore--Intel公司的創(chuàng)始人,著名半導(dǎo)體科學(xué)家。1978年80862.9萬(晶體管數(shù))1982年8028613.5萬1985年8038632萬1990年80486120萬1993年P(guān)entium320萬1996年P(guān)entiumPro550萬1997年P(guān)entiumII750萬,300MHz1999年P(guān)entiumIII2000年P(guān)entiumIV4200萬1.4GHz2000年后Itanium22.14億BBillGates在《未來之路》(Theroadahead)中曾提到,假若Moore定律能再持續(xù)20年…..其有人預(yù)測:

“微電子器件的發(fā)展速度預(yù)計一直到21世紀前期仍將遵循摩爾定律”**此外,人們也在關(guān)心其他新型技術(shù),如激光計算機、量子計算機等新技術(shù)的發(fā)展。從*在計算機結(jié)構(gòu)及信息理論方面,“非馮結(jié)構(gòu)”

-----(神經(jīng)網(wǎng)絡(luò)--仿人腦的思維和記憶模型),更便于處理某些智能型問題。4004微處理器(1971,2250晶體管,4.2mmx3.2mm,世界上第一個微處理器)8008微處理器(1973,3500晶體管)8080微處理器(1974,4900晶體管)8086微處理器

(1978,2.9萬晶體管)80286微處理器(1982,13.5萬晶體管)80386微處理器(1985,32萬晶體管)80486微處理器(1990,120萬晶體管)Pentium微處理器(1993,320萬晶體管)Pentium4微處理器(2000,4200萬晶體管)P4微處理器處理器新革命—ITANIUM(安滕)IA-64架構(gòu)處理器ITANIUM2(2.14億晶體管,1GHZ主頻,0.18微米線寬,328個寄存器,8級流水,系統(tǒng)總線寬度128位,片內(nèi)三級高速緩存-32KB,256KB,3MB,……參見P489)3.1微處理器的工作模式(1)實模式(2)保護模式(3)虛擬8086模式3.1.1實模式(realmode)80286以上的微處理器所采用的8086的工作模式。在實模式下,采用類似于8086的體系結(jié)構(gòu),其尋址機制、中斷處理機制均和8086相同;物理地址的形成也同8086一樣:將段寄存器的內(nèi)容左移四位再與偏移地址相加。

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

實模式是80x86處理器在加電或復(fù)位后立即出現(xiàn)的工作方式,即使是想讓系統(tǒng)運行在保護模式,系統(tǒng)初始化或引導(dǎo)程序也需要在實模式下運行,以便為保護模式所需要的數(shù)據(jù)結(jié)構(gòu)做好各種配置和準(zhǔn)備。實模式是為建立保護模式做準(zhǔn)備的工作模式。3.1.2保護模式(protectedmode)保護模式是支持多任務(wù)的工作模式。它提供了一系列的保護機制,如任務(wù)地址空間的隔離,設(shè)置特權(quán)級(0~3共4個特權(quán)級),設(shè)置特權(quán)指令,進行訪問權(quán)限(如只讀、只執(zhí)行)及段限檢查等。

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

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

保護模式實模式虛擬8086模式復(fù)位復(fù)位復(fù)位復(fù)位PE=1PE=0作業(yè)切換中斷返回中斷、異常圖注:(1)PE——保護模式允許,是80x86控制寄存器CR0的一位(2)異?!?0286以上的處理器中,稱“內(nèi)部中斷”為異常(exception)圖3.2三種工作模式的轉(zhuǎn)換3.2微處理器的編程結(jié)構(gòu)微處理器的編程結(jié)構(gòu),即是在編程人員眼中看到的微處理器的軟件結(jié)構(gòu)模型。軟件結(jié)構(gòu)模型便于人們從軟件的視角去了解計算機系統(tǒng)的操作和運行。從這一點上說,程序員可以不必知道微處理器內(nèi)部極其復(fù)雜的電路結(jié)構(gòu)、電氣連接或開關(guān)特性,也不需要知道各個引腳上的信號功能和動作過程。對于編程人員來說,重要的是要了解微處理器所包含的各種寄存器的功能、操作和限制,以及在程序設(shè)計中如何使用它們。進一步,需要知道外部的存儲器是如何組織的,處理器如何從存儲器中取得指令和數(shù)據(jù)。3.2.1程序可見寄存器程序可見(programvisible)寄存器,是指在應(yīng)用程序設(shè)計時可以直接訪問的寄存器。程序不可見(programinvisible)寄存器是指在應(yīng)用程序設(shè)計時不能直接訪問,但在進行系統(tǒng)程序設(shè)計(如編寫操作系統(tǒng)軟件)時可以被間接引用或通過特權(quán)指令才能訪問的寄存器。在80x86微處理器系列中,通常在80286及其以上的微處理器中才包含程序不可見寄存器,主要用于保護模式下存儲系統(tǒng)的管理和控制。3.2.280x86/Pentium處理器的寄存器模型

圖3.3給出了80x86/Pentium微處理器的寄存器模型。它實際上是一個呈現(xiàn)在編程者面前的寄存器集合,所以也稱微處理器的編程結(jié)構(gòu)。GSFSSSESDSCSFLAGSIPDISIBPSPDLCLBLALDHCHBHAHEDXECXEBXEAXEDIESIEBPESPEFLAGSEIP31150DXCXBXAX圖3.380x86/Pentium處理器的寄存器模型白色區(qū)域:8086/8088,80286所具有的;

陰影區(qū)域:80386,80486及Pentium

新增加的。1.通用寄存器通用寄存器也稱多功能寄存器,在圖3.3所示的寄存器模型中,共有8個通用寄存器,按它們的功能差別,又可分為兩組,即:“通用數(shù)據(jù)寄存器”及“指針寄存器和變址寄存器”。(1)通用數(shù)據(jù)寄存器

通用數(shù)據(jù)寄存器用來存放8位、16位或32位的操作數(shù)。大多數(shù)算術(shù)運算和邏輯運算指令都可以使用這些寄存器。共有4個通用數(shù)據(jù)寄存器,它們是EAX、EBX、ECX和EDX。EAX(Accumulator,累加器):EAX可以作為32位寄存器(EAX)、16位寄存器(AX)或8位寄存器(AH或AL)引用。如果作為8位或16位寄存器引用,則只改變32位寄存器的一部分,其余部分不受影響。當(dāng)累加器用于乘法、除法及一些調(diào)整指令時,它具有專門的用途,但通常仍稱之為通用寄存器。在80386及更高型號的微處理器中,EAX寄存器也可以用來存放訪問存儲單元的偏移地址。EBX(Base,基址):EBX是個通用寄存器,它可以作為32位寄存器(EBX)、16位寄存器(BX)或8位寄存器(BH或BL)引用。在80x86系列的各種型號微處理器中,均可以用BX存放訪問存儲單元的偏移地址。在80386及更高型號的微處理器中,EBX也可以用于存放訪問存儲單元的偏移地址。ECX(Count,計數(shù)):ECX是個通用寄存器,它可以作為32位寄存器(ECX)、16位寄存器(CX)或8位寄存器(CH或CL)引用。ECX可用來作為多種指令的計數(shù)值。用于計數(shù)的指令是重復(fù)的串操作指令、移位指令、循環(huán)移位指令和LOOP/LOOPD指令。移位和循環(huán)移位指令用CL計數(shù),重復(fù)的串操作指令用CX計數(shù),LOOP/LOOPD指令用CX或ECX計數(shù)。在80386及更高型號的微處理器中,ECX也可用來存放訪問存儲單元的偏移地址。EDX(Data,數(shù)據(jù)):EDX是個通用寄存器,用于保存乘法運算產(chǎn)生的部分積,或除法運算之前的部分被除數(shù)。對于80386及更高型號的微處理器,這個寄存器也可用來尋址存儲器數(shù)據(jù)。(2)指針寄存器和變址寄存器這是另外4個通用寄存器,分別是:堆棧指針寄存器ESP、基址指針寄存器EBP、源變址寄存器ESI和目的變址寄存器EDI。ESP(StackPointer,堆棧指針):ESP尋址一個稱為堆棧的存儲區(qū)。通過這個指針存取堆棧存儲器數(shù)據(jù)。這個寄存器作為16位寄存器引用時,為SP;作為32位寄存器引用時,則為ESP。EBP(BasePointer,基址指針):EBP用來存放訪問堆棧段的一個數(shù)據(jù)區(qū)的“基地址”。它作為16位寄存器引用時,為BP;作為32位寄存器引用時,則是EBP。ESI(SourceIndex,源變址):ESI用于尋址串操作指令的源數(shù)據(jù)串。它的另一個功能是作為32位(ESI)或16位(SI)的數(shù)據(jù)寄存器使用。EDI(DestinationIndex,目的變址):EDI用于尋址串操作指令的目的數(shù)據(jù)串。如同ESI一樣,EDI也可用為32位(EDI)或16位(DI)的數(shù)據(jù)寄存器使用。2.指令指針寄存器EIP(InstructionPointer)EIP是一個專用寄存器,用于尋址當(dāng)前需要取出的指令字節(jié)。當(dāng)CPU從內(nèi)存中取出一個指令字節(jié)后,EIP就自動加1,指向下一指令字節(jié)。當(dāng)微處理器工作在實模式下時,這個寄存器為IP(16位);當(dāng)80386及更高型號的微處理器工作于保護模式下時,則是EIP(32位)。程序員不能對EIP/IP進行存取操作。程序中的轉(zhuǎn)移指令、返回指令以及中斷處理能對EIP/IP進行操作。3.標(biāo)志寄存器EFLAGSEFLAGS用于指示微處理器的狀態(tài)并控制它的操作。早期的8086/8088微處理器的標(biāo)志寄存器FLAG為16位,且只定義了其中的9位;80286微處理器雖然仍為16位的標(biāo)志寄存器,但定義的標(biāo)志位已從原來的9位增加到12位;80386及更高型號的微處理器則采用32位的標(biāo)志寄存器EFLAGS,所定義的標(biāo)志位也有相應(yīng)的擴充。..IDVIPVIFACVMRFNTIOPODAPC3121201918171615141312111098765432101IOP0ITSZPentium/PentiumII80486SX/80486DX80386DX802868086/8088圖3.480x86/Pentium全系列微處理器的標(biāo)志寄存器8086/8088系統(tǒng)中所定義的9個標(biāo)志位——O、D、I、T、S、Z、A、P、C,這也是實模式下80x86/Pentium系列微處理器所使用的標(biāo)志位。在這9個標(biāo)志位中,有6位(即CF、PF、AF、ZF、SF和OF)為狀態(tài)標(biāo)志;其余3位(即TF、IF和DF)為控制標(biāo)志。

狀態(tài)標(biāo)志反映微處理器的工作狀態(tài),如執(zhí)行加法運算時是否產(chǎn)生進位,執(zhí)行減法運算時是否產(chǎn)生借位,運算結(jié)果是否為零等;控制標(biāo)志對微處理器的運行起特定的控制作用,如以單步方式運行還是以連續(xù)方式運行,在程序執(zhí)行過程中是否允許響應(yīng)外部中斷請求等。..

8086/8088標(biāo)志寄存器的格式及各位的功能

1514131211109876543210OFDFIFTFSFZFAFPFCF狀態(tài)標(biāo)志方向標(biāo)志中斷標(biāo)志跟蹤標(biāo)志(TraceFlag)控制標(biāo)志進位標(biāo)志奇偶標(biāo)志半進位標(biāo)志零標(biāo)志符號標(biāo)志溢出標(biāo)志六個狀態(tài)標(biāo)志的功能簡述如下:(1)進位標(biāo)志CF(CarryFlag):

當(dāng)執(zhí)行算術(shù)運算指令時,其結(jié)果的最高位有進位或借位時將CF置1;否則將CF置0。(2)奇偶標(biāo)志PF(ParityFlag):

該標(biāo)志位反映操作結(jié)果低8位中“1”的個數(shù)情況,若為偶數(shù)個“1”,則將PF置“1”;若為奇數(shù)個“1”,則將PF置“0”。它是早期Intel微處理器在數(shù)據(jù)通信環(huán)境中校驗數(shù)據(jù)的一種手段。今天,奇偶校驗通常由數(shù)據(jù)存儲和通信設(shè)備完成,而不是由微處理器完成。所以,這個標(biāo)志位在現(xiàn)代程序設(shè)計中很少使用。(3)輔助進位標(biāo)志AF(AuxiliarycarryFlag):

輔助進位標(biāo)志也稱“半進位”標(biāo)志。AF=1,表示本次運算的低4位中的最高位有進位(加法運算時)或有借位(減法運算時)。AF一般用于BCD運算中是否進行十進制調(diào)整的依據(jù)。十進制調(diào)整指令DAA和DAS測試這個標(biāo)志位。(4)零標(biāo)志ZF(ZeroFlag):

反映運算結(jié)果是否為零。若結(jié)果為零,則ZF=1;若結(jié)果不為零,則ZF=0。(5)符號標(biāo)志SF(SignFlag):反映帶符號數(shù)(以二進制補碼表示)運算結(jié)果符號位的情況。若結(jié)果為負數(shù),則SF=1;若結(jié)果為正數(shù),則SF=0。SF的取值總是與運算結(jié)果的最高位(字節(jié)操作為D7,字操作為D15,雙字操作為D31)取值一致。(6)溢出標(biāo)志OF(OverflowFlag):反映有符號數(shù)運算結(jié)果是否發(fā)生溢出。若發(fā)生溢出,則OF=1;否則,OF=0。溢出是指運算結(jié)果超出了計算裝置所能表示的數(shù)值范圍。例如,對于字節(jié)運算,數(shù)值表示范圍為

-128~+127;對于字運算,數(shù)值表示范圍為-32768~+32767。若超過上述范圍,則發(fā)生了溢出。溢出是一種差錯,系統(tǒng)應(yīng)做相應(yīng)的處理?!耙绯觥迸c“進位”是兩種不同的概念。某次運算結(jié)果有“溢出”,不一定有“進位”;反之,有“進位”,也不一定發(fā)生“溢出”。另外,“溢出”標(biāo)志實際上是針對有符號數(shù)運算而言,對于無符號數(shù)運算,這里的溢出標(biāo)志OF無定義。無符號數(shù)運算的溢出狀態(tài)可通過進位標(biāo)志CF來反映。例:指出80x86CPU執(zhí)行如下指令后,標(biāo)志寄存器中各狀態(tài)標(biāo)志位的值:(1)MOVAX,32C5H(2)MOVAX,0E453HADDAX,546AHADDAX,0C572H

:

(1)0011001011000101(2)1110010001010011+0101010001101010+110001010111001010000111001011111010100111000101所以,

OF=1SF=1ZF=0OF=0SF=1ZF=0AF=0PF=0CF=0AF=0PF=1CF=1三個控制標(biāo)志的功能:

(1)方向標(biāo)志DF(DirectionFlag):用來控制串操作指令的執(zhí)行。若DF=0,則串操作指令的地址自動增量修改,串?dāng)?shù)據(jù)的傳送過程是從低地址到高地址的方向進行;若DF=1,則串操作指令的地址自動減量修改,串?dāng)?shù)據(jù)的傳送過程是從高地址到低地址的方向進行??梢栽O(shè)置DF的指令為STD(置1)和CLD(清0)。(2)中斷標(biāo)志IF(InterruptFlag):用來控制對可屏蔽中斷的響應(yīng)。若IF=1,則允許CPU響應(yīng)可屏蔽中斷請求;若IF=0,則CPU不能對可屏蔽中斷請求作出響應(yīng)??梢栽O(shè)置IF的指令有STI(置1)和CLI(置0)。IF對非屏蔽中斷和內(nèi)部中斷不起作用。(3)陷阱標(biāo)志TF(TrapFlag):陷阱標(biāo)志也稱單步標(biāo)志。當(dāng)TF=1時,微處理器就進入單步工作方式,每執(zhí)行完一條指令便自動產(chǎn)生一個內(nèi)部中斷(稱為單步中斷),轉(zhuǎn)去執(zhí)行一個中斷服務(wù)程序,可以借助中斷服務(wù)程序來檢查每條指令的執(zhí)行情況;若TF=0,則CPU正常(連續(xù))執(zhí)行指令。單步工作方式常用于程序的調(diào)試。4.段寄存器微處理器寄存器集合中的另一組寄存器為16位的段寄存器,用于與微處理器中的其他寄存器聯(lián)合生成存儲器地址。對于同一個微處理器而言,段寄存器的功能在實模式下和保護模式下是不相同的。(1)代碼段寄存器CS(CodeSegment):代碼段是一個存儲區(qū)域,用以保存微處理器使用的代碼(程序或過程)。代碼段寄存器定義代碼段的起始地址。在實模式下工作時,它定義一個64K字節(jié)存儲器段的起點;在保護模式下工作時,它選擇一個描述代碼段起始地址、長度及其他一些必要的屬性信息(如可讀、可寫或可被執(zhí)行等)的描述符。(2)數(shù)據(jù)段寄存器DS(DataSegment):數(shù)據(jù)段是包含程序所使用的大部分數(shù)據(jù)的存儲區(qū)。與代碼段寄存器CS類似,數(shù)據(jù)段寄存器DS用以定義數(shù)據(jù)段的起始地址。與代碼段一樣,對于8086~80286,數(shù)據(jù)段的長度限制為64KB;對于工作在保護模式下的80386及更高型號的微處理器,數(shù)據(jù)段長度限制為4GB。(3)附加段寄存器ES(ExtraSegment):附加段是為某些串操作指令存放目的操作數(shù)而附加的一個數(shù)據(jù)段。附加段寄存器ES用以定義附加段的起始地址。附加段的長度限制與上述代碼段及數(shù)據(jù)段的情況相同。(4)堆棧段寄存器SS(StackSegment):

堆棧是存儲器中的一個特殊存儲區(qū),用以暫時存放程序運行中的一些數(shù)據(jù)和地址信息。堆棧段寄存器SS定義堆棧段的首地址。由堆棧段寄存器SS和堆棧指針寄存器(ESP/SP)確定堆棧段內(nèi)的存取地址。另外,EBP/BP寄存器也可以尋址堆棧段內(nèi)的數(shù)據(jù)。

(5)段寄存器FS和GS:這兩個段寄存器僅對80386及更高型號的微處理器有效,以便程序訪問相應(yīng)的兩個附加的存儲器段。3.3實模式下的存儲器尋址

3.3.1實模式下的存儲器地址空間在實模式下存儲器的地址空間為1M字節(jié)單元,其地址范圍為00000H~FFFFFH。實模式下的存儲器地址空間被分為通用和專用兩種存儲區(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ù)。由圖3.5可見,它的地址范圍為00400H~FFFEFH。..FFFFFHFFFF0H通用區(qū)專用區(qū)FFFEFH00400H003FFH00000H專用區(qū)圖3.5實模式下存儲器地址空間3.3.2存儲器分段技術(shù)為什么要采用存儲器“分段”技術(shù)?實模式下CPU可直接尋址的地址空間為220=1M字節(jié)單元。CPU需輸出20位地址信息才能實現(xiàn)對1M字節(jié)單元存儲空間的尋址。但實模式下CPU中所使用的寄存器均是16位的,內(nèi)部ALU也只能進行16位運算,其尋址范圍局限在216=65536(64K)字節(jié)單元。為了實現(xiàn)對1M字節(jié)單元的尋址,80x86系統(tǒng)采用了存儲器分段技術(shù)。具體做法是,將1M字節(jié)的存儲空間分成許多邏輯段,每段最長64K字節(jié)單元,可以用16位地址碼進行尋址。每個邏輯段在實際存儲空間中的位置是可以浮動的,其起始地址可由段寄存器的內(nèi)容來確定。實際上,段寄存器中存放的是段起始地址的高16位,稱之為“段基值”(segmentbasevalue)。邏輯段在物理存儲器中的位置如圖3.6所示。..FFFFFH邏輯段1起點邏輯段2起點邏輯段3起點邏輯段4起點00000H邏輯段1≤64KB邏輯段2≤

64KB邏輯段3≤

64KB邏輯段4≤

64KB

圖3.6邏輯段在物理存儲器中的位置各個邏輯段在實際的存儲空間中可以完全分開,也可以部分重疊,甚至完全重疊。段的起始地址的計算和分配通常是由操作系統(tǒng)完成的,并不需要普通用戶參與。還有其他方法也可以將1M字節(jié)單元的物理存儲器空間分成可用16位地址碼尋址的邏輯段。例如將20位物理地址分成兩部分:高4位為段號,可用機器內(nèi)設(shè)置的4位長的“段號寄存器”來保存,低16位為段內(nèi)地址,也稱“偏移地址”,如下圖所示:..191615121187430XXXX段號(4位)段內(nèi)地址(16位)

這種分段方法有其不足之處:(1)4位長的“段號寄存器”與其他寄存器不兼容,操作上會增添麻煩。

(2)每個邏輯段大小固定為64K字節(jié)單元,當(dāng)程序中所需的存儲空間不是64K字節(jié)單元的倍數(shù)時,就會浪費存儲空間。反觀前一種分段機制,則要靈活、方便得多,所以80x86/Pentium系統(tǒng)中采用了前一種分段機制。3.3.3實模式下的存儲器尋址1.物理地址與邏輯地址在有地址變換機構(gòu)的計算機系統(tǒng)中,每個存儲單元可以看成具有兩種地址:物理地址和邏輯地址。物理地址是信息在存儲器中實際存放的地址,它是CPU訪問存儲器時實際輸出的地址。例如,實模式下的80x86/Pentium系統(tǒng)的物理地址是20位,存儲空間為220=1M字節(jié)單元,地址范圍從00000H到FFFFFH。邏輯地址是編程時所使用的地址。編程時不需要知道產(chǎn)生的代碼或數(shù)據(jù)在存儲器中的具體物理位置。這樣可以簡化存儲資源的動態(tài)管理。在實模式下的軟件結(jié)構(gòu)中,邏輯地址由“段基值”和“偏移量”兩部分構(gòu)成。“段基值”是段的起始地址的高16位?!捌屏俊?offset)也稱偏移地址,它是所訪問的存儲單元距段的起始地址之間的字節(jié)距離。給定段基值和偏移量,就可以在存儲器中尋址所訪問的存儲單元。在實模式下,“段基值”和“偏移量”均是16位的?!岸位怠庇啥渭拇嫫鰿S、DS、SS、ES、FS和GS提供;“偏移量”由BX、BP、SP、SI、DI、IP或以這些寄存器的組合形式來提供。2.實模式下物理地址的產(chǎn)生實模式下CPU訪問存儲器時的20位物理地址可由邏輯地址轉(zhuǎn)換而來。具體方法是,將段寄存器中的16位“段基值”左移4位(低位補0),再與16位的“偏移量”相加,即可得到所訪問存儲單元的物理地址,如圖3.7所示。..段基值(16位)偏移量(16位)150150段基值(16位)1500000段寄存器地址加法器物理地址(20位)190物理地址邏輯地址圖3.7實模式下物理地址的產(chǎn)生上述由邏輯地址轉(zhuǎn)換為物理地址的過程也可以表示成如下計算公式:

物理地址=段基值×16+偏移量上式中的“段基值×16”在微處理器中是通過將段寄存器的內(nèi)容左移4位(低位補0)來實現(xiàn)的,與偏移量相加的操作則由地址加法器來完成。例3.2

設(shè)代碼段寄存器CS的內(nèi)容為4232H,指令指針寄存器IP的內(nèi)容為0066H,即CS=4232H,IP=0066H,則訪問代碼段存儲單元的物理地址計算如下:..42320066423200660段基值偏移量左移4位物理地址邏輯地址

42386+)例3.3

設(shè)數(shù)據(jù)段寄存器DS的內(nèi)容為1234H,基址寄存器BX的內(nèi)容為0022H,即DS=1234H,BX=0022H,則訪問數(shù)據(jù)段存儲單元的物理地址計算如下:.12340022123400220段基值偏移量左移4位物理地址邏輯地址

12362+).例3.4

若段寄存器內(nèi)容是002AH,產(chǎn)生的物理地址是002C3H,則偏移量是多少?

解:

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

002C3H-002A0H=0023H。

需注意的是,每個存儲單元有惟一的物理地址,但它可以由不同的“段基值”和“偏移量”轉(zhuǎn)換而來,這只要把段基值和偏移量改變?yōu)橄鄳?yīng)的值即可。

同一個物理地址可以由不同的邏輯地址來構(gòu)成。或者說,同一個物理地址與多個邏輯地址相對應(yīng)。例如,段基值為0020H,偏移量為0013H,構(gòu)成的物理地址為00213H;若段基值改變?yōu)?021H,配以新的偏移量0003H,其物理地址仍然是00213H,如圖3.9所示。..00213H00212H00211H00210H0020FH0020EH0020DH0020CH0020BH0020AH00209H00208H00207H00206H00205H00204H00203H00202H00201H00200H段基值(0021H)段基值(0020H)偏移量(13H)物理地址偏移量(03H)邏輯地址圖3.9一個物理地址對應(yīng)多個邏輯地址3.“段加偏移”尋址上述由段基值(段寄存器的內(nèi)容)和偏移量相結(jié)合的存儲器尋址機制也稱為“段加偏移”尋址機制,所訪問的存儲單元的地址常被表示成“段基值:偏移量”的形式。例如,若段基值為2000H,偏移量為3000H,則所訪問的存儲單元的地址為2000H:3000H。圖3.10進一步說明了這種“段加偏移”的尋址機制如何選擇所訪問的存儲單元的情形。這里段寄存器的內(nèi)容為1000H,偏移地址為2000H。圖中顯示了一個64KB長的存儲器段,該段起始于10000H,結(jié)束于1FFFFH。圖中也表示了如何通過段基值(段寄存器的內(nèi)容)和偏移量找到存儲器中被選單元的情形。偏移量(offset)也稱偏移地址,正如圖中所示,它是自段的起始位置到所選存儲單元之間的距離(或跨度)。..1FFFFH(段終址)10000H(段始址)12000H(被選單元)一個邏輯段(64KB)FFFFFH實模式存儲器1000H段寄存器偏移量=2000H圖3.10實模式下存儲器尋址機制——“段加偏移”

圖3.10中段的起始地址10000H是由段寄存器內(nèi)容1000H左移4位低位補0(或在1000H后邊添加0H)而得到的。段的結(jié)束地址1FFFFH是由段起始地址10000H與段長度FFFFH(64K)相加之結(jié)果。在這種“段加偏移”的尋址機制中,由于是將段寄存器的內(nèi)容左移4位(相當(dāng)于乘以十進制數(shù)16)來作為段的起始地址的,所以實模下各個邏輯段只能起始于存儲器中16字節(jié)整數(shù)倍的邊界。這樣可以簡化實模式下CPU生成物理地址的操作。通常稱這16字節(jié)的小存儲區(qū)域為“分段”或“節(jié)”(paragraph)。4.默認的段和偏移寄存器在“段加偏移”的尋址機制中,微處理器有一套用于定義各種尋址方式中段寄存器和偏移地址寄存器的組合規(guī)則。如表3-1和表3-2所示。..段寄存器偏移地址寄存器主要用途CSIP指令地址SSSP或BP

溫馨提示

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

評論

0/150

提交評論