在解釋pc值關係之前先了解一些概念。
程式計數器是用於存放下一條指令所在單元的地方。當執行一條指令時,首先需要根據pc中存放的指令位址,將指令由記憶體取到指令暫存器中,此過程稱為「取指令」。與此同時,pc中的位址自動加1,或者由轉移指標給出下一條指令的位址。
對於32位處理器,一條指令佔據4位元組。
流水線劃分為取指,解碼,執行。但並不是需3個時鐘週期完成一條指令。因為取指,解碼,執行,可以在通乙個時鐘週期中工作,互不影響,這樣可以看出雖然一條指令完成需要多個時鐘週期,但是總體來說看在每個時鐘週期都有一條指令完成。
好,現在我們開始。
由程式計數器的概念我們可以知道,在pc暫存器中存放著各種指令位址,程式執行時pc指向的是正在被取指的指令,不是指向當前正在執行的指令!即:在執行一條指令時,pc指向的是下一條指令指令。由於arm是**流水線工作方式,在理想條件下,在取了一條指令後,等該指令到了執行階段,處理器其實已經預取了往後的第二條指令了。
參考圖1的豎著的橢圓(代表著乙個流水線),當and指令在執行時,pc值已經指向add的位址。add的指令在and後的第二條指令。
所以有著下列數量關係:
pc→f(add的位址)
e(當前and的執行位址)+8 (因為落後兩條指令 2*4=8)= f (add的位址)
根據上述流水線的機制,我們的處理器執行的指令是落後於要預取的指令位址,落後兩個時鐘週期。對於32位處理器而言,也就是:
pc值=當前指令位址(e)+8
圖2是對圖1中豎著的橢圓的更詳細的描述。
pc=f(當前預取的指令位址)
d=pc-4 (解碼位址落後預取的位址1個週期)
e=pc-8(執行位址落後預取的位址兩個週期)
arm 流水線和pc值
然後pc pc 1 老師經常這麼說。這不完全正確,pc自增一的情況指出現在無流水 non pipeline 的情況下,這個時候取指,解碼,執指都是順序執行的而在有流水的情況下就比較複雜了這裡用arm7和arm9為例。流水線使用三個階段,因此指令分為三個階段執行 1.取指 從儲存器裝載一條指令 2.解...
ARM3級流水線和中斷返回位址位址
arm處理器使用流水線來增加處理器指令流的速度,這樣可使幾個操作同時進行,並使處理與儲存器系統之間的操作更加流暢,連續,能提供0.9mips mhz的指令執行速度 pc代表程式計數器,流水線使用三個階段,因此指令分為三個階段執行 1 取指 從儲存器裝載一條指令 2 解碼 識別將要被執行的指令,得到下...
ARM9 五級流水線結構,以及PC指標
arm7是 流水線,所以pc 執行指令位址 8,這很好理解,但是在arm9中,是五級流水線,這個理解顯然有些難度,首先看下arm7和arm9的流水線區別和聯絡 相比arm7,arm9採用了更高效的五級流水線設計,在取指令 解碼 執行之後,又增加了ls1和ls2階段,ls1負責載入和儲存指令中制定的資...