ARM處理器異常返回位址

2021-10-10 07:16:53 字數 1140 閱讀 4261

在arm處理器中一條指令的執行分為取指、解碼、執行三個階段,由於指令流水線的存在造成當前執行的指令的位址是pc-8(arm指令集),那麼當前執行指令的下一條指令的位址應該是pc-4,所以在異常產生時處理器會將pc-4的值儲存到對應模式的lr暫存器中,但是該返回位址是否能夠被使用還要看具體產生的異常的種類而定。

fiq與riq異常:

fiq與riq異常返回處理是一樣的,當處理器執行完當前指令後才去查詢中斷且檢視是否允許中斷,如果處理器產生了中斷,這時pc的值已經更新,即pc指向了當前指令後第三條指令的位置(被中斷指令位址加12),產生fiq與riq異常後處理器將pc-4的值儲存到了對應模式下的lr,而它指向的是當前被中斷指令的後面的第二條指令,因此在返回時我們需要人為的將lr中儲存的值自減4以得到正確的返回位址。

預取指中止異常:

在指令預取時如果位址是非法的,該指令就被標記為有問題的指令,流水線上該指令之前的指令繼續執行,當執行被標記為有問題的指令的時候,處理器就會產生異常。產生該異常最終返回時需要返回到被標記的指令處重新讀取並執行該指令,因此異常返回時需要返回到該指令處而不是該指令的下一條指令。所以在中斷返回時我們需要人為的對lr中儲存的值自減4。

指令未定義異常:

指令未定義異常由當前正在執行的指令產生,即產生異常時pc的值還沒有更新,pc的值指向當前指令後面第二條指令,產生異常後lr中儲存的指令是當前指令的下一條指令的位址,所以異常返回時直接把lr的值給pc即可不許人為的去修正返回位址。

軟中斷異常:

軟中斷異常與指令未定義異常一樣,也是當前指令在執行過程中就產生了異常,所以lr中儲存的返回位址是當前軟中斷指令的下一條指令的位址,不需要人為的去修正,返回時直接將lr的值賦給pc即可。

資料中止異常:

產生該異常的時候程式要返回到有問題的指令處重新訪問該資料,因此應該返回到產生異常的指令處而不是產生異常指令的下一條指令處。當異常產生時pc的值已經更新,所以pc指向的是異常產生指令的後面的第三條指令,而lr中儲存的是pc-4的值即異常產生指令的後面的第二條指令的位址。所以在返回時我們需人為的對lr中的值進行自減8的處理。以保證異常正確的返回。

上述每一種異常發生時,返回位址都要根據具體的異常型別進行重新修正

ARM處理器模式

cpsr暫存器 arm v4的cpsr暫存器 和儲存它的spsr暫存器 中的位分配如下圖所示。處理器模式決定了哪些暫存器是活動的以及對cpsr訪問權。處理器模式要麼是特權模式,要麼是非特權模式。特權模式允許對cpsr的完全讀 寫訪問 與些相反,非特權模式只允許對cpsr的控制域進行讀訪問,但允許對條...

ARM處理器型號

arm公司擁有眾多cpu指令集,cpu架構,cpu系列.本文旨在介紹arm公司的cpu產品線.下圖展示了arm公司cpu的產品線 首先有必要了解一下arm公司的命名規則 arm的命名規則,大致分成三類 1.基於arm architecture版本的 指令集架構 命名規則 2.基於arm archit...

arm處理器模式和arm處理器狀態的區別

arm處理器狀態 arm微處理器的工作狀態一般有兩種,並可在兩種狀態之間切換 第一種為arm狀態,此時處理器執行32位的字對齊的arm指令 第二種為thumb狀態,此時處理器執行16位的 半字對齊的thumb指令。在程式的執行過程中,微處理器可以隨時在兩種工作狀態之間切換,並且,處理器工作狀態的轉變...