《匯編語言與接口技術(shù)》配套教學(xué)課件_第1頁
《匯編語言與接口技術(shù)》配套教學(xué)課件_第2頁
《匯編語言與接口技術(shù)》配套教學(xué)課件_第3頁
《匯編語言與接口技術(shù)》配套教學(xué)課件_第4頁
《匯編語言與接口技術(shù)》配套教學(xué)課件_第5頁
已閱讀5頁,還剩820頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

匯編語言與接口技術(shù)綜合評測考試+作業(yè)+實(shí)驗(yàn)(報告)+考勤與其他課程的關(guān)系匯編語言程序設(shè)計(jì)硬件構(gòu)成、芯片編程使用微型計(jì)算機(jī)硬件系統(tǒng)馮·諾依曼型計(jì)算機(jī)的硬件分成五大部件,包括運(yùn)算器、控制器、存儲器、輸入設(shè)備和輸出設(shè)備主板外部設(shè)備I/O接口微處理器CPU芯片組總線控制邏輯內(nèi)存微處理器簡稱μP、MP或MPU算術(shù)邏輯單元ALU(ArithmeticLogicUnit)、控制單元CU(ControlUnit)和寄存器組(Registers)三個基本部分以及內(nèi)部總線通用CPU專用單片機(jī)(SingleChipMicrocomputer)和數(shù)字信號處理器(DigitalSignalProcessor,DSP)微處理器單片機(jī)又叫微控制器(MicroControllerUnit,MCU),常用于控制領(lǐng)域,芯片內(nèi)部除了CPU外還集成了其他如RAM/ROM,輸入輸出接口等主要部件,一個芯片配上少量的外部電路和設(shè)備就能構(gòu)成具體的應(yīng)用系統(tǒng)。比較著名的包括Intel公司的8位MCS51系列、16位/32位的MCS96/98系列以及其他各大處理器廠商基于ARM架構(gòu)的各系列處理器。數(shù)字信號處理器專注于數(shù)字信號的高速處理,這類微處理器主要在通信、消費(fèi)類電子產(chǎn)品領(lǐng)域使用,比較知名的是美國德州儀器公司(TexasInstruments,TI)的系列產(chǎn)品,如TMS320系列各代DSP等。80x86系列CPU發(fā)展1971年Intel成功設(shè)計(jì)了世界上的第一個微處理器:4位微處理器Intel4004。執(zhí)行速度為50KIPS(IPS=InstructionPerSecond),即每秒執(zhí)行5萬條指令80x86系列CPU發(fā)展8位微處理器1972年Intel公司推出了世界上第一款8位處理器8008Motorola公司的M6800、Zilog公司的Z80等Intel4004Intel8008Intel808016位微處理器1978年6月,Intel8086,第一個16位CPU1979年6月,Intel推出了Intel8088主要區(qū)別在于外部數(shù)據(jù)總線的寬度只能支持整數(shù)運(yùn)算80286微處理器,該微處理器的最大主頻為20MHz,內(nèi)、外部數(shù)據(jù)傳輸均為16位,使用24位地址總線。80286首次引入了保護(hù)模式32位微處理器1986年Intel推出了80386,它的數(shù)據(jù)總線和地址總線都是32位的,內(nèi)部寄存器和操作也都是32位引入了虛擬8086模式1989年,Intel公司推出了80486,它集成了80386、80387和8KB片內(nèi)高速緩存從80486開始,Intel采用了倍頻技術(shù)32位微處理器在1993年3月,Intel推出新一代奔騰(Pentium)CPUPentium內(nèi)部的寄存器和運(yùn)算操作仍然是32位兩個整型處理單元和一個浮點(diǎn)協(xié)處理單元兩條指令流水線超級標(biāo)量技術(shù)動態(tài)轉(zhuǎn)移預(yù)取技術(shù)準(zhǔn)64位32位微處理器1995年11月,Intel推出的PentiumPro,地址總線為36位,尋址范圍達(dá)到236=64GB。其片內(nèi)高速緩存有兩級,分別為L1和L2,L2緩存為256KB或512KB。1997年1月,Intel發(fā)布了PentiumMMX指令集,增強(qiáng)了對多媒體數(shù)據(jù)的支持。32位微處理器1997年5月,Intel推出PentiumII,它的主頻達(dá)到233MHz~400MHz。片內(nèi)高速緩存為32KB,數(shù)據(jù)Cache和指令Cache各占16KB。L2緩存為512KB,但沒有包含在CPU內(nèi)部,采用新的封裝形式SECC(SingleEdgeContactCartridge,單邊接觸盒專利(Slot1))來連接PentiumII和L2緩存。低端賽揚(yáng)(Celeron)處理器掉了它的L2緩存32位微處理器1999年2月,Intel推出PentiumIII處理器,主頻為450MHz、500MHz。具有一個流式指令擴(kuò)展SSE(StreamingSIMDExtensions,SIMD即SingleInstructionMultipleData,單指令多數(shù)據(jù)流)的指令集,全面增強(qiáng)三維圖形運(yùn)算,也對動畫、圖像、聲音、網(wǎng)絡(luò)、語音識別等功能進(jìn)一步增強(qiáng)。PIII芯片內(nèi)部都有一個128位處理器序號,每個CPU的序號是惟一的。用戶可以關(guān)閉。32位微處理器2000年11月,Intel推出PentiumIV處理器(也稱P4),主頻為1.4GHz。系統(tǒng)總線速度達(dá)到了400MHz,指令流水線達(dá)到20級,增加了SSE2指令集2004年2月,Intel發(fā)布了Pentium4E系列處理器64位微處理器2001年推出了第一款64位的Itanium(安騰)微處理器架構(gòu)不同于其他Intel處理器采用的x86(包含x86-64)架構(gòu),也不與x86架構(gòu)兼容,在市場上沒有取得很大的成功。AMD公司,沿襲了IA-32的思路,發(fā)布了與x86兼容的64位CPU英特爾64位擴(kuò)展技術(shù)(ExtendedMemory64Technology,EM64T)(走回老路)在x86-64上,部分技術(shù)的主導(dǎo)權(quán)已經(jīng)屬于AMD微處理器性能指標(biāo)速度指標(biāo)主頻也叫時鐘頻率主頻越高,一個時鐘周期里完成的指令數(shù)也越多,CPU的運(yùn)算速度也就越快,執(zhí)行程序的時間就能縮短外頻是系統(tǒng)總線的工作頻率,即CPU與周邊設(shè)備傳輸數(shù)據(jù)的頻率。目前絕大部分計(jì)算機(jī)系統(tǒng)中外頻也是內(nèi)存與主板之間同步運(yùn)行的速度微處理器性能指標(biāo)倍頻是指CPU和系統(tǒng)總線之間工作頻率相差的倍數(shù),當(dāng)外頻不變時,倍頻越高,CPU主頻也就越高。CPU主頻的計(jì)算方式變?yōu)椋褐黝l=外頻×倍頻。倍頻可以從1.5一直到23甚至更高,以0.5為一個間隔單位。例如當(dāng)外頻等于200MHz時,倍頻為9,則主頻為200MHz×9=1.8GHz。假定購買了一顆CPU,它的工作頻率是2.4GHz,倍頻系數(shù)設(shè)定為18,請問外頻是多少?2.4GHz/18≈133MHz,因此在設(shè)置主板跳線時應(yīng)將主板頻率置為133MHz。微處理器性能指標(biāo)前端總線(FrontSideBus,F(xiàn)SB)是指處理器到北橋之間的總線。前端總線的數(shù)據(jù)帶寬=(總線頻率×數(shù)據(jù)位寬)÷8QDR(QuadDateRate)技術(shù)及其他類似的技術(shù)使得前端總線的頻率成為外頻的2倍、4倍甚至更高。如Intel在Pentium4處理器采用了4倍傳輸率的前端總線,該技術(shù)可以使系統(tǒng)總線在一個時鐘周期內(nèi)傳送4次數(shù)據(jù)。內(nèi)存控制器被逐步集成到了處理器中,CPU直接和內(nèi)存通信,不再通過北橋,前端總線也就消失了微處理器性能指標(biāo)例1-2IntelPentium4處理器中采用了四倍傳輸率的前端總線,當(dāng)主頻為3.2GHz,外頻為200MHz時,試問倍頻是多少?已知數(shù)據(jù)位寬為64位,則前端總線頻率為多少?前端總線的數(shù)據(jù)傳輸性能峰值為多少?倍頻=3.2GHz/200MHz=16FSB頻率=200MHz×4=800MHz峰值傳輸性能200M×4×64÷8=6.4G/s高速緩沖存儲器CPU與主存之間數(shù)據(jù)交換的速度成為整個計(jì)算機(jī)處理能力的瓶頸高速緩沖存儲器Cache目的是協(xié)調(diào)主頻和內(nèi)存總線頻率之間的差異。高速緩存的容量和工作速率對提高計(jì)算機(jī)的性能有著重要的作用。CPU的緩存分為:

