通过stm32汇编来看C语言数组内存分配

文章详细介绍了在ARM架构下,一个名为u8test的数组如何从flash的ROcode区被加载到栈中。通过SUB指令分配栈空间,使用LDR和ADR等指令按高低地址顺序存储数组元素,最终在栈地址0x200013b8处存放了数组的元素值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如下图:
一个u8 test的数组
在这里插入图片描述
从上述汇编语言可以看到:

数组中的元素是字面量,编译后就保存在0x080010f0 flash的RO code中
运行到该处的程序时,在栈中开辟空间(sub sp指令)将字面量保存到栈中
先给栈中高地址分配数组高位元素,再给栈中低地址分配数组低位元素

涉及到的指令详解如下:
SUB指令
在这里插入图片描述
第七章 ARM 反汇编基础(四)(ARM 汇编语言)

在这里插入图片描述
ARM LDR和ADR指令
LDM指令
在这里插入图片描述
ARM指令ldr、str、stm、ldm理解

分配完后可以看到在栈地址0x200013b8处看到该数组存放的元素值
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值