CPU簡介
目錄
CPU的功能模組
CPU從邏輯上可以劃分成3個模組,分別是控制單元、運算單元和儲存單元,這三部分由CPU內部匯流排連線起來
控制單元:控制單元是整個CPU的指揮控制中心,由指令暫存器IR(Instruction Register)、指令譯碼器ID(Instruction Decoder)和操作控制器OC(Operation Controller)
運算單元:是運算器的核心。可以執行算術運算(包括加減乘數等基本運算及其附加運算)和邏輯運算(包括移位、邏輯測試或兩個值比較)。
儲存單元:包括CPU片內快取和暫存器組,是CPU中暫時存放資料的地方
簡單的描述下CPU是如何進行計算的。
例如計算2個數的和:
首先,CPU的控制器從記憶體讀取兩條MOV指令,執行指令將記憶體的值賦值到兩個不同的暫存器中。
然後。CPU的控制器從記憶體讀取一條ADD指令,計算兩個暫存器中數的和值。
計算的結果儲存在第三個暫存器中,並將此暫存器的結果返回到記憶體中。
cpu匯流排
- 地址匯流排
CPU是通過地址匯流排來進行記憶體地址定址的。8086cpu有20根地址匯流排,可以訪問 1M (1<<20 )的記憶體空間。
CPU地址匯流排的位數決定了CPU的定址能力。
- 資料匯流排
CPU通過資料匯流排來進行記憶體和其他器件之間的資料傳遞。8086有16根資料匯流排,每次可以讀寫16位資料。
資料匯流排的寬度決定了CPU和外界的資料傳輸速度。
- 控制匯流排
CPU通過控制匯流排發出各種控制命令,用來操作外部裝置。
CPU暫存器
說明:關於CPU暫存器的話,網上很多資料。這邊只是做一個總結。
http://zh.wikipedia.org/wiki/%E5%AF%84%E5%AD%98%E5%99%A8
要編寫作業系統,首先要熟悉CPU的結構,這樣才能控制CPU完成自己想要的操作。CPU是由很多個暫存器構成的,通過組合語言操作暫存器的資料,從而進行CPU的執行和運算。
CPU暫存器組可以分為通用暫存器組,段暫存器組,指令指標暫存器 和 標誌暫存器。
16位cpu的暫存器組
8086 有14個16位暫存器,這14個暫存器按其用途可分為(1)通用暫存器-包括資料暫存器和指標暫存器、(2)指令指標暫存器、(3)標誌暫存器和(4)段暫存器等4類。
CPU數存器組:
總共4個數據暫存器,2個指標暫存器以及2個變址暫存器,如下:
- 4個數據暫存器(AX、BX、CX和DX)
- 2個指標暫存器(SP和BP)
- 2個變址暫存器(SI和DI)
通用暫存器
名稱 | 所屬暫存器組 | 作用 |
---|---|---|
AX | 資料暫存器(accumulator) | 累加暫存器 1.作為資料暫存器 2.累加器可用於乘、除、輸入/輸出等操作 |
BX | 資料暫存器(base) | 基址暫存器。 1.作為資料暫存器 2.可作為基址暫存器來使用,配合段暫存器定址 |
CX | 資料暫存器(count) | 1. 計數暫存器:在迴圈和字串操作時,要用它來控制迴圈次數 2.位移暫存器:在位操作中,當移多位時,要用CL來指明移位的位數 |
DX | 資料暫存器(data) | 1.在進行乘、除運算時,它可作為預設的運算元參與運算 2.用於存放I/O的埠地址 |
通用暫存器: AX,BX,CX,DX
大小為16位又可再拆分高低位使用,大小為8位:AH,AL,BH,BL,CH,CL,DH,DL。
暫存器(16位) | AX | BX | CX | DX |
---|---|---|---|---|
高位(8位) | AH | BH | CH | DH |
低位(8位) | AL | BL | CL | DL |
1. 累加暫存器 AX -accumulator,累加暫存器。
作用:累加器可用於乘、除、輸入/輸出等操作,它們的使用頻率很高
2. 基址暫存器 BX -base 基址暫存器。儲存器指標
作用:它可作為儲存器指標來使用;
3. 計數暫存器 CX -counter,計數暫存器。串操作,迴圈操作計數暫存器,其中的CL低位為移位操作計數器
作用:在迴圈和字串操作時,要用它來控制迴圈次數;在位操作中,當移多位時,要用CL來指明移位的位數
4. 資料暫存器 DX -data,資料暫存器。乘除運算
作用:在進行乘、除運算時,它可作為預設的運算元參與運算,也可用於存放I/O的埠地址
指標暫存器(16位)
名稱 | 所屬暫存器組 | 作用 |
---|---|---|
SI | 變址暫存器(source index) | 源變址暫存器 |
DI | 變址暫存器(destination index) | 目標變址暫存器 |
--- | --- | --- |
SP | 棧指標暫存器(stack pointer) | 棧指標暫存器 |
BP | 基數指標暫存器(base pointer) | 基址指標暫存器 |
指令指標暫存器(16位)
名稱 | 所屬暫存器組 | 作用 |
---|---|---|
IP | 指令指標暫存器 | 指向當前需要取出的指令位元組。IP指向的是指令地址的段內地址偏移量 |
段暫存器組(16位)
名稱 | 所屬暫存器組 | 作用 |
---|---|---|
CS | 程式碼段暫存器(code segment) | 用於程式碼段記憶體位置定址 |
DS | 資料段暫存器(data segment ) | 用於資料段記憶體位置定址 |
SS | 棧段暫存器(stack segment) | 用於堆疊記憶體位置定址 |
ES | 附加段暫存器(extra segment) |
5. 標誌暫存器(每個標誌佔一位)FLAGS
名稱 | 所屬暫存器組 | 作用 |
---|---|---|
FR | 標誌暫存器(Flags Register) | 存放條件標誌、控制標誌暫存器 |
32位cpu的暫存器組
CPU數存器組:
後來出現的32位處理器在16位的基礎上延伸到32位:
總共有4個32位的資料暫存器EAX、EBX、ECX和EDX。而這4個32位暫存器的低位和原先16位的一樣,命名為:AX、BX、CX和DX。
2個指標暫存器,名稱為ESP和EBP,
2個變址暫存器,名稱為ESI和EDI。
1. 通用暫存器組(32位)
★名稱 | ★作用 | |||
---|---|---|---|---|
位數 | 32位 | 16位 | 8位(高) | 8位(低) |
通用暫存器組 | ||||
累加暫存器 | eax | ax | ah | al |
基址暫存器 | ebx | bx | bh | bl |
計數暫存器 | ecx | cx | ch | cl |
edx | dx | dh | dl | |
指標暫存器組 | ||||
源變址暫存器 | esi | si | --- | --- |
目標變址暫存器 | edi | di | --- | --- |
指標暫存器組 | ||||
棧暫存器組 | ||||
棧指標暫存器 | esp | sp | --- | --- |
基址指標暫存器 | ebp | bp | --- | --- |
指令指標暫存器 | ||||
指令指標暫存器 | eip | ip | --- | --- |
段暫存器組 | ||||
程式碼段暫存器 | cs | --- | --- | |
資料段暫存器 | ds | --- | --- | |
棧段暫存器 | ss | --- | --- | |
附加段暫存器 | es | --- | --- | |
附加段暫存器 | fs | --- | --- | |
附加段暫存器 | gs | --- | --- | |
標誌暫存器 | ||||
標誌暫存器 | cflags | --- | --- |
64位cpu的暫存器組
CPU數存器組:
1. 通用暫存器組(64位)
★名稱 | 所屬暫存器組 | ★作用 |
---|---|---|
RAX | 資料暫存器(accumulator) | 累加暫存器,1.作為資料暫存器 2.累加器可用於乘、除、輸入/輸出等操作 |
RBX | 資料暫存器(base) | 基址暫存器。1.作為資料暫存器 2.可作為基址暫存器來使用,配合段暫存器定址 |
RCX | 資料暫存器(count) | 1. 計數暫存器:在迴圈和字串操作時,要用它來控制迴圈次數 2.位移暫存器:在位操作中,當移多位時,要用CL來指明移位的位數 |
RDX | 資料暫存器(data) | 1.在進行乘、除運算時,它可作為預設的運算元參與運算 2.用於存放I/O的埠地址 |
2. 指標暫存器(64位)
名稱 | 所屬暫存器組 | 作用 |
---|---|---|
RSP | 棧指標暫存器(stack pointer) | 棧指標暫存器 |
RBP | 基數指標暫存器(base pointer) | 基址指標暫存器 |
--- | --- | --- |
RSI | 變址暫存器(source index) | 源變址暫存器 |
RDI | 變址暫存器(destination index) | 目標變址暫存器 |
3. 指令指標暫存器(64位)
在原先的基礎上增加到32位:指令指標暫存器名稱為:
名稱 | 所屬暫存器組 | 作用 |
---|---|---|
RIP | 指令指標暫存器 |
還新增了8個64位的暫存器:
R8 R9 R10 R11 R12 R13 R14 R15