ARM中SP、LR、PC三个寄存器介绍

在这里插入图片描述

堆栈指针R13(SP)

MSP堆栈指针
PSP堆栈指针

连接寄存器R14(LR)

1》.函数调用

当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。
使用BL或BLX时,跳转指令自动把返回地址放入r14中;子程序通过把r14复制到PC来实现返回,通常用下列指令之一:
MOV PC, LR
BX LR

通常子程序这样写,保证了子程序中还可以调用子程序。
                     stmfd sp!, {lr}
                     ……
                     ldmfd sp!, {pc}

2》.中断

异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要返回的地址。

1、中断到来

会依次保存寄存器中的值,由硬件自动完成
在这里插入图片描述

2、调用中断处理函数

3、中断返回

在这里插入图片描述
查看LR的值,如果LR=0xffff fff1
????
查看LR的值,如果LR=0xffff fff9
说明进入中断之前,使用的是MSP堆栈,因为进入中断之前会依次保存寄存器的值,所有可以通过MSP指针找到R0,R1,R2,R3,R12,LR,返回地址,PSR
查看LR的值,如果LR=0xffff fffD
说明进入中断之前,使用的是PSP堆栈,因为进入中断之前会依次保存寄存器的值,所有可以通过PSP指针找到R0,R1,R2,R3,R12,LR,返回地址,PSR

程序计数器R15(PC)

猜你喜欢

转载自blog.csdn.net/m0_37187962/article/details/123345689