LlCache(一級緩存),CPU同頻,內(nèi)部

L2Cache(二級緩存)

L3Cache(三級緩存)L1常采用哈佛結(jié)構(gòu),分為數(shù)據(jù)緩存和指令緩存微處理器性能指標(biāo)制造工藝1995年以后,從0.5微米、0.35微米、0.25微米、0.18微米、0.15微米、0.13微米、0.09微米(90納米)、65納米、45納米,到現(xiàn)在14納米(2016年,Corei7Kabylake架構(gòu))以及用于移動平臺的10納米(2017年,高通Qualcomm驍龍835處理器)和7納米(2018年,三星/臺積電制程)微處理器性能指標(biāo)核心電壓一般CPU的工作電壓包括CPU的核心電壓與I/O電壓兩部分明顯下降趨勢,降低電壓是CPU主頻提高的重要因素之一降低CPU的功耗,減少發(fā)熱量微處理器性能指標(biāo)封裝形式雙列直插式封裝技術(shù),也叫DIP封裝(DualIn-LinePackage)Socket架構(gòu)的常采用插針網(wǎng)格陣列封裝技術(shù)(CeramicPinGridArrauPackage,PGA)、球柵陣列封裝技術(shù)(BallGridArrayPackage,BGA)或者觸點(diǎn)陣列封裝(LandGridArray,LGA)封裝微處理器軟件特性工作模式實(shí)模式、保護(hù)模式和虛擬實(shí)模式指令系統(tǒng)復(fù)雜指令集CISC,精簡指令集RISC微處理器軟件特性超線程技術(shù)一個物理處理器核上會模擬出兩個邏輯內(nèi)核微處理器軟件特性超標(biāo)量和超長指令字超標(biāo)量技術(shù)指的是CPU在同一時刻執(zhí)行兩條或兩條以上指令的能力。超標(biāo)量結(jié)構(gòu)使用多個功能部件同時執(zhí)行多條指令,實(shí)現(xiàn)指令級的并行超標(biāo)量超標(biāo)量+超流水多核技術(shù)為什么多核?單核發(fā)展到了極限。功耗限制互連線延時設(shè)計(jì)復(fù)雜度多核技術(shù)什么是多核多核是指在一枚處理器中集成兩個或多個完整的計(jì)算引擎(內(nèi)核),多核處理器是單枚芯片(也稱為“硅核”),能夠直接插入單一的處理器插槽中,操作系統(tǒng)會利用所有相關(guān)的資源,將它的每個執(zhí)行內(nèi)核作為分立的邏輯處理器。通過在多個執(zhí)行內(nèi)核之間劃分任務(wù),多核處理器可在特定的時鐘周期內(nèi)執(zhí)行更多任務(wù),實(shí)現(xiàn)更好的并行處理。多核技術(shù)1996年斯坦福大學(xué)研制出世界上第一款多核處理器的原型系統(tǒng)Hydra以來。2005年4月Intel推出簡單封裝雙核的奔騰D和奔騰4至尊840處理器;AMD公司也發(fā)布了雙核皓龍(Opteron)和速龍(Athlon)。2006年被認(rèn)為是雙核元年。超級計(jì)算中國從1978年開始,歷經(jīng)5年研制,中國第一臺被命名為“銀河”的億次巨型電子計(jì)算機(jī)在國防科技大學(xué)誕生。2010年11月14日中國首臺千萬億次超級計(jì)算機(jī)系統(tǒng)“天河一號”在全球超級計(jì)算機(jī)前500強(qiáng)排行榜排名第一。直到2011年才被日本超級計(jì)算機(jī)“京”超越。2013年6月由國防科技大學(xué)研制的“天河二號”超級計(jì)算機(jī)系統(tǒng),以峰值計(jì)算速度每秒5.49億億次、持續(xù)計(jì)算速度每秒3.39億億次雙精度浮點(diǎn)運(yùn)算的優(yōu)異性能位居榜首,成為全球最快超級計(jì)算機(jī)。截止到2015年3月“天河二號”

多次蟬聯(lián)全球最快的超級計(jì)算機(jī)冠軍。超級計(jì)算在2017年全球超級計(jì)算機(jī)500強(qiáng)排名中,中國的“神威·太湖之光”和“天河二號”超級計(jì)算機(jī)分列冠亞軍。500強(qiáng)榜單中,中國占了202臺,美國有143臺。此外,中國超算的總性能也超越美國,占該榜單總處理能力的35.4%,美國則占29.6%。處理器是軟肋匯編語言與接口技術(shù)主板和內(nèi)存主板(MainBoard,MotherBoard,SystemBoard)是微型機(jī)各種硬件的載體。微型機(jī)的CPU、內(nèi)存及芯片組等部件都安裝在一塊電路板上,這塊電路板稱為主機(jī)板(主板)。主板結(jié)構(gòu)AT、ATX和BTX三大類AT結(jié)構(gòu)主要在早期的微型計(jì)算機(jī)中使用,目前已經(jīng)被淘汰。AT結(jié)構(gòu)的初始設(shè)計(jì)是讓擴(kuò)展總線以微處理器相同的時鐘速率來運(yùn)行。擴(kuò)展AT(AdvancedTechnologyeXtended)主板結(jié)構(gòu),即ATX主板標(biāo)準(zhǔn),取代了AT主板規(guī)格。BTX(BalancedTechnologyeXtended)是Intel公司2003年發(fā)布的新型主板架構(gòu),目標(biāo)是取代ATX結(jié)構(gòu)。新架構(gòu)的發(fā)展目標(biāo)是完全取消傳統(tǒng)的串口、并口、PS/2等接口,并很好支持PCIExpress和串行ATA等新技術(shù)。芯片組芯片組(Chipset)是主板的核心組成部分幾乎決定了主板的全部功能包括控制芯片組、主板BIOS芯片和CMOS芯片等控制芯片組南北橋體系結(jié)構(gòu)CPU+北橋+南橋的體系結(jié)構(gòu)內(nèi)存控制器:北橋芯片I/O控制器:南橋芯片北橋芯片控制CPU、內(nèi)存和圖形加速器接口(AGP)等設(shè)備之間的數(shù)據(jù)傳輸主板上靠近CPU插槽的位置。發(fā)熱量一般較高,通常需要安裝散熱片內(nèi)存控制器中心(MemoryController

Hub,MCH)前端總線FSB由MCH提供,目前是64位芯片組的名稱就是以北橋芯片的名稱來進(jìn)行命名北橋芯片MCH芯片的類型決定著RAM的類型和容量早期MCH提供的顯卡接口是AGP(AcceleratedGraphicsPort)總線接口,但現(xiàn)在已被數(shù)據(jù)傳輸速率更快的PCI-E取代南橋芯片I/O控制中心(I/O

Controller

Hub,ICH)負(fù)責(zé)對I/O設(shè)備的讀寫控制和數(shù)據(jù)的傳輸處理,提供各種外部設(shè)備的接口來實(shí)現(xiàn)硬、軟盤和光驅(qū)等設(shè)備之間的數(shù)據(jù)傳輸一般在遠(yuǎn)離CPU插槽,靠近PCI槽的位置,這種布局是考慮到它所連接的I/O總線較多,離處理器遠(yuǎn)一點(diǎn)有利于布線IDE(Integrated

Drive

Electronics)控制器、USB(Universal

Serial

Bus)控制器、PCI控制器、音頻控制器、SATA(Serial

Advanced

Technology

Attachment)控制器和網(wǎng)絡(luò)控制器、DMA控制器、中斷控制器、定時/計(jì)數(shù)器、實(shí)時時鐘控制器RTC(Real-Time

Clock)和CMOS

