世界上有很多種體系結構的處理器,比較知名的處理器體系結構有:ARM、x86、RISC-V、mips、LoongArch、PowerPC等。不論是哪一種架構的處理器,其處理器核心都會自帶一定數量的寄存器,這些寄存器在處理器核心的運行過程中發揮著基礎而又重要的作用。
ARM體系結構是一種基于指令加載和存儲的體系結構。在這種體系結構下,所有的數據處理都需要在通用寄存器中完成,而不能直接在內存中完成。因此,這種體系結構的處理器核心處理數據的過程為:首先把待處理數據從內存加載到通用寄存器,然后進行處理,最后把結果寫入內存中。
通用寄存器
ARM架構提供了16個32位通用寄存器(R0-R15)用于軟件使用。其中R0-R12是普通寄存器,R13、R14和R15在程序的運行過程中通常用作固定的用途。
R13:又叫堆棧指針寄存器(Stack pointer)SP,SP通常用于保存堆棧地址,在使用入棧和出棧指令時,SP中的堆棧地址會自動的更新。堆棧主要用于保存局部變量,保存函數間調用的關鍵寄存器。對于根本不需要進行堆棧操作的程序,SP可以當做普通寄存器來存儲數據。
R14:又叫鏈接寄存器(Link register)LR,LR主要用于存放函數的返回地址,即當函數返回時,知道自己該回到哪兒去繼續運行。通常鏈接寄存器是和BL/BLX/CALL指令搭配使用,這幾個指令被調用后,默認會自動將當前調用指令的下一條指令地址保存到LR寄存器當中。
R15:又叫程序計數器(Program Counter)PC,PC主要用于存放CPU取指的地址。ARMv7架構同時支持ARM指令集和Thumb指令集。在ARM指令集中,當CPU正在執行A指令時,PC的值為當前指令A地址+8;在Thumb指令集中,由于Thumb指令集為16位,當CPU正在執行A指令時,PC的值為當前指令A地址+4。但是當手動向PC賦值時,CPU就會跳轉到賦值所代表的地址處去運行。記住PC存放的是取指地址,不是當前CPU運行地址。
備注:在ARM狀態下,PC指向的地址bit[1:0]總是為0,因此PC指向的地址都是4字節對齊。ARMv7架構的處理器支持混合編碼即同時支持ARM指令集和Thumb指令集,因此為了區分Thumb指令集和ARM指令集,ARM將PC指向地址的bit[0]位作為標志位。如果PC指向的地址bit[0]位為1,表示當前是Thumb指令集;如果PC指向的地址bit[0]位為0,表示當前是ARM指令集。
三級流水線
為了增加處理器指令流的速度,ARM使用了多級流水線技術。多級流水線技術是一種將指令的執行分解成多個步驟,并讓不同指令的各步驟重疊的一種準并行處理實現技術。經典的三級流水線結構將指令的執行分成取指,譯碼和執行這三個階段。
可以將指令的執行過程看成工廠加工產品的過程,當沒有采用流水線時只有一個工人A,工人A先對指令取指,然后對指令譯碼,最后執行指令,然后再次對指令取指周而復始。工人A在同一個時間只能干一件事,指令的執行也就只有等工人A對指令完成取指和譯碼之后才能進行。工廠老板一看,這產品的生產效率太低,就又請了工人B和工人C,現在工人A只負責取指,工人B只負責譯碼,工人C只負責執行,這樣三條流水線同時工作,每時每刻都有指令在被取指,譯碼和執行,產品的生產效率大大的提高了。三級流水線示意圖如下圖所示:
ARMv7-A架構學習_3級流水線
上圖是ARM指令集的三級流水線結構,每條指令的地址間隔為4字節,當CPU在t3時間段開始執行add r0,r1,#3指令時,PC的值為0x00000008,即PC此時指向cmp r0,#9指令處。記住PC存放的是取指地址,不是當前CPU運行地址。結合上圖對于Thumb指令集的PC值分析也是比較簡單的。
采用多級流水線技術后,并沒有加速單條指令的執行,每條指令的步驟并沒有減少,只是多條指令的不同操作步驟同時執行,因而從總體上看加快了指令流速度,縮短了程序執行時間。
審核編輯:湯梓紅
-
處理器
+關注
關注
68文章
19409瀏覽量
231190 -
ARM
+關注
關注
134文章
9169瀏覽量
369222 -
寄存器
+關注
關注
31文章
5363瀏覽量
121178 -
流水線
+關注
關注
0文章
121瀏覽量
25957 -
RISC-V
+關注
關注
45文章
2324瀏覽量
46596
原文標題:ARMv7-A 那些事 - 2.通用寄存器與流水線
文章出處:【微信號:嵌入式那些事,微信公眾號:嵌入式那些事】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論