ARM的異常返回

2021-08-29 13:56:19 字數 631 閱讀 6847

異常返回有3類,我這只解釋兩類,第三類我沒有理解,後續會看看linux kernel怎麼做的。

1)從swi和未定義指令返回

arm  

swi pc-8 ;異常發生處

指令1 pc-4 ; 程式返回的地方, lr=下一條指令

指令2 pc ;pc當前值

異常是由指令本身引起的,pc、lr的值沒有更新,cpsr模式就已經更改了,而當前執行的產生異常的執行是不希望再次執行的,所以返回指令為

movs pc,lr
2)從fiq,irq中斷和預取異常返回

arm

指令1 pc-12 ;異常發生在這條指令執行期間

指令2 pc-8 ;異常返回後需要回到執行的指令

指令3 pc-4 ;arm lr=下一條指令

指令4 pc ;

異常在當前指令執行完畢後響應,此時pc的值已經更新了,而lr也跟著為pc的decode階段指令(**流水線),所以為了異常執行完畢後返回現場

movs pc,lr,#4
3)從資料異常返回

ARM中斷異常處理的返回

arm中斷異常處理的返回 2010 07 30 17 58 13 標籤 arm 華清遠見嵌入式學院 講師。舉個小例子,下面是一段arm彙編 位址指令 0x3000 bl add 0x3004 mov r0,0 0x3008 mov r1,1 0x300c mov r2,2 area test,cod...

ARM中斷異常處理的返回的問題

因為arm指令是 流水線就是說取指,譯指,執行時同時執行的 這樣說吧,現在pc指向的是正在取指的位址,那麼cpu正在譯指的指令位址是pc 4 假設在arm狀態下,乙個指令佔4個位元組 cpu正在執行的指令位址是pc 8.也就是說pc所指向的位址和現在所執行的指令位址相差8,儘管以後版本的指令流水線擴...

ARM異常中斷返回的幾種情況

arm異常中斷返回的幾種情況 異常中斷返回的幾種情況 重要基礎知識 r15 pc 總是指向 正在取指 的指令,而不是指向 正在執行 的指令或正在 解碼 的指令。一般來說,人們習慣性約定將 正在執行的指令作為參考 點 稱之為當前第一條指令,因此 pc總是指向第三條指令。當 arm 狀態時,每條指令 位...