RAM南橋芯片ICH10是最后一個版本PCH平臺控制器支持6條PCI-E通道、4個主PCI接口、12個USB2.0接口、并支持USB接口禁用功能,支持6個SATA3Gbps接口單芯片組體系結(jié)構(gòu)CPU+南橋的單芯片組體系結(jié)構(gòu)內(nèi)存控制器、北橋芯片的其它部分包括GPU核心、PCI-E控制器等都被集成到CPU里面BIOS及CMOS芯片BIOS(BasicInput/OutputSystem,基本輸入/輸出系統(tǒng))全稱是ROM-BIOS,只讀存儲器基本輸入輸出系統(tǒng)開機(jī)上電自檢程序和系統(tǒng)啟動自舉程序、系統(tǒng)設(shè)置信息早期的BIOS多為可重寫EPROM芯片,現(xiàn)在多采用FlashROM(可擦可編程只讀存儲器)BIOS及CMOS芯片CMOS芯片是電腦主板上的一塊可讀寫的RAM芯片,用它來保存當(dāng)前系統(tǒng)的硬件配置和用戶對某些參數(shù)的設(shè)定?,F(xiàn)在做到了BIOS芯片中CMOS電池單通道內(nèi)存技術(shù)單通道系統(tǒng)中,北橋芯片內(nèi)部只有一個內(nèi)存控制器,系統(tǒng)安裝的多個內(nèi)存條連接到同一個內(nèi)存總線上。多個內(nèi)存條相當(dāng)于串行工作,一次只有一個內(nèi)存條工作,內(nèi)存條數(shù)目增多,只能增加容量,并不能增加帶寬。假定2條DDR400內(nèi)存條,工作在200MHz頻率下,每個時鐘可以傳送2次64位數(shù)據(jù),則單通道系統(tǒng)中內(nèi)存總線的總帶寬是多少?200M×2×64÷8=6400MB/s=3.2GB/s雙通道內(nèi)存技術(shù)芯片組有兩個內(nèi)存控制器,構(gòu)成雙通道內(nèi)存總線(DualChannelMemoryBus)與內(nèi)存本身無關(guān),任何DDR內(nèi)存都可工作在支持雙通道技術(shù)的主板上內(nèi)存條利用并聯(lián)方式運(yùn)行,當(dāng)連接兩條內(nèi)存時,總線寬度達(dá)到64×2=128位雙通道要求按主板上內(nèi)存插槽的顏色成對使用,如雙通道系統(tǒng)中安裝兩條2GB的內(nèi)存比安裝一條4GB的效果要好雙通道內(nèi)存技術(shù)假定2條DDR400內(nèi)存條,工作在200MHz頻率下,每個時鐘可以傳送2次64位數(shù)據(jù)。雙通道系統(tǒng)中內(nèi)存總線的總帶寬是多少?2×200M×2×64÷8=6400MB/s=6.4GB/s三通道內(nèi)存技術(shù)隨著IntelCorei7平臺發(fā)布而出現(xiàn),是雙通道內(nèi)存技術(shù)的后續(xù)技術(shù)發(fā)展將同色的三根內(nèi)存插槽插上內(nèi)存即可,系統(tǒng)會自動識別,并進(jìn)入三通道模式如果插上非3或非6條的內(nèi)存,如4根內(nèi)存,系統(tǒng)會自動進(jìn)入單通道模式。主板插槽CPU插槽接口方式有引腳式、卡式、觸點(diǎn)式、針腳式常見的CPU插槽類型可分為Slot架構(gòu)和Socket架構(gòu)兩種內(nèi)存插槽早期的8位和16位SIMM(SingleInlineMemoryModule)內(nèi)存模組使用30Pin接口32位SIMM模組使用72Pin接口SDRAM開始使用DIMM結(jié)構(gòu)的插槽SDRAMDIMM為168PinDIMM結(jié)構(gòu),每面為84Pin,有兩個卡口,用來避免插入插槽時,錯誤將內(nèi)存反向插入DDRDIMM則采用184PinDIMM結(jié)構(gòu),每面有92Pin,只有一個卡口DDR2、DDR3DIMM為240PinDIMM結(jié)構(gòu),每面有120Pin電源插槽有AT電源插座和ATX電源插座兩種AT電源插座為12芯單列插座,目前已被淘汰ATX電源插座早期為D型20芯雙列插座從ATX12V2.0開始,電源接口從傳統(tǒng)的20芯升級為24芯,多出的4芯主要是為解決功耗較大的PCI-E顯卡供電問題CPU電源4芯的+12V接插頭,單獨(dú)向處理器供電服務(wù)器平臺上由于對供電要求更高,很早引入了更強(qiáng)的8PIN12V接口PCI插槽PCI(PeripheralComponentInterconnect,外設(shè)部件互連總線)Intel公司1991年推出的用于定義局部總線的標(biāo)準(zhǔn),支持即插即用在CPU和原來的ISA總線之間插入的一級總線工作頻率一般為33MHz/66MHz,提供32位和64位兩種位寬33MHz下最大數(shù)據(jù)傳輸率為133MB/sec(32位)和266MB/sec(64位)目前被PCI-E(PCIExpress)逐步取代PCI-E插槽完全兼容PCI較短的PCI-E卡可以插入較長的PCI-E插槽中使用,支持熱拔插IDE接口也稱作并行ATA(ParallelATA)ICH有2個IDE通道,每個通道上可以連接2個IDE設(shè)備(如硬盤、光驅(qū)等),其中一個為主設(shè)備(Master),另一個為從設(shè)備(Master)已經(jīng)被SATA接口所取代IDE接口SATASerialATA采用串行方式傳輸數(shù)據(jù),只需要7芯電纜就能連接主板和硬盤。結(jié)構(gòu)簡單,支持熱插拔,數(shù)據(jù)傳輸可靠性高,傳輸?shù)乃俣冗_(dá)到600MB/s甚至更高機(jī)箱連接線用來連接主板和機(jī)箱面板計(jì)算機(jī)狀態(tài)指示以及外延主板開關(guān)和接口一般黑色/白色為負(fù),其他顏色為正外部接口主要包括用于操作控制、音視頻輸入/輸出、網(wǎng)絡(luò)接入、外置存儲接入等接口PS/2接口來源于Personal2,IBM個人電腦用于鼠標(biāo)、鍵盤等設(shè)備的輸入裝置接口,不是傳輸接口只有采樣率,沒有傳輸速率一般情況下,PS/2接口的鼠標(biāo)為綠色,鍵盤為紫色VGA、DVI和HDMI接口VGA是傳輸模擬信號,DVI和HDMI傳輸數(shù)字信號。后兩者傳輸數(shù)字信號的抗干擾性和傳輸穩(wěn)定性比VGA好。與DVI相比,HDMI主要優(yōu)勢是能夠同時傳輸音頻數(shù)據(jù),在視頻數(shù)據(jù)的傳輸上沒有差別USB接口1996年Intel牽頭推出是連接計(jì)算機(jī)系統(tǒng)與外部設(shè)備的一種串口總線標(biāo)準(zhǔn),也是一種輸入輸出接口的技術(shù)規(guī)范目前為3.0版本,傳輸速度達(dá)到4.8Gbps已取代原有的串口和并口e-SATA接口擴(kuò)展的SATA接口讓外部I/O接口使用SATA功能并不是一種獨(dú)立的外部接口技術(shù)標(biāo)準(zhǔn)擁有e-SATA接口的電腦,可以把SATA設(shè)備直接從外部連接到系統(tǒng)當(dāng)中,而不用打開機(jī)箱。其他接口網(wǎng)口音頻接口(DAC/ADC)IEEE1394接口串/并口內(nèi)存內(nèi)存和外存的差異工藝容量成本速度揮發(fā)性存儲器容量存儲器的容量以字節(jié)(byte)為單位,用大寫字母B表示。以字節(jié)編址,包含8個二進(jìn)制位(bit)二進(jìn)制位用小寫字母b表示。在描述比較大的存儲容量時,經(jīng)常使用KB、MB、GB、TB等單位。內(nèi)存地址及內(nèi)容每個單元分配了一個唯一的地址,地址從0開始編號,順序遞增10000100025 90 D6 0E 25 40 FC 00-00 00 00 00 25 60 FC 000000101000 00 00 00 00 00 0000-00 00 00 00 00 00 00 000000102000 00 00 00 00 00 0000-00 00 00 00 00 00 00 000000103000 00 00 00 00 00 0000-00 00 00 00 25 20 EA 0E0000104000 00 00 00 67 40 270F-67 E0 7A 00 00 00 00 00

