x86(32位)-1-32位x86 處理器編程架構
Intel 32 位處理器架構簡稱IA-32(Intel Architecture,32-bit)
x86是指intel的86系列的CPU統稱,比如說8086就是x86里面中的一款CPU。
IA-32,X86-32是指intel的32位CPU架構。
x86系列的處理器架構是從8086發展來的,是基於8086 的,具有延續性和兼容性。所以x86系列的CPU都可以和8086CPU進行類比。
1.1 基本執行環境:
1.1.1 地址空間:
32 位的處理器有32根地址線,數據線的數量是32 根或者64根。因此,它可以訪問2的32次方(4GB)的內存地址空間,每次可以讀寫連續的4 字節或 者8 字節,這稱為雙字(Double Word)或者4 字(Quad Word)訪問。
1.1.2 寄存器:
32位x86 CPU總共包含了8個通用寄存器,6個16位段寄存器,一個狀態處理器EFLAGS和一個指令指針寄存器。
1.1.2.1 通用寄存器
在16位CPU內,有8個通用寄存器AX、BX、CX、DX、SI、DI、 BP 和SP,其中,前4個還可以拆分成兩個獨立的8 位寄存器來用,即 AH、AL、BH、BL、CH、CL、DH 和DL。32 位處理器 在16位處理器的基礎上,擴展了這8 個通用寄存器的長度,使之達到32位。
其中這個32位相對於16位擴展的寄存器就在16位寄存器的名字上加了一個E,這個E就是Extend中文擴展的意思。
32 位通用寄存器的高16 位是不可獨立使用的,但低16 位保持同16 位處理器的兼容性。在任何時候它們都可以像在16位CPU里一樣使用。
32位CPU是兼容16位CPU的,所以照樣可以在32 位處理器上運行16 位處理器上的軟件。
1.1.2.2 指令指針寄存器
為了生成32 位物理地址,32 位處理器將IP寄存器擴展到了32 位,即EIP。當CPU工作在16位模式下時,依然使用16 位的IP;在32 位模式下時,使用的是全部的32 位EIP。
1.1.2.3 標志寄存器
在16 位處理器中,標志寄存器FLAGS 是16 位的,在32 位處理器中,擴展到了32位,低16 位和原先保持一致。
1.1.2.4 段寄存器(Segment Register)
在32 位模式下,傳統的段寄存器,如CS、SS、 DS、ES,保存的不再是16位段基地址,而是段的選擇子,用於選擇所要訪問的段,因此,實際上它的名字叫做段選擇器。
除了段選擇子之外,每個段寄存器還包括一個不可見部分,稱為描述符高速緩存器,里面有段的基地址、段的范圍和段的訪問限制。這部分內容程序不可訪問,由處理器自動使用。
除了CS SS DE ES以外32 位處理器還增加了兩個額外的段寄存器FS 和GS。
1.2 基本工作模式:
1.2.1 實模式(real mode)
8086CPU只有一種工作模式,即實模式,也就是說我們前面學習8086CPU都是在實模式下進行學習的。當然,這個名稱是后來才提出來的。實模式等同於8086模式,實模式和16位保護模式通常統稱16位模式。
1.2.2 保護模式(protect mode)
1.2.2.1 保護模式的歷史
1982年的時候,Intel公司推出了80286處理器。80286第一次提出了保護模式的概念。
1985 年的80386 處理器是Intel 公司的第一款32 位產品,而且獲得了極大成功,是后續所有32 位產品的基礎。
1.2.2.2 保護模式概述:
保護模式是x86CPU最主要的工作模式,是利用了完全體x86CPU的工作模式,在保護模式下,段寄存器中保存的不再是段地址,而是段選擇子,真正的段地址以及有關段的信息都位於段寄存器的描述符高速緩存中。
在保護模式下,所有的32 位處理器都可以訪問多達4GB的內存,它們可以工作在分段模型下,每個段的基地址是32 位的,段內偏移量也是 32 位的,因此,段的長度不受限制不像保護模式由於cs:ip的原因,一個段只有0000~FFFF的空間。
1.2.3 V86模式
virtual 86模式,字面意思就是虛擬8086模式。
在這種模式下,IA-32 處理器被模擬成多個8086 處理器並行工作。
V86 模式是保護模式的一種,可以在保護模式下執行多個8086 程序。傳統上,要執行8086 程序,處理器必須工作在實模式下。在這種情況下,為 32 位保護模式寫的程序就不能運行。但是,V86 模式提供了讓它們在一 起同時運行的條件。
V86模式曾經很有用,因為在那個時候,8086 程序很多,而32位應用程序很少,這個過渡期是必需的。現在,這種工作模式已經基本無用了。
1.3 x86啟動流程
在剛加電時,這些處理器都自動處於實模式下,此時,它相當於一個非常快速的8086 處理器。只有在進行一番設置之后,才能運行在保護模式下。
x86可以類比8086的啟動流程只不過是把8086的實模式作為一種過度然后再進行一番設置最后進入到x86的完全體模式-保護模式。也就是我們現在常用的32位計算機的運行環境下的CPU模式。
8086-1-計算機的啟動過程 - Sna1lGo - 博客園 (cnblogs.com)
1.4 地址:
在x86中一共有三種地址形式,邏輯地址,線性地址和物理地址。
1.4.1 物理地址:
物理地址就是內存上的內存地址。也可以叫其為真實地址。
1.4.2 邏輯地址:
傳統上,段地址和偏移地址組成成的地址稱為邏輯地址。
比如: cs:ip就是一個邏輯地址。
1.4.3 線性地址:
線性地址是指一段連續的內存空間的地址。在x86中可分為虛擬內存線性地址,和物理內存線性地址。因為將一整個內存從頭往下看看着像是一條平整的直線,所以叫線性地址。
1.4.4 地址的轉換:
在頁式管理中線性地址通常是指虛擬內存線性地址,物理地址指真實內存線性地址。
邏輯地址是由段式管理而來的,由CPU的段部件進行處理,而線性地址是用來描述任務的虛擬地址空間是由頁式管理而來的,由CPU的頁部件進行處理。
他們的轉換關系如下:
當頁式內存管理沒有開啟時產生的就是物理地址,當頁式管理開啟后產生的就是物理內存線性地址。