ARM BL或中斷返回,一些細節!

2021-06-05 06:09:18 字數 801 閱讀 1974

上面的圖是7處理器的暫存器示意圖。

摘自網路

1, arm3級流水線

由arm7-tdmi-s技術參考手冊p2可知,arm的流水線結構為:

取指----->解碼------>執行

arm**: pc         pc- 4      pc - 8

0x1008 0x1004   0x1000

在此頁,還註明,pc是指向被取指的指令,而不是正在執行的指令。(也就是說在此 pc值為0x1008 ?)

2,當發生bl跳轉前,會在暫存器 r14 (即lr)中儲存當前pc-4,即bl跳轉指令的下一條指令的位址。所以在返回時只要 mov pc,lr

3,中斷:

(1)當發生中斷的時候,把是暫存器pc當前值存入lr(此時的lr是中斷模式下的lr),所以返回時,應該是將lr-4賦值給pc。(0x1004)注:有些異常中斷可能要將lr-8或lr賦值給pc。詳細請仔細看arm資料手冊。

(2)當發生irq或fiq後,系統要進入相應的異常模式進行處理,這些是由硬體實現的。

產生異常後,arm核會做以下工作:

<1>.將當前的位址加4or加8存到lr暫存器裡,即把當前狀態下下一條指令的位址存入lr

<2>.將cpsr複製到spsr,

<3>.然後將異常模式的狀態強制寫入cpsr

<4>.強制pc從相關的異常向量處取指!!

中斷結束後:

1.將spsr複製回cpsr

2.開中斷

3.返回原程式,ldr pc,lr

4,因為每個模式下面都有lr,所以當返回原來模式時,原來模式下的lr並沒有被破壞。

ARM BL或中斷返回需要注意的一些細節問題

上圖為arm處理器的各個狀態下的暫存器示意圖 1 arm3級流水線 由arm7 tdmi s技術參考手冊p2可知,arm的流水線結構為 取指 解碼 執行 arm pc pc 4 pc 8 0x1008 0x1004 0x1000 在此頁,還註明,pc是指向被取指的指令,而不是正在執行的指令。也就是說...

C 一些細節

include include pthread.h using namespace std static pthread mutex t mutex class single class single public static single instance static single getin...

zen cart 一些細節修改

修改底部powerby zen cart includes languages pure blue free english.php 1 將 powered by zen cart 替換成自己的圖示logo及alt說明文字 可以將您的gif格式的圖示命名為 logo.gif 然後ftp到 your ...