字節(jié)、字、雙字字節(jié):字節(jié)是PC機(jī)中內(nèi)存存取信息的基本單位,1個字節(jié)包含8個二進(jìn)制位字:1個字包含16個二進(jìn)制位,即兩個字節(jié),分別稱為高字節(jié)和低字節(jié)。雙字:1個雙字包含32個二進(jìn)制位存儲器訪問單字節(jié)數(shù)據(jù)訪問多字節(jié)數(shù)據(jù)訪問小端存儲:低字節(jié)在前(LittleEndian)的存儲格式。即低地址中存放低字節(jié)數(shù)據(jù),高地址中存放高字節(jié)數(shù)據(jù)訪問這些數(shù)據(jù)時只需給出最低單元的地址號000010002590D60E2540FC00000000002560FC00從00001000H中分別取出1個字和一個雙字9025H和0ED69025H00001000:2590D60E2540FC00000000002560FC00按小端存儲讀出0000100C地址的字節(jié)、字、雙字?jǐn)?shù)據(jù)(0000100C)字節(jié)=25H(0000100C)字=6025H(0000100C)雙字=00FC6025H匯編語言與接口技術(shù)微處理器管理模式微處理器的基本結(jié)構(gòu)CPUMMUBIUBIU總線接口部件(BusInterfaceUnit,BIU)通過數(shù)據(jù)總線、地址總線、控制總線來與外部環(huán)境聯(lián)系,包括從存儲器中預(yù)取指令、讀寫數(shù)據(jù),從I/O端口讀寫數(shù)據(jù),以及其他的控制功能。數(shù)據(jù)總線和地址總線都是32位的。從存儲器中存儲數(shù)據(jù)最快也需要兩個時鐘周期內(nèi)完成。CPU中央處理部件(CentralProcessUnit,CPU)由指令部件和執(zhí)行部件組成。指令部件包括指令預(yù)取單元(InstructionPrefetchUnit,IUP)和指令譯碼單元(InstructionDecodeUnit,IDU)兩部分指令預(yù)取負(fù)責(zé)從存儲器取出指令,放到一個16字節(jié)的FIFO指令隊(duì)列中,這個隊(duì)列叫做指令預(yù)取隊(duì)列。指令譯碼單元從指令預(yù)取隊(duì)列中取出指令,進(jìn)行譯碼,并將譯碼后的可執(zhí)行指令放入已譯碼指令隊(duì)列中。執(zhí)行部件(ExecutionUnit,EU)執(zhí)行從已譯碼指令隊(duì)列中取出的指令。它包含8個32位通用寄存器、32位的算術(shù)運(yùn)算單元ALU、1個64位的移位器和乘/除硬件。如果是算術(shù)、邏輯或者移位指令,則交給ALU處理,若指令執(zhí)行時需要段或者頁單元產(chǎn)生操作數(shù)地址(尋址),則交給分段或者分頁單元進(jìn)行處理。MMU存儲器管理單元由分段部件和分頁部件組成,提供存儲器管理和保護(hù)服務(wù),實(shí)現(xiàn)從邏輯地址到物理地址的轉(zhuǎn)換,既支持段式存儲管理、頁式存儲管理,也支持段頁存儲管理。CPU工作模式實(shí)模式CPU被復(fù)位(加電)時,自動進(jìn)入實(shí)模式。在實(shí)模式下,這些CPU就相當(dāng)于高性能的8086,使用1MB地址空間以及16位的“段首址:偏移”的地址格式。全部權(quán)限保護(hù)模式CPU支持內(nèi)存分頁機(jī)制,提供段式和頁式內(nèi)存管理功能,協(xié)助操作系統(tǒng)高效地實(shí)現(xiàn)虛擬內(nèi)存,支持多任務(wù)和特權(quán)級等。保護(hù)模式下CPU執(zhí)行JMP/CALL/IRET等指令,就可實(shí)現(xiàn)任務(wù)切換。分為特權(quán)級0、1、2、3虛擬8086模式兼容以前的DOS及應(yīng)用程序(即8086程序),從80386開始增加了虛擬8086模式(V86模式)86模式是以任務(wù)形式在保護(hù)模式上執(zhí)行的,每個任務(wù)都有自己的任務(wù)狀態(tài)段,各個V86任務(wù)所擁有的1MB地址空間相互獨(dú)立特權(quán)指令,如屏蔽中斷指令CLI、中斷指令I(lǐng)NT、中斷返回指令I(lǐng)RET等,在DOS程序中是合法的。如果不讓這些指令在V86模式中執(zhí)行,DOS程序就無法工作。為了解決這個問題,V86管理程序采用模擬的方法來完成這些指令。寄存器微處理器內(nèi)部的寄存器可以分為:程序可見的寄存器(ProgramVisibleRegister)程序不可見的寄存器(ProgramInvisibleRegister)80386以上CPU才包含程序不可見寄存器組程序可見寄存器Intel8086~Core2(包括64位擴(kuò)展)通用型寄存器寄存器常用功能64位32位16位8位RAX累加器,乘法、除法運(yùn)算等指令的專用寄存器。RAXEAXAXAH,ALRBX保存數(shù)據(jù),可用作基址寄存器。RBXEBXBXBH,BLRCX保存數(shù)據(jù),計(jì)數(shù)值(用于循環(huán),串指令等),80386以上CPU也可用于訪問存儲器的偏移地址。RCXECXCXCH,CLRDX保存數(shù)據(jù),乘法、除法運(yùn)算指令的專用寄存器,80386以上CPU也可用于訪問存儲器的偏移地址。RDXEDXDXDH,DLRBP保存訪問存儲單元時的偏移地址。RBPEBPBP無RDI用于尋址串指令的目的操作數(shù)。RDIEDIDI無RSI用于尋址串指令的源的操作數(shù)。RSIESISI無通用寄存器功能中RAX,RBX,RCX和RDX可以作為64位,32位,16位和8位寄存器使用,微處理器訪問不同長度數(shù)據(jù)時,可以直接利用表中的命名。如利用MOV指令修改DX的值:MOVDX,0010h。指令給DX寄存器賦值0010h,指令執(zhí)行結(jié)果只會改變寄存器低16位,RDX的其他部分保持不變。又如EAX的值為6BC30E9FH,那么,AX=0E9FH(AH=0EH,AL=9FH)。64位中新增(非擴(kuò)展)寄存器R8~R15共8個64位寄存器。這些寄存器可以按照字節(jié)、字、雙字或者四字方式尋址。訪問位數(shù)控制字寄存器位置示例8B7~0MOVR8B,R9B16W15~0MOVR9W,AX32D31~0MOVR10D,EAX64無63~0MOVR11,RAX段寄存器80286以前的CPU有4個段寄存器,分別稱為代碼段寄存器CS(CodeSegment),數(shù)據(jù)段寄存器DS(DataSegment),堆棧段寄存器SS(StackSegment),附加數(shù)據(jù)段寄存器ES(ExtraSegment)。自80386CPU開始,增加了FS和GS兩個段寄存器。分段:基于邏輯分頁:基于管理實(shí)模式:段地址+段內(nèi)偏移保護(hù)模式:段選擇符這些段寄存器都是16位的,對于16位CPU段長度限制為216B=64KB,對于32位CPU段長度限制為232B=4GB,實(shí)模式和V86模式下它們的用法兼容16位CPU,即段寄存器保存20位段首址的高16位,段首址的低4位為0。在保護(hù)模式下,不直接存放段基址,而是存放一個索引,稱之為段選擇符(SegmentSelector)。由段選擇符從全局描述符表或局部描述符表中找到8個字節(jié)長的段描述符,從而確定關(guān)于這個段的全部描述信息。RPL(RequestorPrivilegeLevel):請求特權(quán)級,表示將要訪問的段的特權(quán)級。取值范圍為0~3。TI(TableIndicator):表指示符。為0時,從全局描述符表(GDT)中選擇描述符;為1時,從局部描述符表(LDT)中選擇描述符。Index:索引。指出要訪問描述符在段描述符表中的順序號,Index占13位。因此,順序號的范圍是0~8191。每個段描述符表(GDT或LDT)中最多有8192=213個描述符。DS=0023H=0000000000100011b,可知:Index=0000000000100b=4。TI=0,RPL=11b=3。因?yàn)門I=0,DS的段描述符在GDT中。Index×8=4×8=0020H,該描述符在GDT表中的位置是0020H~0027H,占8個字節(jié)。RPL=3,請求特權(quán)級為3。專用寄存器Intel8086~Core2專用型寄存器包括:指令指針寄存器、堆棧指針寄存器和標(biāo)志寄存器等。指令指針寄存器IP/EIP/RIP指令指針指向程序的下一條指令。當(dāng)微處理器為8086/8088,80286或者工作在實(shí)模式下時,這個寄存器取16位IP;80386以及更高型號的微處理工作于保護(hù)模式下時這個寄存器取32位EIP。在64位模式中,RIP包含40位地址總線。指令指針可以由轉(zhuǎn)移指令或者調(diào)用指令修改(間接)。堆棧指針寄存器SP/ESP/RSP堆棧指針,指向棧頂單元。這個寄存器作為16位寄存器時使用SP;作為32位寄存器時,使用ESP;64位使用RSP。標(biāo)志寄存器FLAGS/EFLAGS/RFLAGS用來指示微處理器狀態(tài)并控制它的操作。從8086開始直到Pentium微處理器向上兼容。8086/8088和80286使用16位FLAGS寄存器。80386以及更高微處理器使用32位EFLAGS寄存器。64位版本中的RFLAGS包含EFLAGS和FLAGS寄存器狀態(tài)位+控制位進(jìn)位標(biāo)志CF(CarryFlag)當(dāng)結(jié)果的最高位(字節(jié)操作時的第7位或字操作時的第15位)產(chǎn)生一個進(jìn)位或借位,CF=1,否則CF=0。在移位或循環(huán)移位指令中,會把操作數(shù)的最高位(左移時)或最低位(右移時)移入CF中。奇偶標(biāo)志PF(ParityFlag)Intel微處理器中采用奇校驗(yàn),當(dāng)執(zhí)行結(jié)果的低8位中二進(jìn)制1的個數(shù)為奇數(shù)時,PF為0,否則為1。不考慮其他位6DH+6DH=DAHDAH=11011010B,結(jié)果中有5個1,因此PF為0。輔助進(jìn)位標(biāo)志AF(AuxiliaryCarryFlag)在字節(jié)操作時若低半字節(jié)(一個字節(jié)的低4位)向高半字節(jié)有進(jìn)位或借位;在字操作時若低位字節(jié)向高位字節(jié)有進(jìn)位或借位,則AF=1,否則AF=0。這個標(biāo)志用于十進(jìn)制算術(shù)運(yùn)算指令中,即通過二進(jìn)制數(shù)運(yùn)算調(diào)整為十進(jìn)制數(shù)表示的結(jié)果。(BCD)零標(biāo)志ZF(ZeroFlag),當(dāng)運(yùn)算結(jié)果為零時,ZF為1;否則為0。符號標(biāo)志SF(SignFlag),它與運(yùn)算結(jié)果的最高位相同。對字節(jié)操作(8位運(yùn)算)來說,是結(jié)果的第7位;對字操作(16位運(yùn)算)來說,是結(jié)果的第15位。當(dāng)SF=0時,結(jié)果為正數(shù)或0;當(dāng)SF=1時,結(jié)果為負(fù)數(shù)。單步標(biāo)志TF(TrapEnableFlag),當(dāng)TF=1時,CPU進(jìn)入單步方式,在每條指令執(zhí)行以后產(chǎn)生一個內(nèi)部中斷(單步中斷)。當(dāng)TF=0時,CPU執(zhí)行指令后不產(chǎn)生單步中斷。中斷允許標(biāo)志IF(InterruptEnableFlag),當(dāng)IF=1時,允許CPU接收外部中斷請求,此時為“開中斷”狀態(tài)。當(dāng)IF=0時,屏蔽外部中斷請求,此時為“關(guān)中斷”狀態(tài)。方向標(biāo)志DF(DirectionFlag),在字符串操作指令中,當(dāng)DF=0時,串操作為自動增址;當(dāng)DF=1時,串操作為自動減址。STD指令置位DF,CLD指令清除DF。溢出標(biāo)志OF(OverflowFlag),帶符號數(shù)運(yùn)算時,當(dāng)其運(yùn)算結(jié)果超出了8位或16位帶符號數(shù)所能表達(dá)的范圍時,將產(chǎn)生溢出,置OF為1,否則OF清0。溢出OF與進(jìn)位CF是兩個不同性質(zhì)的標(biāo)志。IOPL(I/OPrivilegeLevel),表示I/O特權(quán)級,IOPL占2位,取值為0、1、2、3對應(yīng)四個特權(quán)級。只有特權(quán)級高于IOPL的程序才能夠執(zhí)行I/O指令,否則會產(chǎn)生異常,并將任務(wù)掛起。NT(NestTask),嵌套任務(wù)位,此位只用于保護(hù)模式,如果保護(hù)模式下當(dāng)前的任務(wù)嵌套在其他任務(wù)中,此位為1,否則為0。IRET指令會檢測NT的值。若NT=0,則執(zhí)行中斷的正常返回;若NT=1,則執(zhí)行任務(wù)切換操作。VM(Virtual8086Mode),V86模式位。VM=1時,表示當(dāng)前CPU正工作在V86模式下;VM=0,表示當(dāng)前CPU工作在實(shí)模式或保護(hù)模式下。VM位只能在保護(hù)方式中由IRET指令置位(如果當(dāng)前特權(quán)級為0)或在任意特權(quán)級上通過任務(wù)切換而置位。486以上新增標(biāo)志位:ID、VIP,VIF和ACAC(AlignmentCheck),地址對齊檢查位。尋址一個字或者雙字時,當(dāng)?shù)刂凡辉谧只蛘唠p字的邊界上,此時AC=1,否則AC=0。VIF(VirtualInterruptFlag),虛擬中斷標(biāo)志,與VIP一起使用,在虛擬方式下提供中斷允許標(biāo)志位IF的副本。VIP(VirtualInterruptPending),虛擬中斷掛起標(biāo)志,為Pentium~Pentium4處理器提供有關(guān)虛擬模式中斷的信息,它用于多任務(wù)環(huán)境下,為操作系統(tǒng)提供虛擬中斷標(biāo)志和中斷掛起信息。ID(Identification)微處理器標(biāo)識標(biāo)志,用來指示Pentium~Pentium4處理器,支持CPUID指令。CPUID指令是IntelIA-32架構(gòu)下獲得CPU信息的匯編指令,可以得到CPU類型、型號、制造商、商標(biāo)、序列號、緩存等一系列CPU相關(guān)的信息??刂萍拇嫫鰿R0~CR3(ControlRegister)。CR0的低5位是系統(tǒng)控制標(biāo)志,被稱為機(jī)器狀態(tài)字(MachineStatusWord,MSW)分頁機(jī)制中用到CR3、CR2和CR0。CRx3130~1211~543210CR0PG00000000000000000000000000ETTSEMMPPECR1保留未用CR2頁故障線性地址CR3頁目錄基址000000000000PE(ProtectionModeEnable):保護(hù)模式允許標(biāo)志。PE=0為實(shí)模式,CPU復(fù)位時自動進(jìn)入實(shí)模式;PE=1為保護(hù)模式??梢酝ㄟ^軟件設(shè)置PE進(jìn)入或退出保護(hù)模式。MP(MonitorCoprocessorExtension):運(yùn)算協(xié)處理器存在位,MP=1表示系統(tǒng)中有協(xié)處理器。EM(EmulateProcessorExtension):仿真位。設(shè)置該位可以使每條ESC指令引起7號中斷(ESCape指令用來對80387協(xié)處理器指令編碼)。EM=1時,可以利用7號中斷,用軟件來仿真協(xié)處理器的功能;EM=0時用硬件控制浮點(diǎn)指令。TS(TaskSwitched):任務(wù)切換標(biāo)志。TS=1時表明任務(wù)已經(jīng)切換,在保護(hù)模式下,TR的內(nèi)容改變將自動設(shè)置此位為1。ET(ExtensionType):協(xié)處理器選擇標(biāo)志,早期80386里面沒有80387協(xié)處理器,因此設(shè)置此位。當(dāng)處理器復(fù)位時,ET位被初始化以指示系統(tǒng)中數(shù)字協(xié)處理器的類型。如果系統(tǒng)中存在80387協(xié)處理器,那么ET位置1;如果系統(tǒng)中存在80287協(xié)處理器或者不存在協(xié)處理器,那么ET位清0。80386以后的系統(tǒng)中ET位被置為1表示系統(tǒng)中存在協(xié)處理器。PG(PagingEnable):分頁標(biāo)志。PG=1時,存儲器管理單元允許分頁,線性地址通過頁表轉(zhuǎn)換獲得物理地址。PG=0時,分頁功能被關(guān)閉,線性地址等于物理地址。當(dāng)PG=0時,CR2和CR3寄存器無效,PG=1時二者用于分頁管理機(jī)制。分頁-頁面每頁大小為4KB。CR3也被稱做頁目錄基址寄存器PDBR(PageDirectoryBaseRegister),它的高20位用于保存頁目錄表的起始物理地址的高20位。向CR3中裝入一個新值時,低12位必須為0,這是由于頁目錄是頁對齊的,所以僅高20位有效,低12位保留未用;從CR3中取值時,低12位被忽略。分頁-頁面CR2也被稱做頁面故障線性地址寄存器(PageFaultLinearAddressRegister),用于發(fā)生頁異常時報告出錯信息。如在訪問某個線性地址時,該地址的所在頁沒有在內(nèi)存中,則發(fā)生頁異常,處理器把引起頁異常的線性地址保存在CR2中。全局描述符表寄存器全局描述符表(GlobalDescriptorTable,GDT)是用來定義全局存儲器空間的一種機(jī)制,它用段描述符來描述一個全局存儲器中的段,每個GDT最多含有213=8192個描述符(8192×8=64KB)。全局描述符表可以存儲在內(nèi)存的任何位置,通過全局描述符表寄存器(GlobalDescriptorTableRegister,GDTR)給出它的位置和大小。LGDT指令可以將描述符表的起始位置裝入GDTR。GDTR是48位的寄存器。其最低16位是限長,給出GDT的字節(jié)大小(其值比GDT的長度少1),其高32位是基址,指出GDT在物理存儲器中存放的基地址。

