32位x86处理器架构
本節(jié)重點(diǎn)講解了 32 位 x86 處理器的基本架構(gòu)特點(diǎn)。這些處理器包括了 Intel IA-32 系列中的成員和所有 32 位 AMD 處理器。
?
操作模式
x86 處理器有三個(gè)主要的操作模式:保護(hù)模式、實(shí)地址模式和系統(tǒng)管理模式;以及一個(gè)子模式:虛擬 8086 (virtual-8086) 模式,這是保護(hù)模式的特殊情況。以下是對(duì)這些模式的簡介:
1) 保護(hù)模式 (Protected Mode)
保護(hù)模式是處理器的原生狀態(tài),在這種模式下,所有的指令和特性都是可用的。分配給程序的獨(dú)立內(nèi)存區(qū)域被稱為段,而處理器會(huì)阻止程序使用自身段范圍之外的內(nèi)存。
2) 虛擬 8086 模式 (Virtual-8086 Mode)
保護(hù)模式下,處理器可以在一個(gè)安全環(huán)境中,直接執(zhí)行實(shí)地址模式軟件,如 MS-DOS 程序。換句話說,如果一個(gè)程序崩潰了或是試圖向系統(tǒng)內(nèi)存區(qū)域?qū)憯?shù)據(jù),都不會(huì)影響到同一時(shí)間內(nèi)執(zhí)行的其他程序。現(xiàn)代操作系統(tǒng)可以同時(shí)執(zhí)行多個(gè)獨(dú)立的虛擬 8086 會(huì)話。
3) 實(shí)地址模式 (Real-Address Mode)
實(shí)地址模式實(shí)現(xiàn)的是早期 Intel 處理器的編程環(huán)境,但是增加了一些其他的特性,如切換到其他模式的功能。當(dāng)程序需要直接訪問系統(tǒng)內(nèi)存和硬件設(shè)備時(shí),這種模式就很有用。
4) 系統(tǒng)管理模式 (System Management Mode)
系統(tǒng)管理模式 (SMM) 向操作系統(tǒng)提供了實(shí)現(xiàn)諸如電源管理和系統(tǒng)安全等功能的機(jī)制。這些功能通常是由計(jì)算機(jī)制造商實(shí)現(xiàn)的,他們?yōu)榱艘粋€(gè)特定的系統(tǒng)設(shè)置而定制處理器。
基本執(zhí)行環(huán)境
1) 地址空間
在 32 位保護(hù)模式下,一個(gè)任務(wù)或程序最大可以尋址 4GB 的線性地址空間。從 P6 處理器開始,一種被稱為擴(kuò)展物理尋址 (extended physical addressing) 的技術(shù)使得可以被尋址的物理內(nèi)存空間增加到 64GB。
與之相反,實(shí)地址模式程序只能尋址 1MB 空間。如果處理器在保護(hù)模式下運(yùn)行多個(gè)虛擬 8086 程序,則每個(gè)程序只能擁有自己的 1MB 內(nèi)存空間。
2) 基本程序執(zhí)行寄存器
寄存器是直接位于 CPU 內(nèi)的高速存儲(chǔ)位置,其設(shè)計(jì)訪問速度遠(yuǎn)高于傳統(tǒng)存儲(chǔ)器。例如,當(dāng)一個(gè)循環(huán)處理為了速度進(jìn)行優(yōu)化時(shí),其循環(huán)計(jì)數(shù)會(huì)保留在寄存器中而不是變量中。
下圖展示的是基本程序執(zhí)行寄存器(basic program execution registers)。8 個(gè)通用寄存器,6 個(gè)段寄存器,一個(gè)處理器狀態(tài)標(biāo)志寄存器(EFLAGS),和一 個(gè)指令指針寄存器(EIP)。
通用寄存器
通用寄存器主要用于算術(shù)運(yùn)算和數(shù)據(jù)傳輸。如下圖所示,EAX 寄存器的低 16 位在使用時(shí)可以用 AX 表示。
一些寄存器的組成部分可以處理 8 位的值。例如,AX 寄存器的高 8 位被稱為 AH,而低 8 位被稱為 AL。同樣的重疊關(guān)系也存在于 EAX、EBX、ECX 和 EDX 寄存器中:
| EAX | AX | AH | AL |
| EBX | BX | BH | BL |
| ECX | CX | CH | CL |
| EDX | DX | DH | DL |
其他通用寄存器只能用 32 位或 16 位名稱來訪問,如下表所示:
| ESI | SI | EBP | BP |
| EDI | DI | ESP | SP |
特殊用法
某些通用寄存器有特殊用法:
- 乘除指令默認(rèn)使用EAX。它常常被稱為擴(kuò)展累加器(extended accumulator)寄存器。
- CPU 默認(rèn)使用 ECX 為循環(huán)計(jì)數(shù)器。
- ESP 用于尋址堆棧(一種系統(tǒng)內(nèi)存結(jié)構(gòu))數(shù)據(jù)。它極少用于一般算術(shù)運(yùn)算和數(shù)據(jù)傳輸,通常被稱為擴(kuò)展堆棧指針(extended stack pointer)寄存器。
- ESI 和 EDI 用于高速存儲(chǔ)器傳輸指令,有時(shí)也被稱為擴(kuò)展源變址(extended source index)寄存器和擴(kuò)展目的變址(extended destination index)寄存器。
- 高級(jí)語言通過 EBP 來引用堆棧中的函數(shù)參數(shù)和局部變量。除了高級(jí)編程,它不用于一般算術(shù)運(yùn)算和數(shù)據(jù)傳輸。它常常被稱為擴(kuò)展幀指針(extended frame pointer)寄存器。
段寄存器
實(shí)地址模式中,16 位段寄存器表示的是預(yù)先分配的內(nèi)存區(qū)域的基址,這個(gè)內(nèi)存區(qū)域稱為段。保護(hù)模式中,段寄存器中存放的是段描述符表指針。一些段中存放程序指令(代碼),其他段存放變量(數(shù)據(jù)),還有一個(gè)堆棧段存放的是局部函數(shù)變量和函數(shù)參數(shù)。
指令指針
指令指針(EIP)寄存器中包含下一條將要執(zhí)行指令的地址。某些機(jī)器指令能控制 EIP,使得程序分支轉(zhuǎn)向到一個(gè)新位置。
EFLAGS 寄存器
EFLAGS (或 Flags)寄存器包含了獨(dú)立的二進(jìn)制位,用于控制 CPU 的操作,或是反映一些 CPU 操作的結(jié)果。有些指令可以測(cè)試和控制這些單獨(dú)的處理器標(biāo)志位。
設(shè)置標(biāo)志位時(shí),該標(biāo)識(shí)位 =1;清除(或重置)標(biāo)識(shí)位時(shí),該標(biāo)志位 =0。
控制標(biāo)志位
控制標(biāo)志位控制 CPU 的操作。例如,它們能使得 CPU 每執(zhí)行一條指令后進(jìn)入中斷;在偵測(cè)到算術(shù)運(yùn)算溢出時(shí)中斷執(zhí)行;進(jìn)入虛擬 8086 模式,以及進(jìn)入保護(hù)模式。
程序能夠通過設(shè)置 EFLAGS 寄存器中的單獨(dú)位來控制 CPU 的操作,比如,方向標(biāo)志位和中斷標(biāo)志位。
狀態(tài)標(biāo)志位
狀態(tài)標(biāo)志位反映了 CPU 執(zhí)行的算術(shù)和邏輯操作的結(jié)果。其中包括:溢出位、符號(hào)位、零標(biāo)志位、輔助進(jìn)位標(biāo)志位、奇偶校驗(yàn)位和進(jìn)位標(biāo)志位。下述說明中,標(biāo)志位的縮寫緊跟在標(biāo)志位名稱之后:
- 進(jìn)位標(biāo)志位(CF),與目標(biāo)位置相比,無符號(hào)算術(shù)運(yùn)算結(jié)果太大時(shí),設(shè)置該標(biāo)志位。
- 溢出標(biāo)志位(OF),與目標(biāo)位置相比,有符號(hào)算術(shù)運(yùn)算結(jié)果太大或太小時(shí),設(shè)置該標(biāo)志位。
- 符號(hào)標(biāo)志位(SF),算術(shù)或邏輯操作產(chǎn)生負(fù)結(jié)果時(shí),設(shè)置該標(biāo)志位。
- 零標(biāo)志位(ZF),算術(shù)或邏輯操作產(chǎn)生的結(jié)果為零時(shí),設(shè)置該標(biāo)志位。
- 輔助進(jìn)位標(biāo)志位(AC),算術(shù)操作在 8 位操作數(shù)中產(chǎn)生了位 3 向位 4 的進(jìn)位時(shí),設(shè)置該標(biāo)志位。
- 奇偶校驗(yàn)標(biāo)志位(PF),結(jié)果的最低有效字節(jié)包含偶數(shù)個(gè) 1 時(shí),設(shè)置該標(biāo)志位,否則,清除該標(biāo)志位。一般情況下,如果數(shù)據(jù)有可能被修改或損壞時(shí),該標(biāo)志位用于進(jìn)行 錯(cuò)誤檢測(cè)。
3) MMX 寄存器
在實(shí)現(xiàn)高級(jí)多媒體和通信應(yīng)用時(shí),MMX 技術(shù)提高了 Intel 處理器的性能。8 個(gè) 64 位 MMX 寄存器支持稱為 SIMD(單指令,多數(shù)據(jù),Single-Instruction,Multiple-Data)的特殊指令。
顧名思義,MMX 指令對(duì) MMX 寄存器中的數(shù)據(jù)值進(jìn)行并行操作。雖然,它們看上去是獨(dú)立的寄存器,但是 MMX 寄存器名實(shí)際上是浮點(diǎn)單元中使用的同樣寄存器的別名。
4) XMM 寄存器
x86 結(jié)構(gòu)還包括了 8 個(gè) 128 位 XMM 寄存器,它們被用于 SIMD 流擴(kuò)展指令集。
浮點(diǎn)單元
浮點(diǎn)單元(FPU, floating-point unit)執(zhí)行高速浮點(diǎn)算術(shù)運(yùn)算。之前為了這個(gè)目的,需要一個(gè)獨(dú)立的協(xié)處理器芯片。從 Intel486 處理器開始,FPU 已經(jīng)集成到主處理器芯片上。
FPU 中有 8 個(gè)浮點(diǎn)數(shù)據(jù)寄存器,分別命名為 ST(0),ST(1),ST(2),ST(3),ST(4), ST(5), ST (6)和 ST(7)。其他控制寄存器和指針寄存器如下圖所示。
x86 內(nèi)存管理
x86 處理器按照前面討論的基本操作模式來管理內(nèi)存。保護(hù)模式是最可靠、最強(qiáng)大的,但是它對(duì)應(yīng)用程序直接訪問系統(tǒng)硬件有著嚴(yán)格的限制。
在實(shí)地址模式中,只能尋址 1MB 內(nèi)存,地址從 00000H 到 FFFFFH。處理器一次只能運(yùn)行一個(gè)程序,但是可以暫時(shí)中斷程序來處理來自外圍設(shè)備的請(qǐng)求(稱為中斷(interrupt))。
應(yīng)用程序被允許訪問內(nèi)存的任何位置,包括那些直接與系統(tǒng)硬件相關(guān)的地址。MS-DOS 操作系統(tǒng)在實(shí)地址模式下運(yùn)行,Windows 95 和 98 能夠引導(dǎo)進(jìn)入這種模式。
在保護(hù)模式中,處理器可以同時(shí)運(yùn)行多個(gè)程序,它為每個(gè)進(jìn)程(運(yùn)行中的程序)分配總共 4GB 的內(nèi)存。每個(gè)程序都分配有自己的保留內(nèi)存區(qū)域,程序之間禁止意外訪問其他程序的代碼和數(shù)據(jù)。MS-Windows 和 Linux 運(yùn)行在保護(hù)模式下。
在虛擬 8086 模式中,計(jì)算機(jī)運(yùn)行在保護(hù)模式下,通過創(chuàng)建一個(gè)帶有 1MB 地址空間的虛擬 8086 機(jī)器來模擬運(yùn)行于實(shí)地址模式的 80×86 計(jì)算機(jī)。例如,在 Windows NT 和 2000 下,當(dāng)打開一個(gè)命令窗口時(shí),就創(chuàng)建了一個(gè)虛擬 8086 機(jī)器。同一時(shí)間可以運(yùn)行多個(gè)這樣的窗口,并且窗口之間都是受到保護(hù)的。
在 Windows NT,2000 和 XP 系統(tǒng)中,某些需要直接使用計(jì)算機(jī)硬件的 MS-DOS 程序不能運(yùn)行在虛擬 8086 模式下。
下一篇:1.11?字符在計(jì)算機(jī)中是如何表示的
1.12?匯編語言布爾表達(dá)式
處理器架構(gòu)
2.1?CPU處理器架構(gòu)
2.2?32位x86處理器架構(gòu)
2.3?x86-64處理器架構(gòu)
2.4?x86計(jì)算機(jī)組件
匯編語言基礎(chǔ)
3.1?第一個(gè)匯編語言程序
3.2?匯編語言常量
3.3?匯編語言保留字
3.4?匯編語言標(biāo)識(shí)符
3.5?匯編語言偽指令
總結(jié)
以上是生活随笔為你收集整理的32位x86处理器架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 64位x86-64处理器架构
- 下一篇: c语言 画函数,c语言绘制函数曲线