ARM中SP,LR,PC使用
看下面這個(gè)ARM匯編吧
BL NEXT ;跳轉(zhuǎn)到子程序
......... ;NEXT處執(zhí)行
NEXT
..........
MOV PC,LR ;從子程序返回
這里的BL是跳轉(zhuǎn)的意思,LR(R14)保存了返回地址
PC(R15)是當(dāng)前地址,把LR給PC就是從子程序返回
這里有一下總結(jié)
首先
1.SP(R13) LR(R14)PC(R15)
2.lr(r14)的作用問(wèn)題,這個(gè)lr一般來(lái)說(shuō)有兩個(gè)作用:
1》.當(dāng)使用bl或者blx跳轉(zhuǎn)到子過(guò)程的時(shí)候,r14保存了返回地址,可以在調(diào)用過(guò)程結(jié)尾恢復(fù)。
2》.異常中斷發(fā)生時(shí),這個(gè)異常模式特定的物理R14被設(shè)置成該異常模式將要返回的地址。
另外注意pc,在調(diào)試的時(shí)候顯示的是當(dāng)前指令地址,而用mov lr,pc的時(shí)候lr保存的是此指令向后數(shù)兩條指令的地址,大家可以試一下用mov pc,pc,結(jié)果得到的是跳轉(zhuǎn)兩條指令,這個(gè)原因是由于arm的流水線造成的,預(yù)取兩條指令的結(jié)果.
3.》我以前看書不懂的地方
子程序返回的三種方法
現(xiàn)在總結(jié)如下
1.MOV PC,LR
2.BL LR
3.在子程序入口處使用以下指令將R14存入堆棧
STMFD SP!,{,LR}
對(duì)應(yīng)的,使用以下指令可以完成子程序的返回
LDMFD SP!, {,LR}
評(píng)論