47

1615

0GDTR基址限長已知GDTR=0E003F0003FFH,則全局描述符表的基址是多少?這個全局描述符表有多大,里面有多少個描述符?GDT的地址為0E003F00H長度為3FFH+1=400H。可容納400H/8=80H個段描述符。中斷描述符表寄存器中斷描述符表寄存器(InterruptDescriptorTableRegister,IDTR)也在存儲器中定義了一個表,該表稱為中斷描述符表IDT。IDT中保存的不是段描述符,而是中斷門描述符。每個門描述符也包含8字節(jié)IDT最多包含256個門描述符,因?yàn)镃PU最多支持256個中斷。中斷門指向的是中斷服務(wù)程序的入口。IDTR是48位的寄存器。其最低16位是限長,給出IDT的字節(jié)大?。ㄆ渲当菼DT的長度少1),其高32位是線性地址,經(jīng)過分頁部件轉(zhuǎn)換為物理地址,指出IDT在物理存儲器中存放的基地址。已知IDTR=0E003F40007FFH,則中斷描述符表的基址是多少?這個中斷描述符表有多大,里面有多少個描述符?IDT的地址為0E003F400H長度為7FFH+1=800H可容納800H/8=100H個描述符。保護(hù)模式下的中斷描述符表IDT的位置是可變的,實(shí)模式下的中斷向量表的地址是固定在物理地址00000H處。GDTR和IDTR的值必須在進(jìn)入保護(hù)模式之前裝入。在實(shí)模式下執(zhí)行LGDT和LIDT指令裝入GDTR和IDTR。局部描述符表寄存器保護(hù)模式提供了多任務(wù)的環(huán)境,為每個任務(wù)建一個局部描述符表(LocalDescriptorTable,LDT)。LDT只含有與系統(tǒng)中某一個任務(wù)相關(guān)的各個段的描述符??梢允姑恳蝗蝿?wù)的代碼段、數(shù)據(jù)段、堆棧段與系統(tǒng)其他部分隔離開。多任務(wù)環(huán)境下由于每項(xiàng)任務(wù)都有自己的LDT(且每項(xiàng)任務(wù)最多只能有一個LDT),因此保護(hù)模式下可以有多個LDT。局部描述符表寄存器LDTR并不直接指出LDT的位置和大小。LDTR的內(nèi)容是一個16位的選擇符,指向一個LDT描述符(GDT中)。LDT描述符指出LDT的位置和大小。在任務(wù)切換時,CPU從新任務(wù)的任務(wù)狀態(tài)段中裝入LDTR,從而使用新任務(wù)的局部存儲器空間。①和②步由GDTR確定了GDT表在存儲器中的位置和限長。LDTR中是一個選擇符,它包含了LDT描述符在GDT中的索引。③步是依據(jù)LDTR在GDT中取出LDT描述符的過程。在LDT描述符中,包含由LDT的位置和限長,即④和⑤步任務(wù)寄存器任務(wù)寄存器(TaskRegister,TR)在保護(hù)模式的任務(wù)切換機(jī)制中使用。TR是16位的選擇符,其內(nèi)容為索引值,它選中的是TSS描述符。TR的初值由軟件裝入,當(dāng)執(zhí)行任務(wù)切換指令時TR的內(nèi)容自動修改。在多任務(wù)環(huán)境下,每個任務(wù)都有屬于自己的任務(wù)狀態(tài)段(TaskStatusSegment,TSS),TSS中包含啟動任務(wù)所必需的信息。任務(wù)狀態(tài)段TSS在存儲器的基地址和限長(大小)由TSS描述符指出。TSS描述符放在全局描述符表GDT中,TR內(nèi)容為選擇符,它指出了TSS描述符在GDT中的順序號。假定全局描述符表的基址為00011000H,TR為2108H,問TSS描述符的起止范圍是多少?TSS起始地址=00011000H+2108H=00013108HTSS終止位置=00013108H+7H=0001310FH①和②步由GDTR確定了GDT表在存儲器中的位置和限長。TR是一個選擇符,這個選擇符中包含了TSS描述符在GDT中的索引。③步依據(jù)TR在GDT中取出TSS描述符。在第④和⑤步中,在TSS描述符中取得TSS的基址和限長。內(nèi)存管理實(shí)模式下分段管理20位地址總線,最大可尋址內(nèi)存空間應(yīng)為220=1MB,其物理地址范圍從00000H~FFFFFH。段的大小可以變化,16位CPU中最大的段為216=64KB。段的起始地址可以在任何16的倍數(shù)上,段寄存器中存放段基址除以16得到的商(也就是20位段基址的高16位)。段基址:偏移量10H×段基址+偏移量某內(nèi)存單元的地址用十六進(jìn)制數(shù)表示為1234:5678其物理地址為179B8H計(jì)算實(shí)模式下1000:1F00、11F0:0000、1080:1700的物理地址。1000:1F00=10H×1000+1F00=11F00H;11F0:0000=10H×11F0+0000=11F00H;1080:1700=10H×1080+1700=11F00H。保護(hù)模式下分段管理保護(hù)模式下,邏輯地址同樣由段基址:偏移量的格式形成,只不過,原來用來存儲段基址的段寄存器不再表示段的起始位置,而是用來表示段選擇符。該地址表示形式稱為虛擬地址,對應(yīng)的地址空間稱為虛擬地址空間。以CS:EIP為例,CS中存放了一個16位的段選擇符,EIP是32位偏移量。16位段選擇符加上32位偏移量,總共是48位,其中段選擇符的2位RPL與虛擬地址的轉(zhuǎn)換無關(guān),因此可以認(rèn)為虛擬地址是46位的,段選擇符的Index和TI占14位,偏移量為32位,虛擬地址空間為246B=64TB段描述符段描述符用于描述代碼段、數(shù)據(jù)段和堆棧段。段描述符位于GDT或LDT中,占8字節(jié)(64位),包括:段基址(32位)、限長(20位)、訪問權(quán)限(8位)和屬性(4位)。P(Present):存在位。P=1時表示該段己裝入內(nèi)存;P=0時表示該段沒有在內(nèi)存中,此時訪問該段會產(chǎn)生段異常。操作系統(tǒng)將某個段從物理內(nèi)存中交換到磁盤時,設(shè)置此位為0。DPL(DescriptorPrivilegeLevel):描述符特權(quán)級,說明該段的特權(quán)級,取值為0~3。S(System):描述符類型位,S=1時,這個段為代碼段、數(shù)據(jù)段或堆棧段;S=0時,為系統(tǒng)段描述符。E(Executable):可執(zhí)行位,用來區(qū)分代碼段和數(shù)據(jù)段。S=1且E=1時,這是一個代碼段,可執(zhí)行。S=1且E=0時,這是一個數(shù)據(jù)段或堆棧段,不可執(zhí)行。E=0時,后面的兩位為ED和W;若E=1時,后面的兩位為C和R。ED(ExpansionDirection):擴(kuò)展方向位(對數(shù)據(jù)段或堆棧段)。ED=0時,段向上擴(kuò)展(從低地址向高地址擴(kuò)展),偏移量小于等于限長。ED=1時,段向下擴(kuò)展(從高地址向低地址擴(kuò)展),偏移量必須大于限長。限長是指地址上限。一般情況下ED位為0。W(Writeable):寫允許位(對數(shù)據(jù)段或堆棧段)。W=0時,不允許對這個數(shù)據(jù)段寫入;W=1時,允許對這個數(shù)據(jù)段寫入。C(Conforming):一致位(對代碼段)。C=0時,這個段不是一致代碼段;C=1時,這個段是一致代碼段。一致代碼段就是操作系統(tǒng)拿出來被共享的代碼段,這些代碼段允許被低特權(quán)級的用戶直接調(diào)用訪問。此時特權(quán)級高的程序不允許訪問特權(quán)級低的代碼,即核心態(tài)不允許調(diào)用用戶態(tài)的代碼;特權(quán)級低的程序可以訪問到特權(quán)級高的代碼,但是特權(quán)級不會改變。除了一致代碼段外,其他的代碼段稱為非一致代碼段。非一致代碼段常用于那些為了避免低特權(quán)級的訪問而被操作系統(tǒng)保護(hù)起來的系統(tǒng)代碼。非一致代碼段只允許特權(quán)級相同的程序間訪問,絕對禁止不同級訪問,即核心態(tài)不使用用戶態(tài),用戶態(tài)也不使用核心態(tài)。R(Readable):讀允許位(對代碼段)。R=0時,不允許讀這個段的內(nèi)容;R=1時,允許讀這個段的內(nèi)容。對代碼段進(jìn)行寫操作總是被禁止的。A(Accessed):訪問位。A=1表示段己被訪問(使用)過;A=0表示段未被訪問過。操作系統(tǒng)利用這個位對段進(jìn)行使用統(tǒng)計(jì),可以將那些很長時間沒有被訪問過的段從內(nèi)存中調(diào)出,釋放其內(nèi)存給其他程序所使用。G(Granularity):粒度。G=1時,限長以頁為單位;G=0時,限長以字節(jié)為單位。D(DefaultOperationSize):默認(rèn)操作數(shù)寬度。D=1時,為32位數(shù)據(jù)操作段;D=0時,為16位數(shù)據(jù)操作段。限長位在描述符中一共占20位。G=1時,限長的內(nèi)容加上1后就是段所占的頁數(shù),1頁的大小為212=4KB;G=0時,段限長以字節(jié)為單位,限長的內(nèi)容+1就是段所占的字節(jié)數(shù)。G=1,限長位為FFFFFH時,段所占的頁數(shù)是FFFFFH+1=100000H,即220頁,段的大小為232=4GB,有效偏移量的范圍是00000000H~FFFFFFFFH。G=0,限長位為FFFFFH時,段的大小為220=1MB,有效偏移量的范圍是00000000H~000FFFFFH。設(shè)段基址為0CD310000H,段界限為001FFH。G位分別為0和為1時,求段的起始地址和段的結(jié)束地址。段的起始地址=段基址=0CD310000H(G=0)段的結(jié)束地址=段基址+段限長=0CD310000H+001FFH=0CD3101FFH(G=1)段的結(jié)束地址=段基址+段限長=0CD310000H+(001FFH+1)×4K?1=0CD50FFFFH段描述符的實(shí)際應(yīng)用各段寄存器及段描述符的值:CS=001BDS=0023ES=0023SS=0023FS=0030GS=0000GDTbase=E003F000Limit=03FFE003F0000000000000000000-FFFF0000009BCF00E003F010FFFF00000093CF00-FFFF000000FBCF00E003F020FFFF000000F3CF00-AB200020048B0080E003F030010000F0DF93C0FF-FF0F000000F34000E003F040FFFF000400F20000-0000000000000000選擇符

