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