ARM LR寄存器

MOV PC,LR

看下面這個ARM彙編吧

BL NEXT ;跳轉到子程序

......... ;NEXT處執行

NEXT

..........

MOV PC,LR ;從子程序返回

這裏的BL是跳轉的意思,LR(R14)保存了返回地址

PC(R15)是當前地址,把LR給PC就是從子程序返回

這裏有一下總結

首先

1.SP(R13) LR(R14)PC(R15)

2.lr(r14)的作用問題,這個lr一般來說有兩個作用:
1》.當使用bl或者blx跳轉到子過程的時候,r14保存了返回地址,可以在調用過程結尾恢復。
2》.異常中斷髮生時,這個異常模式特定的物理R14被設置成該異常模式將要返回的地址。

另外注意pc,在調試的時候顯示的是當前指令地址,而用mov lr,pc的時候lr保存的是此指令向後數兩條指令的地址,大家可以試一下用mov pc,pc,結果得到的是跳轉兩條指令,這個原因是由於arm的流水線造成的,預取兩條指令的結果.

3.》我以前看書不懂的地方

子程序返回的三種方法

現在總結如下

1.MOV PC,LR

2.BL LR

3.在子程序入口處使用以下指令將R14存入堆棧

STMFD SP!,{<Regs>,LR}

對應的,使用以下指令可以完成子程序的返回

LDMFD SP!, {<Regs>,LR}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章