類型

段基址

結(jié)束地址 DPL0008 Code32 00000000 FFFFFFFF 0 P RE0010 Data32 00000000 FFFFFFFF 0 P RW001B Code32 00000000 FFFFFFFF 3 P RE0023 Data32 00000000 FFFFFFFF 3 P RW0028 TSS32 80042000 000020AB 0 P B0030 Data32 FFDFF000 00001FFF 0 P RW003B Data32 00000000 00000FFF 3 P RW0043 Data16 00000400 0000FFFF 3 P RW0048 Reserved 00000000 00000000 0 NP以CS=001BH為例,001BH=0000000000011011b,001BH是段選擇符,Index=0000000000011b=3H,TI=0,RPL=11b=3H。Index×8=3H×8=0018H,因此,在GDT表中的位置0018H處開始的8個字節(jié),存放的就是001BH選擇符對應(yīng)的段描述符。GDT表的基址為E003F000H,這個段描述符從E003F000H+0018H=0003F018H開始,取出這8個字節(jié)為:FFFF000000FBCF00。段基址(位31~24)=00H,段基址(位23~16)=00H,段基址(位15~8)=00H,段基址(位7~0)=00H,所以段基址(位31~0)=00000000H。限長(位19~16)=FH,限長(位15~8)=FFH,限長(位7~0)=FFH,所以限長(位19~0)=FFFFFH。G=1,限長是以頁為單位的,段的大小為(FFFFFH+1)×212=100000H×212=232=4GB。段的基址為00000000H,長度為4GB,其線性地址范圍為00000000H~FFFFFFFFH。D=1,因此這是一個32位的段。AVL=0。P=1,這個段在內(nèi)存中。DPL=112=316,段的特權(quán)級為3。S=1,這不是一個系統(tǒng)段,而是一個代碼、數(shù)據(jù)段或堆棧段。E=1,這是一個代碼段(可執(zhí)行)。C=0,非一致代碼段。因?yàn)镋=1,這一位是C;若E=0,這一位代表ED。R=1,可以對這個段進(jìn)行讀操作。因?yàn)镋=1,這一位是R;若E=0,這一位代表W。段描述符高速緩存如果每一次都需要到內(nèi)存中去讀取段描述符,那么CPU的運(yùn)行效率就會極大地降低。為解決這個問題,CPU在內(nèi)部設(shè)置了段描述符高速緩存。段描述符高速緩存總是與CS、DS、ES、SS、FS、GS段寄存器和描述符的當(dāng)前值保持一致,只有段寄存器的值發(fā)生改變時,才需要到GDT或LDT中裝入段描述符。這些緩存器是不可見的段式地址轉(zhuǎn)換根據(jù)虛擬地址中的段選擇符,在GDT或LDT中查找到對應(yīng)的段描述符,段描述符中包括這個段的段基址、限長和權(quán)限等信息。取出段的基址后,再加上偏移部分,就得到了線性地址。頁式內(nèi)存管理每一個任務(wù)都有它自己的一個線性地址空間,由于線性地址是32位的,所以線性地址空間為232=4GB。分段管理時,段的長度不固定,段和段之間也允許重疊;而頁面的劃分則嚴(yán)格得多。所有頁的長度固定,頁與頁之間也沒有重疊。頁面大小為4KB,則32位CPU將4GB的線性地址空間劃分成220頁。分頁機(jī)制就是一種將線性地址的頁面映射到物理地址頁面的手段,也就是從線性地址到物理地址的轉(zhuǎn)換過程。分頁機(jī)制中用到了兩個表:頁目錄表和頁表。32位線性地址被劃分為3個部分:頁目錄索引(10位),頁表索引(10位),頁面字節(jié)索引(12位),其中第1項(xiàng)是對頁目錄(PageDirectory)的索引,第2項(xiàng)是對頁表(PageTables)的索引,第3項(xiàng)是線性地址在頁面(PageFrame)內(nèi)的偏移。①:頁目錄的地址由CR3的最高20位決定,CR3又被稱做頁目錄基址寄存器PDBR(PageDirectoryBaseRegister),CR3的低12位=000H。頁目錄的大小為4KB,由1024個頁表描述符組成,每個頁表描述符占4個字節(jié)。②:線性地址中高10位為頁目錄索引,頁目錄基地址加上頁目錄索引乘以4獲得的地址指向頁目錄表中一個頁表描述符。③:頁表描述符的高20位給出了頁表的基地址。頁表同樣占4KB,由1024個頁描述符組成,每個頁描述符占4字節(jié)。④:線性地址中的頁表索引(10位),指示了被訪問的頁在頁表中的序號。根據(jù)頁表基地址加上10位頁表索引乘以4指向頁表中的一個頁描述符。⑤:頁描述符的高20位給出了物理頁面的基地址的高位20位。⑥:物理頁面的基地址再加上線性地址中12位字節(jié)的頁內(nèi)偏移量,得到物理地址。片內(nèi)轉(zhuǎn)換檢測緩沖器(32個頁描述符)頁表項(xiàng)頁目錄表、頁表和頁面的基地址的低12位全部為0,定位在頁的邊界上。頁表項(xiàng)的低12位提供保護(hù)功能和統(tǒng)計(jì)信息。U/S位、R/W位、P位實(shí)現(xiàn)頁保護(hù)機(jī)制;D位和A位提供統(tǒng)計(jì)信息。U/S(User/Supervisor):用戶/管理員位。U/S=0時,只有操作系統(tǒng)程序可以訪問該頁,不允許用戶程序訪問,這可以保護(hù)操作系統(tǒng)使用的頁面不被用戶程序破壞(讀寫);U/S=1時,允許用戶程序訪問該頁。R/W(Read/Write):讀寫位。R/W=0,用戶程序?qū)撁嬷挥凶x權(quán)限,不能寫入;R/W=1時,可讀/寫。不論R/W位設(shè)置如何,操作系統(tǒng)的程序都可以對頁面進(jìn)行讀寫。P(Present):存在位。P=1,頁表或頁存在于物理內(nèi)存中;P=0,頁表或頁不在物理內(nèi)存中。如果內(nèi)存不足時,操作系統(tǒng)會選擇那些使用頻率低的頁面,設(shè)置它們的P位為0,將這些物理頁面釋放出來供其他程序使用。產(chǎn)生缺頁異常時,程序中使用的32位線性地址被保存在CR2中。A(Accessed):訪問標(biāo)志。如果對某頁表或頁訪問過,CPU設(shè)置頁表項(xiàng)中的A位為1。操作系統(tǒng)定期掃描該項(xiàng),統(tǒng)計(jì)使用次數(shù)。當(dāng)需要調(diào)出(釋放)頁面時,操作系統(tǒng)一般選擇那些最少使用的或長期不用的頁。D(Dirty):寫入位。D=1時表示對該頁進(jìn)行過寫操作,D=0時表示對該頁還沒有進(jìn)行過寫操作。D位只用于頁描述符,它是寫入標(biāo)志。當(dāng)需要釋放某個物理頁面時,若其D=0表示磁盤中交換頁面的內(nèi)容和物理頁面的內(nèi)容一致,不需要向磁盤重寫;若D=1則需要將這個頁面寫到磁盤頁表項(xiàng)權(quán)限用戶程序系統(tǒng)程序用

