指令集體系結構 - ISA

有且僅有發表於2015-11-24

1. 指令集體系結構(Instruction-Set Architecture, ISA)


1.1 定義

一個處理器支援的指令和指令的位元組級編碼就是這個處理器的ISA,包括很多個部分:

  • 指令集
  • 指令集編碼
  • 基本資料型別
  • 一組程式設計規範
  • 暫存器
  • 定址模式
  • 儲存體系
  • 異常事件處理
  • 中斷
  • 外部I/O

不同的處理器家族,例如Intel IA32、IBM/Freescale PowerPC和ARM,都有不同的ISA。維基百科 - Architecture list

1.2 作用

  1. ISA在編譯器編寫者(CPU軟體)和處理器設計人員(CPU硬體)之間提供了一個抽象層
    • 處理器設計者:依據ISA來設計處理器
    • 處理器使用者(如:寫編譯器的牛*程式設計師):依據ISA就知道CPU選用的指令集,就知道自己可以使用哪些指令以及遵循哪些規範
  2. 定義處理器上的軟體如何構建,這是ISA的最重要內涵,現代處理器都是支援高階語言程式設計、作業系統等等特性,ISA要定義出指令集內的指令是如何支撐起C語言裡堆疊、過程呼叫,作業系統裡異常、中斷,多媒體平臺裡數字影像處理、3D加速等等。

1.3 TIPS

  1. 常見的一個誤解的答案:指令集並不儲存於CPU中,應該這樣說:CPU本身是指令集(結構)的一個實現/例項;
  2. 一個ISA可能包含多個指令集;



2. ISA與微體系結構

ISA只是描述了CPU應該支援的每條指令是做什麼事的,即指令的功能。而微體系結構是描述處理器實際上是怎麼實現的。

2.1 微體系結構

微體系結構是計算機體系結構中偏向硬體的部分,它可以理解成數位電路如何實現處理器中的各個功能,通常關心的內容包括,指令的流水線結構,計算單元的電路(加法器等等),儲存器的結構(暫存器堆、Cache的結構)等等 ;

一個例項如下:
1. 拿Intel來說,(其ISA是IA-32等)其pentium 4處理器的微體系結構是NetBurst,現代,其Core(酷睿)系列CPU的微體系結構已經經歷了好幾代:Bloomfield(2008年)、Lynnfield(2009年)、Clarksfield(2009年)、Ar randale(2010年)、Gulftown(2010年)、Sandy Bridge(2011年)、Ivy Bridge(2012年)、Haswell(2013年)、Haswell Devil’s Canyon(2014年)、Broadwell(2015年)、Skylake(2015年)。
2. 拿ARM來說,(其ISA是ARMv7等)其微體系結構是ARM11等從11往後叫cortex系列,其中cortex-A系列有32位的A7、A9、A15,64位的A53、A57。




3. 指令集(Instruction set)

3.1 定義

通常會把CPU的擴充套件指令集稱為”CPU的指令集”(因為基本的,類似加減的指令似乎是必須被CPU所支援的指令)。每款CPU在設計時就規定了一系列與其硬體電路相配合的指令集。

指令集可分為複雜指令集(CISC:sisk)和精簡指令集(RISC:risk)兩部分,這部分暫不繼續討論了。

Intel的MMX(Multi Media Extended)、SSE、 SSE2(Streaming-Single instruction multiple data-Extensions 2)、SEE3和AMD的3DNow!等都是CPU的擴充套件指令集,分別增強了CPU的多媒體、圖形圖象和Internet等的處理能力。維基百科 - Comparison instruction set

3.2 指令

一條二進位制機器指令由:指令碼(操作碼)+運算元組成。

  1. 操作碼用來說明:指令的功能和執行的操作;
  2. 運算元說明:操作所涉及的源和目的資料的位置;
    • 源:立即數(即指令中包含的常亮)、暫存器、儲存器、I/O埠等;



一個流程

一個我思考出來的可能的流程是這樣:

  • CPU開發商
    1. 一個CPU廠商決定開發一個CPU,他們先要決定/選定一種指令集體系結構,他們當然不想自己開發,好了他們選用ARM的ARMv7;
    2. 那麼該如何實現ARMv7呢?我們還是不去自己設計微體系結構了,還是用ARM公司配套的cortex吧,這樣我們就能在矽晶片上做出一個CPU了;(當然中間省去了很多步驟)
  • CPU使用者(開發一個C編譯器)
    1. 這顆CPU可以執行什麼樣的指令呢?發現使用CPU使用的是ARMv7,那麼就檢視ARMv7的文件就好了,這是RISC的一種
    2. 編譯器完成了,它的功能是:將C原始碼編譯為可以在ARMv7上執行的二進位制命令程式碼,即目標檔案
    3. 此時一個小程式設計師寫了一段簡單C程式test.c,我們呼叫編譯器將test.c編譯為ARMv7上的可執行檔案test.o
    4. 目標檔案中包含了程式怎麼開始和結束執行、需要操作的資料、如何與作業系統互動等等。只要執行這個目標程式,CPU就能執行其中的指令了



後續的理解

  1. 何為x86 - 20160921記錄
    Intel 8086是一個Intel於1978年設計的16位微處理器晶片。資料匯流排16位,CPU20條地址匯流排-直接定址1MB儲存空間,每個儲存空間可以存放一個Byte資訊;

    20條地址匯流排:20根線條,每個有0個1兩種狀態,那麼組合起來就有2^20中結果,也就是1048576 bit = 131072 byte = 128KB

    來源於8086指令集的一系列處理器,都稱為x86處理器。

  2. 收到

相關文章