1. 程式人生 > >CPU簡介

CPU簡介

目錄

CPU的功能模組

CPU從邏輯上可以劃分成3個模組,分別是控制單元、運算單元和儲存單元,這三部分由CPU內部匯流排連線起來

  1. 控制單元:控制單元是整個CPU的指揮控制中心,由指令暫存器IR(Instruction Register)、指令譯碼器ID(Instruction Decoder)和操作控制器OC(Operation Controller)

  2. 運算單元:是運算器的核心。可以執行算術運算(包括加減乘數等基本運算及其附加運算)和邏輯運算(包括移位、邏輯測試或兩個值比較)。

  3. 儲存單元:包括CPU片內快取和暫存器組,是CPU中暫時存放資料的地方

簡單的描述下CPU是如何進行計算的。

例如計算2個數的和:

首先,CPU的控制器從記憶體讀取兩條MOV指令,執行指令將記憶體的值賦值到兩個不同的暫存器中。

然後。CPU的控制器從記憶體讀取一條ADD指令,計算兩個暫存器中數的和值。

計算的結果儲存在第三個暫存器中,並將此暫存器的結果返回到記憶體中。

cpu匯流排

  1. 地址匯流排

CPU是通過地址匯流排來進行記憶體地址定址的。8086cpu有20根地址匯流排,可以訪問 1M (1<<20 )的記憶體空間。

CPU地址匯流排的位數決定了CPU的定址能力。

  1. 資料匯流排

CPU通過資料匯流排來進行記憶體和其他器件之間的資料傳遞。8086有16根資料匯流排,每次可以讀寫16位資料。

資料匯流排的寬度決定了CPU和外界的資料傳輸速度。

  1. 控制匯流排

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