途U/S=0,R/W=0不可讀寫可讀寫系統(tǒng)頁面U/S=0,R/W=1不可讀寫可讀寫系統(tǒng)頁面U/S=1,R/W=0只能讀可讀寫代碼頁面U/S=1,R/W=1可讀寫可讀寫數(shù)據(jù)/堆棧頁面一個物理頁存在兩級保護(hù)屬性,一個是頁表描述符中的保護(hù)屬性,另一個是頁描述符中的保護(hù)屬性。在兩級保護(hù)屬性不一致的情況下,CPU從二者中取一個較嚴(yán)格的保護(hù)權(quán)限。例如,頁表描述符的屬性R/W=0(只讀),頁描述符的屬性R/W=1(可讀寫),則最后結(jié)果是R/W=0(只讀)。線性地址轉(zhuǎn)換為物理地址的過程02032070H轉(zhuǎn)換為物理地址地方虛擬地址(16位段選擇符:32位偏移量)分段部件線性地址(32位)=段基址+偏移量分頁部件物理地址=頁的基地址+偏移量物理地址=線性地址允許分頁?允許禁止任務(wù)在保護(hù)模式下每個任務(wù)是獨(dú)立的,CPU提供了實(shí)現(xiàn)任務(wù)間快速切換的高效機(jī)制。在任何時刻都有一個當(dāng)前任務(wù),由TR寄存器指定,CPU在這個任務(wù)的環(huán)境下執(zhí)行。當(dāng)運(yùn)行一個應(yīng)用程序后,操作系統(tǒng)就為這個程序創(chuàng)建一個任務(wù)。每個任務(wù)都由兩個部分組成:任務(wù)執(zhí)行環(huán)境(TaskExecutationSpace)和任務(wù)狀態(tài)段TSS(TaskStateSegment)。任務(wù)執(zhí)行環(huán)境任務(wù)執(zhí)行環(huán)境包括一個代碼段、堆棧段和數(shù)據(jù)段等,任務(wù)在每一個特權(quán)級上執(zhí)行時都有一個堆棧段。每個任務(wù)都有一個LDT描述符表,構(gòu)成一個局部地址空間,局部空間的數(shù)據(jù)和代碼不能被其他任務(wù)訪問。任務(wù)狀態(tài)段任務(wù)狀態(tài)段TSS(TaskStateSegment)中保存了任務(wù)的各種狀態(tài)信息。它在任務(wù)切換過程中起著重要作用,通過它可以實(shí)現(xiàn)任務(wù)的掛起和恢復(fù)。在任務(wù)切換過程中,首先CPU中各寄存器的當(dāng)前值被自動保存到TR所指定的TSS(當(dāng)前任務(wù)狀態(tài)段)中;然后下一任務(wù)的TSS的選擇符被裝入TR;最后從TR所指定的TSS中取出各寄存器的值送到處理器的各寄存器中。任務(wù)狀態(tài)段在主存中的位置、大小和屬性等信息由任務(wù)狀態(tài)段描述符(即TSS描述符)來描述。TSS描述符屬于系統(tǒng)描述符,S位等于0,它必須放在GDT表中,而不能放在LDT或IDT中。在任務(wù)切換或執(zhí)行LTR指令時,會將新的任務(wù)狀態(tài)段選擇符裝載到TR寄存器。TSS的基本格式由104字節(jié)(000H~067H)組成。這104字節(jié)的基本格式是不可改變的,在此之外系統(tǒng)軟件還可在TSS段中定義若干附加信息?;镜?04字節(jié)可分為寄存器保存區(qū)域、內(nèi)層堆棧指針區(qū)域、地址映射寄存器區(qū)域、域鏈接字段區(qū)域、I/O許可位圖等。LDTR和CR3的值與特定任務(wù)相關(guān),隨著任務(wù)的切換,LDTR和CR3的值也要切換。TSS中保存了該任務(wù)的CR3和LDTR。鏈接字段位于在TSS偏移0開始的雙字中,其高16位未用,而低16位保存前一任務(wù)的TSS的選擇符。如果當(dāng)前的任務(wù)由段間調(diào)用指令CALL、中斷/異常而激活,那么當(dāng)前任務(wù)TSS中的鏈接字段保存被掛起任務(wù)的TSS的選擇符,并且標(biāo)志寄存器EFLAGS中的NT位被置為1,表示嵌套。I/O許可位圖區(qū)域是為了實(shí)現(xiàn)輸入/輸出的保護(hù)。I/O許可位圖作為TSS的擴(kuò)展部分,TSS內(nèi)偏移66H處的字用于存放I/O許可位圖在TSS內(nèi)的偏移(從TSS的頭開始計(jì)算)。門4種:調(diào)用門、任務(wù)門、中斷門、陷阱門調(diào)用門用于控制傳送,來改變?nèi)蝿?wù)或者程序的特權(quán)級別;任務(wù)門像個開關(guān)一樣,用來執(zhí)行任務(wù)切換;中斷門和陷阱門用來指出中斷服務(wù)程序的入口地址。門描述符屬于系統(tǒng)描述符門描述符

