1/01/2011

IA-32

書上一直提到IA32架構 , 心裡一直很納悶IA32是什麼東西...

去網卡search一下 , 發現有篇文早說的還不錯 , 也提到Protected mode(保護模式) 和 Real-Address mode (真實模式) , 特別轉來紀錄一下



通常我們看CPU組成是分層次的,主要有三層:數字邏輯層(Digital Logic Level)、微內核層(Microarchitecture level)、ISA層(Instruction set Architectrue level)。ISA層裡的各種組成元素就是一個彙編語言程序的執行環境。

時下比較出名的ISA層的名字有:IA-32,x64,IA-64,SUN的SPARC,IBM的POWER等,這層是軟件和硬件交互的標準,或者說一個接口。微內核層是CPU廠商用來實現特定ISA層的方法。這層比較見CPU廠商的功力,不同的實現方式會帶來不同的性能。但它對軟件是透明的。所以,不管微內核層怎麼重新設計,只要ISA層兼容,都能保持軟件的兼容性。比較出名的微內核層的名字有:Intel Pentium 4系列CPU的「Intel NetBurst Microarchitecture」和Intel最新Core系列CPU的「Intel Core Microarchitecture」

IA-32 CPU的ISA層主要由如下組成:
    * CPU操作模式(mode of operation)
    * 內存地址空間(address space)
    * 基本的程序執行寄存器
    * 協處理器寄存器
    * MMX指令寄存器
    * 棧(stack)

以上為基本元素,為普通程序使用,以下為系統級程序使用的比如操作系統:
    * I/O端口
    * 控制寄存器,也就是決定CPU操作模式的寄存器
    * 內存管理寄存器
    * Debug寄存器
    * 內存區域類型寄存器
等等。

IA-32是所謂的CISC(複雜指令集計算機,complicated instruction set computer)架構的ISA。相對於RISC(精簡指令集計算機,reduced instruction set computer,例如SUN的SPARC和IBM的POWER)來說,他的指令系統複雜而多。處理器的結構因而複雜,再加上為了兼容而提出的所謂操作模式,內存管理模式等等的概念使得對它的編程工作非常困難。所以掌握了對它的彙編程序的開發,別的系統,你會覺得非常輕鬆。

提到IA-32,不得不提它的工作模式的概念。這個概念,初學者容易犯暈。IA-32有四個工作模式,其中兩個要知道:保護模式(protectd mode)和實模式(real-address mode)。

計算機為每個Byte的內存空間都定了一個地址。CPU的工作需要尋址,就是尋指令的相關參數的地址。而後到這個地址,把它們抓進CPU,配合指令來執行。16位CPU 8088實際20位地址線,可以尋址1M,可是寄存器是16位的。也就是說一個寄存器不足以確定一個物理地址。Intel提出了段(segment)的概念。把一個尋址過程分兩步。或者說人為的把物理地址分成段。即:先指定一個段地址,而後指定在這個段裡的偏移地址(offset)。此為段的第一個意義。這個意義下,段可以理解「為一個20位物理地址的前幾位」。隨著Intel CPU真的實現了32位,段的這個意義或者作用。不過為了兼容以前的程序,Intel提出了模式的概念,那就是為了兼容以前的16位的CPU,32位的 CPU可以模擬成一個老CPU,這是32位CPU的實模式同時32位CPU還可以工作在另外一個可以充分發揮其32位性能的模式,也就是保護模式。保護模式不但是32位的,而且此時還加進了為操作系統提供些好處的功能。特別是能夠保護操作系統的代碼不被操作系統之上的應用程序破壞的功能。這就是所謂的保護二字的涵義。

還有對多任務的支持等。CPU工作在保護模式下,又分出了4個特權級別,目的是便於操作系統對其上的應用程序進行管理。所謂的ring0~ring3。 windows操作系統只用到了兩個,ring0和ring3。ring0下的代碼可以讓CPU做任何可以做的事兒,ring3有很多限制。操作系統引導後,搶先把自己置成ring0狀態,同時,對操作系統之上的程序他有選擇的設置他們的級別。例如設備驅動,一般它們被操作系統置成ring0,而普通的應用程序被置成ring3.

在這裡要樹立一個概念。從程序員角度來看,操作系統可以看成對CPU ISA層的一個擴展。即:操作系統為ISA層增加了新的「指令」和功能。事實上,很多操作系統是固定在硬件裡的,例如網絡交換機和有些路由器等。有了這個概念,就很容易理解以後MASM為何要分對「ISA層」編程還是對「ISA加操作系統」編程。

No comments:

Post a Comment