上面的圖是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 ...