(1)pc是程式計數器,儲存將要執行的指令位址
的值被儲存到lr中(mov lr,pc)。
(3)ir是指令暫存器,用來儲存當前正在執行的一條指令。當執行一條指令時,先把它從記憶體取到資料暫存器(dr)中,然後再傳送至ir。
區別:(1)ir是微體系結構概念(什麼是微體系結構?就是程式設計師看不到,但硬體中確實存在的硬體邏輯,只有系統設計者知道其存在。),而lr是程式設計師可見的暫存器。比如用gdb除錯程式時,如果列印lr暫存器內容是可以看到其值的,但是列印ir是不可能的。
(2)lr
是pc的備份,pc暫存器存的是將要執行的指令的位址;ir存的是將要送到alu等部件執行的指令內容。
異常的發生會導致程式正常執行的被打斷,並將控制流轉移到相應的異常處理(異常響應),有些異常(fiq、irq)事件處理後,系統還希望能回到當初異常發生時被打斷的源程式斷點處繼續完成源程式的執行(異常返回),這就需要一種解決方案,用於記錄源程式的斷點位置,以便正確的異常返回。類似的還有子程式的呼叫和返回。在主程式中(通過子程式呼叫指令)呼叫子程式時,也需要記錄下主程式中的呼叫點位置,以便將來的子程式的返回。
在arm處理器中使用 r14實現對斷點和呼叫點的記錄,即使用r14用作返回連線暫存器(lr )。在硬體上和指令執行上,cpu 自動完成相應返回點的記錄。在arm 組合語言程式設計時,r14和lr通用。
arm處理器響應異常時,會自動完成將當前的pc儲存到lr暫存器。
arm處理器執行子程式呼叫指令(bl )時,會自動完成將當前的pc的值減去4的結果資料儲存到lr暫存器。即將呼叫指令的下緊鄰指令的位址儲存到lr。
arm處理器針對不同的模式,共有6個鏈結暫存器資源(lr),其中使用者模式和系統
模式共用乙個 lr,每種異常模式都有各自專用的r14 暫存器(lr )。這些鏈結暫存器分別
為 r14、r14_svc、r14_abt、r14_und、r14_irq、r14_fiq,
程式設計者要清晰處理器的模式與相應暫存器的對應關係,都是使用 r14,但不同模式下的r14 不是同乙個物理資源,其內容可能天壤之別。
r14
不用做鏈結暫存器(lr )時,也可以用做通用資料暫存器。
馮 ·諾伊曼計算機體系結構的主要內容之一就是「程式預儲存,計算機自動執行」!處理器要執行的程式(指令序列)都是以二進位制**序列方式預儲存在計算機的儲存器中,處理器將這些**逐條地取到處理器中再解碼、執行,以完成整個程式的執行。為了保證程式能夠連續地執行下去,cpu必須具有某些手段來確定下一條取指指令的位址。程式計數器(pc )正是起到這種作用,所以通常又稱之為『指令計數器』。cpu總是按照pc的指向對指令序列進行取指、解碼和執行,也就是說,最終是pc 決定了程式執行流向。故而,程式計數器(pc )屬於特別功能暫存器範疇,不能自由地用於儲存其他運算資料。
在程式開始執行前,將程式指令序列的起始位址,即程式的第一條指令所在的記憶體單元位址送入pc,cpu 按照 pc的指示從記憶體讀取第一條指令(取指)。當執行指令時,cpu自動地修改pc 的內容,即每執行一條指令pc增加乙個量,這個量等於指令所含的位元組數(指令位元組數),使 pc總是指向下一條將要取指的指令位址。由於大多數指令都是按順序來執行的,所以修改pc 的過程通常只是簡單的對pc 加「指令位元組數」。
當程式轉移時,轉移指令執行的最終結果就是要改變pc的值,此pc值就是轉去的目標位址。處理器總是按照pc 指向取指、解碼、執行,以此實現了程式轉移。arm 處理器中使用r15 作為pc,它總是指向取指單元,並且arm 處理器中只有乙個pc 暫存器,被各模式共用。r15 有32 位寬度(下述標記為r15[31:0],表示r15 的『第31位』到『第0位'),arm 處理器可以直接定址4gb的位址空間(2^32 = 4g )。
(解釋什麼是字對齊什麼是半字對齊)儲存器是計算機中用於記憶資料資訊的電子裝置,它通過記憶「高/低」電平記憶「1/0」能記憶 1 位「1/0」資料的電子單元,稱之為儲存元,計算機中的儲存器通常將每8 個這樣的儲存元組成乙個單元,稱之為位元組,位元組是處理器訪問儲存器的最小單位。arm 處理器對儲存器空間的訪問解析度以位元組為最小單位;arm 處理器還支援 16bit 資料(2位元組)的儲存器訪問和 32bit資料(4 子節)的儲存器訪問。在arm 中將32 位的資料稱之為『字』,將 16 位的資料稱之為『半字』。
arm 處理器在對於「字」/ 「半字」資料進行訪問時,對資料的儲存格式是有要求的。要求被訪問的「半字」必須存放在儲存器緊鄰的兩個位元組單元,並且首位元組位址必須能被2整除,這樣儲存的 16bit 資料稱為 『半字對齊』儲存資料,16bit 資料這樣的儲存方式稱為 『半字對齊』儲存。類似的,arm 處理器在進「字」資料訪問時,要求被訪問的「字」必須存放在儲存器緊鄰的4 個位元組單元,並且首位元組位址必須能被4 整除,這樣儲存的32bit 數 據稱為『字對齊』儲存資料,32bit 資料這樣的儲存方式稱為『字對齊』儲存。
能被2 整除資料的二進位制表示,其最低位一定是『0』;能被4 整除資料的二進位制表示,
其最低兩位一定是『00』。arm 體系要求32 位長的arm 指令在儲存器中必須字對齊儲存,
16 位長的 thumb 指令必須半字對齊儲存
。因此,在arm 狀態下,r15 的值總是能被4 整
除,也就是r15 暫存器的最低2 位總是 0;thumb 狀態下,r15 的值總是能被2整除,也就是r15 暫存器的最低位總是0。
ARM中的暫存器R0 R15
根據 arm thumb 過程呼叫標準 r0 r3 用作傳入函式引數 傳出函式返回值。在子程式呼叫之間,可以將 r0 r3 用於任何用途。被呼叫函式在返回之前不必恢復 r0 r3。如果呼叫函式需要再次使用 r0 r3 的內容,則它必須保留這些內容。r4 r11 被用來存放函式的區域性變數。如果被呼叫...
arm中R0 R15暫存器的作用
根據 arm thumb 過程呼叫標準 r0 r3 用作傳入函式引數,傳出函式返回值。在子程式呼叫之間,可以將 r0 r3 用於任何用途。被呼叫函式在返回之前不必恢復 r0 r3。如果呼叫函式需要再次使用 r0 r3 的內容,則它必須保留這些內容。r4 r11 被用來存放函式的區域性變數。如果被呼叫...
ARM 程式計數器 R15
8 是指 8 個位元組,是兩條 arm 指令的長度。arm 是 3 級流水線 取指,解碼,執行。由於 arm7 指令總是以字為單位,所以 r15 暫存器的最低兩位總是為 0。r15 值的改變將引起程式執行順序的改變。向 r15 內寫入乙個值,程式將跳轉到以 r15 值為位址的程式執行 下面講一下上面...