ARM内核——寄存器功能讲解

根据“ARM-thumb 过程调用标准”:
在这里插入图片描述

通用寄存器

通用寄存器包含R0到R12,13个寄存器
R0-R3 用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。而当参数多于4个时,会将多出的参数压入栈中进行传递(其实在函数调用过程中也会把r0,r1,r2,r3传递的参数压入栈)。
R4-R11 被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。
R12 是内部调用暂时寄存器 ip。它在过程链接胶合代码(例如,交互操作胶合代码)中用于此角色。在过程调用之间,可以将它用于任何用途。被调用函数在返回之前不必恢复 r12。

R13 R13 是堆栈指针。在 CM3 处理器内核中共有两个堆栈指针.

  • 主堆栈指针(MSP),或写作 SP_main。这是缺省的堆栈指针,它由 OS 内核、异常服务 例程以及所有需要特权访问的应用程序代码来使用
  • 进程堆栈指针(PSP),或写作 SP_process。用于常规的应用程序代码(不处于异常服用例程中时)
    R14 是链接寄存器 lr。如果您保存了返回地址,则可以在调用之间将 r14 用于其它用途,程序返回时要恢复
    R15 是程序计数器 PC。它不能用于任何其它用途。因为 CM3 内部使用了指令流水线,读 PC 时返回的值是当前指令的地址+4。
    注意:在中断程序中,所有的寄存器都必须保护,编译器会自动保护R4~R11,Cortex‐M3 在进入异常服务例程时,自动压栈了 R0‐R3, R12, LR, PSR 和 PC,并且在返回时自动弹出它们。

特殊功能寄存器

Cortex‐M3 中的特殊功能寄存器包括:

  • 程序状态寄存器组(PSRs 或曰 xPSR)
  • 中断屏蔽寄存器组(PRIMASK, FAULTMASK,以及 BASEPRI),这三个寄存器用于控制异常的使能和除能
  • 控制寄存器(CONTROL)
    它们只能被专用的 MSR 和 MRS 指令访问,而且它们也没有存储器地址,只能通过寄存器名字进行操作。
    程序状态寄存器组
    在这里插入图片描述

中断屏蔽寄存器组
在这里插入图片描述
控制寄存器
在这里插入图片描述
CONTROL[0]和CONTROL[1]寄存器都只允许在特权级模式下进行修改,一旦进入到用户级模式,则只能通过一个svc指令触发软中断,才能修改控制寄存器并回到特权级模式,

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值