Intel汇编语言程序设计学习-第二章 IA-32处理器体系结构-下
2.2 ?IA-32處理器體系結構
? ? 如前所述,IA-32是指始于Intel386直到當前最新的奔騰4的系列的處理器(額...這本書是什么時候寫的啊,表示現在應該是I7啊),在IA-32的發展過程中,Intel處理器的內部體系結構已經做出了無數的改進,如流水線、超標量、分支預測以及超線程等。不過就編程而言。可見的變化只有用于多媒體處理以及用于圖形計算的指令集擴展。
2.2.1 ?操作模式
? ? IA-32處理器有三種基本的操作模式:保護模式、實地址模式和系統管理模式。另外一種模式稱為虛擬8086模式,是保護模式的一個特例。
保護模式(Protected Mode):保護模式是處理器的基本模式,在保護模式下,所有指令和特性都是可用的,程序被賦予了獨立的內存區域(稱為段),處理器阻止程序訪問已分配段之外的其他內存。
虛擬8086模式(Virtual-8086 Mode):在保護模式下,處理器可以在安全的多任務環境中執行地址模式的軟件,如MS-DOS程序。換句話說,即使一個MS-DOS
程序崩潰了或試圖想系統內存區寫入數據,也不會影響同時運行的其他程序。Windows XP 可以同時執行多個虛擬8086任務。
實地址模式(Real-address Mode):實地址模式實現了Intel8086處理器的程序設計環境以及其他一些新增的特性,如卻換到其他兩種模式的能力等。該模式在WIndows98下是被支持的,可用于運行那些需要直接訪問系統內存和硬件設備的MS-DOS程序。實地址模式下運行的程序有可能導致操作系統掛起(停止響應命令)。
系統管理模式(SSM ,System Management Mode):系統管理模式為操作系統提供了用以實現電源管理和系統安全等功能的機制。這些功能通常是由那些想自定義特定系統啟動過程的計算機制造商實現的。
2.2.2 ?基本執行環境
地址空間
? ? 在保護模式下。IA-32處理器可訪問高達4GB的內存,這是32位無符號二進制整數地址的能夠尋址的上限。實地址模式程序只能訪問1MB的內存。如果處理器處于保護模式并在虛擬8086模式下運行多個程序,每個程序都能訪問獨立的1MB內存區域。
基本寄存器
? ??寄存器是CPU內部的高速存儲單元,訪問速度比常規內存快很多。例如
當循環進行速度優化時,就可以把循環計數存放在寄存器而不是(內存)變量中。
下圖列出了所有的用于程序執行的基本寄存器,其中有8個通用寄存器,6個段寄存器,一個處理器狀態標志寄存器(EFLAGS)和一個指令指針(EIP)寄存器。
通用寄存器:通用寄存器主要用于算術運算和數據的傳輸。如下圖所示,每個寄存器都可以作為一個32位值或兩個16位值來尋址使用。
?
? ?某些16位的寄存器能按8位尋址使用。例如,32位的EAX寄存器的低16位稱為AX,AX寄存器的高8位稱為AH,地8位稱為AL。EAX,EBX,ECX和EDX寄存器都有存在這種交迭的關系:
? ? 其余通用寄存器只有低16位有特別的名字,但是不能再進一步細分了。這里列出的16位寄存器通常在編寫實地址模式程序時使用:
特殊用法:某些通用寄存器有些特殊用法。
1.EAX在乘法和除法指令中被自動使用。通常稱為擴展累加寄存器。
2.在某些指令中,CPU自動使用ECX作為循環計數器。
3.ESP尋址堆棧(一種系統內存結構)上的數據,極少用于普通的算術和數據傳輸,通常被稱之為擴展堆棧指針寄存器。
4.ESI和EDI由高速內存數據傳送指令使用,通常稱為擴展源指針和擴展目的指針寄存器。
5.高級語言使用EBP引用堆棧上的函數參數和局部變量。除非用于高級程序設計技巧中EBP一般不應該用于普通算術和數據傳送。通常稱為擴展幀指針寄存器。
...之后是每個寄存器都有介紹,不寫了。需要的時候再查。
2.2.3 ??浮點單元
? ? IA-32浮點單元(FPU)執行高速浮點算術運算。過去浮點單元需要一塊獨立的協處理器芯片。但從Intel486以后,FPU被繼承了主處理器芯片中。FPU內有8個浮點數據寄存器,名為ST(0),ST(1)...ST(7),其余的控制和指針寄存器如圖。
2.2.4 ?Intel微處理器的歷史
Intel8086 ??Intel體系開端
Intel80286 ?...
Intel80386 IA-32 引入32位寄存器、32位地址總線以及32位外部擴展數據通道。
Intel486 ??指令集的微結構采用流水線技術
奔騰 ?????引入了MMX技術
P6處理器系列 Pro加入了提升指令執行速度的高級技術,奔騰2加入了MMX,奔騰3引入了SIMD(流擴展)技術,128寄存器。
奔騰4和至強(Xeon)系列 ??NetBurst微架構
2.3 ?IA-32的內存管理
? ? IA-32處理器根據2.2.1節討論的幾種不同的基本操作模式對內存進行不同方式的管理。保護模式是最簡單也是最強大的,其他模式通常僅在程序需要直接訪問系統硬件是才使用。
在實地址模式下,處理器只能尋址1MB的內存空間,地址是從十六進制數的00000-FFFFF處理器一次只能運行一個程序,但可以隨時打斷(稱為中斷)程序的執行以便處理器來自外圍設備的請求。應用程序能夠讀取和修改RAM(隨機訪問存儲器)的任何區域,能夠讀取ROM(只讀存儲器)的任何區域但不能修改。MS-DOS操作系統運行于實地址模式下,Windows95/98可以啟動或切換到該模式。
在保護模式下,處理器可同時運行多個程序,并為每個進程(運行的程序)分配4GB的內存。可以為每個程序分配屬于自己的保留內存區域,一個程序不能訪問其他程序的代碼和數據。MS-Windows和Linux都運行于保護模式下。
在虛擬8086模式下,實際上是處理器在保護模式下創建了一個有1MB地址空間的虛擬機,虛擬機對運行于實地址模式下的80X86計算機進行模擬。例如,在Windows NT 和 Windows2000下,打開一個命令行窗口時就會創建一個8086虛擬機。可以同時運行很多這樣的窗口,它們之間的行為不會相互影響。有一些直接訪問計算機硬件的MS-DOS程序不能在Windows NT 和 Windows2000的虛擬8086模式下運行。
2.4 ?IA-32微機構成
2.4.1 ?主板
主板是微型計算機心臟,主板是一塊印刷制電路板,上面安裝了計算機的CPU、更能支持芯片組、住存儲器、輸入輸出接口、電源插口以及擴展槽。這些不同的組件通過總線相互連接,總線是印制在主板上的一組電線。雖然主板種類很多。但是下面的一些部件是各個主板都具有的:
1.CPU插座。
2.內存插槽。
3.基本輸入輸出系統(BIOS)芯片,存放著系統軟件。
4.CMOS內存,帶一塊可充電電池供電。
5.海量存儲設備(如硬盤和CD-ROM等)的接口。
6.外部設備de USB接口。
7.鍵盤和鼠標接口。
8.PCI插槽,用于安裝聲卡、圖形卡、數據采集器卡和其他輸入輸出設備。
下面是可選的
9.集成的聲卡處理器。
10.并口和串口。
11.集成網卡。
12.告訴視頻卡使用的AGP總線接口。
? ? 面是一個典型的IA-32系統中的一些重要的功能支持處理芯片:
1.浮點單元(FPU),處理浮點和擴展數運算。
2.8284/82C284時鐘發生器,簡稱時鐘,它以固定的頻率產生脈沖。時鐘發生器用于在CPU和計算機其余部件之間進行同步。
3.8259A可編程中斷控制器(PIC),處理來自外部設備的中斷。
4.8255可編程并口。
2.4.2 ?視頻輸出
? ? 略
2.4.3 ?存儲器
? ? 基于Intel的系統使用集中基本類型的存儲器:只讀存儲器(ROM),可擦寫可編程只讀存儲器(EPROM),動態隨機訪問存儲器(DRAM),靜態隨機訪問存儲器(SRAM),視頻隨機訪問存儲器(VRAM)以及互補金屬氧化物半導體隨機訪問存儲器(CMOS RAM): 詳細介紹 略。
2.4.4 ?輸入輸出接口
? ? 通用串行總線(USB,Universal Serial Bus):通用串行總線接口為計算機和其他支持USB之間提供了智能、告訴的連接。USB2.0支持480MB/s的數據傳輸速率。USB接口可以連接單功能設備或多個共享同一USB接口的復合設備。
?
? ? 當設備通過USB與計算機相連時,計算機詢問(枚舉)設備以獲取其設備名、設備類型以及其支持的驅動程序類型,這個過程稱為美劇。計算機可以切斷單個設備的電源,使設備處于掛起狀態。
并口:大多數打印機都通過并行端口與計算機相連。術語“并行”意味著字節數據或字數據的所有位可以同時從計算機傳送到設備,在通常不超過10英尺的較短距離內,數據可以非常快速(1MB/s)地傳送、并行端口可以雙向的,盡管目前打印機都使用USB接口了,告訴連接許多實驗儀器和定制設備時并口依然很有用。
IDE:通常為智能驅動設備接口或驅動設備。IDE接口連接計算機和海量存儲設備如硬盤、DVD以及CD-ROM等。計算機內幾乎總是存在IDE接口。 當今的大部分設備實際上是并行ATA設備,這類設備的驅動控制器在設備內。帶內奸控制邏輯的設備把CPU從內部邏輯的控制工作中解放出來了。另外一個相關的接口是SATA(串行ATA),提供了比并行ATA更高的數據傳輸速率。
FireWire:火線是一種高速外部總線標準,支持最高800MB/s的數據傳輸速率。
串口:RS-232串行端口每次發送一個二進制位,這導致其速度較并口和USB接口慢,但是這樣使數據進行較遠距離的傳送成為可能。實驗采集設備通常使用串口,調制解調器也是。
2.5 輸入輸出系統
2.5.1 ?所有這一切如何工作
? ? 應用程序通常從鍵盤和文件讀取輸入,并將輸出寫到屏幕或文件中。輸入輸出(I/O)不必通過直接訪問硬件就能完成-相反,通過調用操作系統的功能函數就能完成。在不同的訪問層次都可以進行I/O操作,這點類似于1章中簡述的虛擬機的概念。有三種基本的訪問層次:
高級語言功能函數:諸如C++或JAVA之類的高級程序設計語言包含了執行輸入輸出的函數。這些功能函數是可移植的,能夠在多種不同的計算機系統上工作并且不依賴于任何一個操作系統。
操作系統:程序員可以通過API調用操作系統的功能函數。才做系統提供了一些高級操作,如寫字符串到文件、從磁盤讀取字符串以及分配內存塊等。
BIOS(基本輸入輸出系統):是直接同硬件交互的子程序的集合。BIOS是由計算機制造商安裝的,統計算機硬件相匹配。操作系統通常同BIOS通信。
設備驅動程序:如果計算機安裝了BIOS不能識別的新設備,會發生什么?當操作系統引導的時候,它加載一個設備驅動程序,設備驅動程序中包含了同設備通信的功能函數。設備驅動程序工作起來與BIOS非常相似,它為特定的設備或一類設備提供了輸入輸出的功能。
應用程序在屏幕上顯示一個字符串步驟如下:
?
1.一條應用程序語句調用一個高級語言庫函數向標準輸出上寫字符串。
2.庫函數(層次3)調用一個操作系統函數,傳遞一個字符串指針。
3.操作系統函數(層次2)接入一個循環,循環中調用BIOS的某個子例程,向它傳遞每個字符的ASCII碼及其顏色,操作系統調用另外一個BIOS子程序把光標前前進到屏幕的下一個字符要顯示的位置。
4.BIOS子例程(層次1)接收每個字符,映射特定的系統字體,然后把字符送至與視頻控制卡相連的硬件端口。
5.視頻控制卡(層次0)定時產生硬件信號給視頻顯示以控制光柵掃描和像素顯示。
在多個層次上進行編程:在輸入輸出程序設計領域,匯編語言的能力和靈活性更大,匯編語言可以從下面的訪問層次中進行選擇。
層次3:調用庫函數執行通用的文本I/O和基于文件的I/O。
層次2:調用操作系統函數執行文本I/O和基于文件的I/O。
層次1:調用BIOS功能控制與設備相關的特性。
層次0:在硬件層次上接收和發送數據,能夠完全控制特定的設備。
本章小結(依舊是直接粘貼過來)
?
?
?
總結
以上是生活随笔為你收集整理的Intel汇编语言程序设计学习-第二章 IA-32处理器体系结构-下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intel汇编语言程序设计学习-第二章
- 下一篇: Intel汇编语言程序设计学习-第三章