寄存器组(堆栈指针寄存器小解)

寄存器组

主堆栈指针(MSP):这是缺省的堆栈指针,它由 OS 内核、异常服务例程以及所有需要特权访问的
应用程序代码来使用。
进程堆栈指针(PSP):用于常规的应用程序代码(不处于异常服务例程中时)。
另外以下两点要注意:
大多数情况下的应用,只需使用指针 MSP,而 PSP 多用于 RTOS 中。
R13 的最低两位被硬线连接到 0,并且总是读出 0,这意味着堆栈总是 4 字节对齐的。
在这里插入图片描述

栈是向下伸长的

在这里插入图片描述

出入栈操作时候的SP寄存器

这里对入栈和出栈做个简单的介绍。PUSH 入栈操作:SP 先自减 4,再存入新的数值:
POP 出栈操作:先从 SP 指针处读出上一次被压入的值,再把 SP 指针自增 4。

例子

uint32_t a = 0; //全局初始化区, 可以被其他 c 文件 extern 引用
static uint32_t ss = 0; //静态变量,只允许在本文件使用
uint8_t *p1; //全局未初始化区
int main(void)
{
uint32_t b; //栈
uint8_t s[] = "abc"; //栈
uint8_t *p2; //栈
uint8_t *p3 = "123456"; //123456\0 在常量区,p3 在栈上。
static uint32_t c =0; //全局(静态)初始化区
p1 = (uint8_t *)malloc(10); //在堆区申请了 10 个字节空间
p2 = (uint8_t *)malloc(20); //在堆区申请了 20 个字节空间
strcpy(p1, "123456"); /* 123456 字符串(结束符号是 0(\0),总长度 7)放在常量区,
 编译器可能会将它与 p3 所指向的"123456"优化成一个地方 */
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值