深入認識CPU

學習彙編的時候,對cpu的認識有助於對彙編語言的理解,因爲彙編語言功能可以直接對cpu中的寄存器進行操作。
以8086cpu爲例子,8086cpu是16位的,那麼16位cpu具有哪些性質呢?

  • 運算器一次最多可以處理16位的數據
  • 寄存器的最大寬度爲16位
  • 寄存器和運算器之間的通路爲16位

1.cpu組成

cpu構造.jpg

  • 控制部件單元(Control unit):主要是負責對指令,並且發出爲完成每條指令所要執行的各個操作的控制信號。由指令寄存器 IR(Instruction Register)、指令譯碼器*ID(Instruction Decoder) 和 操作控制器* OC(Operation Controller)三個部件組成

  • 算術邏輯控制單元ALU(Arithmetic Logic Unit):可以執行定點或浮點算術運算操作、移位操作以及邏輯操作,也可執行地址運算和轉換。是組合邏輯電路。

  • 地址控制:提供尋找功能。由程序計數器,地址寄存器構成

  • 通用寄存器:可用於傳送和暫存數據,也可參與算術邏輯運算,並保存運算結果

    4個數據寄存器(AX、BX、CX和DX)
    2個變址和指針寄存器(SI和DI)
    2個指針寄存器(SP和BP)
    4個段寄存器(ES、CS、SS和DS)
    1個指令指針寄存器(IP)
    1個標誌寄存器(Flags)

2.使用寄存器

彙編語言中使用的最多的就是寄存器,如何正確的使用寄存器,就要知道各種寄存器的作用

數據寄存器
AX  乘、除運算,字的輸入輸出,中間結果的緩存
AL  字節的乘、除運算,字節的輸入輸出,十進制算術運算
AH  字節的乘、除運算,存放中斷的功能號
BX  存儲器指針
CX  串操作、循環控制的計數器
CL  移位操作的計數器
DX  字的乘、除運算,間接的輸入輸出

變址寄存器
SI   存儲器指針、串指令中的源操作數指針      
DI   存儲器指針、串指令中的目的操作數指針     
BP   存儲器指針、存取堆棧的指針
SP   堆棧的棧頂指針

IP  指令指針寄存器

段寄存器
ES   附加段寄存器
CS   代碼段寄存器
SS   堆棧段寄存器
DS   數據段寄存器

3.cpu流水線技術

流水線技術的作用:提高cpu執行效率

流水線方式
流水線時空圖.jpg

串行方式
串行執行.jpg

cpu並不是等一條指令完成後,再開始第二條指令。而是採用流水線,把cpu的工作分成個四個流程,當取指令完成後,不是等待而是取第二條指令。

採用流水線技術後,並沒有加速單條指令的執行,每條指令的操作步驟一個也不能少,只是多條指令的不同操作步驟同時執行,因而從總體上看加快了指令流速度,縮短了程序執行時間

兩種方式比較:
* 流水線方式:在t4時間內,完成了第1個指令,第二個指令完成3/4,第三個指令完成1/2,第四個指令完成1/4
* 串行方式 :在t4時間內,完成1條指令
在同一個時間內,流水線方式可以完成更多的指令,cpu的執行效率大大提高

4.cpu的亂序執行

是指CPU允許將多條指令不按程序規定的順序分開發送給各相應電路單元處理的技術。這樣將根據各電路單元的狀態和各指令能否提前執行的具體情況分析後,將能提前執行的指令立即發送給相應電路

這好比請A、B、C三個名人爲晚會題寫橫幅“春節聯歡晚會”六個大字,每人各寫兩個字。如果這時在一張大紙上按順序由A寫好”春節”後再交給B寫”聯歡”,然後再由C寫”晚會”,那麼這樣在A寫的時候,B和C必須等待,而在B寫的時候C仍然要等待而A已經沒事了。

但如果採用三個人分別用三張紙同時寫的做法, 那麼B和C都不必須等待就可以同時各寫各的了,甚至C和B還可以比A先寫好也沒關係(就象亂序執行),但當他們都寫完後就必須重新在橫幅上(自然可以由別人做,就象CPU中亂序執行後的重新排列單元)按”春節聯歡晚會”的順序排好才能掛出去。

來源:http://www.chinaz.com/program/2013/0108/288327.shtml

處理器基本上會按照程序中書寫的機器指令的順序執行。按照書寫順序執行稱爲按序執行(In-Order )。按照書寫順序執行時,如果從內存讀取數據的加載指令、除法運算指令等延遲(等待結果的時間)較長的指令後面緊跟着使用該指令結果的指令,就會陷入長時間的等待。儘管這種情況無可奈何,但有時,再下一條指令並不依賴於前面那條延遲較長的指令,只要有了操作數就能執行。

解碼單元解碼後的指令不是直接送到流水線,而是根據各自的指令種類,將解碼後的指令送往各自的保留站中保存下來。如果操作數位於寄存器中,就把操作數從寄存器中讀出來,和指令一起放入保留站。相反,如果操作數還在由前面的指令進行計算,那麼就把那條指令的識別信息保存下來。

然後,保留站把操作數齊備、可執行的指令依次送到流水線進行運算。即使指令位於前面,如果操作數沒準備好,也不能開始執行,所以保留站中的指令執行順序與程序不一致(亂序)。另外,保留站會監視執行流水線輸出的結果,如果產生的結果正好是等待中的指令的操作數,就將其讀入,這樣操作數齊備後,等待中的指令就可以執行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章