【ARM汇编】stmfd sp!, {r0-r3, lr}

本文详细探讨了ARM汇编指令stmfd sp!, {r0-r3, lr},该指令属于堆栈寻址方式。文章通过图解分析了栈指针SP在执行指令前后的变化,并介绍了stmfd指令的两种常见处理方法,强调了栈底高地址、栈顶低地址的一般设计原则。" 108544036,8682509,人工智能在药物研发中的应用,"['人工智能', '机器学习', '大数据', '编程语言', '生物医学']

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

stmfd   sp!, {r0-r3, lr}         【属于8中寻址方式中的“堆栈寻址”】

上面这句ARM汇编指令的伪代码如下

//SP指针地址变化过程
SP = SP - 4×4;        //4个寄存器,每个4个字节,该语句得到运算后的SP地址
address = SP;           //将运算后的地址赋给临时地址变量address

//寄存器赋值给内存地址的赋值过程
for i = 0 to 2
Memory[address] = ri;   //将r0、r1、r2赋给内存有小到大的地址 
address  = address + 4; //地址添加4后,将lr赋给最高的地址
Memory[address] = lr;   

SP栈指针指向的变化

                                                                             图 1

图1中,左图是执行指令stmfd sp!, {r0-r3, lr}前,右图是执行stmfd sp!, {r0-r3, lr}指令之后,观察SP地址变化情况。

【注意】1、ARM规定,sp始终是指向栈顶位置的,stm指令把寄存器列表中索引最小

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值