7

0+0偏移(位7~0)+1偏移(位15~8)+2段選擇符(位7~0)+3段選擇符(位15~8)+4000參數(shù)計(jì)數(shù)值(5位)+5PDPLS=0TYPE(4位)+6偏移(位23~16)+7偏移(位31~24)系統(tǒng)描述符中設(shè)置了一個類型(TYPE)字段,4位可表示16種類型TYPE含義TYPE含義0非法8非法180286可用任務(wù)狀態(tài)段(AvailableTSS)980386可用任務(wù)狀態(tài)段(AvailableTSS)2局部描述符表(LDT)A保留380286忙任務(wù)狀態(tài)段(BusyTSS)B80386忙任務(wù)狀態(tài)段(BusyTSS)480286調(diào)用門(CallGate)C80386調(diào)用門(CallGate)5任務(wù)門(TaskGate)D保留680286中斷門(InterruptGate)E80386中斷門(InterruptGate)780286陷阱門(TrapGate)F80386陷阱門(TrapGate)調(diào)用門調(diào)用門可以實(shí)現(xiàn)當(dāng)前任務(wù)從低特權(quán)級到更高特權(quán)級的間接控制轉(zhuǎn)移,它在更高級特權(quán)級的段中定義了一個入口點(diǎn),該入口點(diǎn)的虛擬地址(目標(biāo)選擇符和偏移量)包含在調(diào)用門中。調(diào)用門可以駐留在GDT中,也可以駐留

溫馨提示

  • 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

提交評論