STMFD和LDMFD指令个人理解分析
2014-01-15 09:51
281 查看
LDM/STM指令主要用于现场保护,数据复制,参数传送等。
STMFD指令
STMFD Rn{!},{reglist}{^}
STMFD SP!,{R0-R7,LR}
对于这条指令伪代码的解释,网上是这么说的:
SP = SP - 9×4;
address = SP;
for i = 0 to 7
Memory[address] = Ri;
address = address + 4;
Memory[address] = LR;
经过我在keil4的多次调试,个人理解如下:
sp = address;
sp = sp - 4;
Memory[address] = LR;
for( i=7;i>0;i--)
{
sp = sp-4;
Memory[address] = Ri;
}
由于ARM堆栈结构是从高向低压栈的,此时SP即是栈顶。
这里的sp = sp-4,是因为处理器是32位的ARM,所以每次压一次栈SP就会移动4个字节(32位)。
假设此时SP地址为: 0x40000460,由前面解释伪代码可得下图(蓝色填充区为地址):
蓝色标注的SP为执行指令前的SP地址,红色标注的SP是执行指令后的SP地址,由此看出STMFD指令是向下压栈的。
LDMFD 指令
LDMFD Rn{!},{reglist}{^}
这条指令的意思是以Rn为基址(起始地址),取值写入寄存器列表。
LDMFD SP!,{R0-R7,PC}^
对于这条指令,网上的伪代码解释是:
address = SP;
for i = 0 to 7
Ri = Memory[address ,4]
address = address + 4;
SP = address;
个人理解与之相同。。
假设此时SP地址为: 0x4000043C,由前面解释伪代码可得下图(蓝色填充区为地址):
蓝色标注的SP为执行指令前的SP地址,红色标注的SP是执行指令后的SP地址。
STMFD指令
STMFD Rn{!},{reglist}{^}
STMFD SP!,{R0-R7,LR}
对于这条指令伪代码的解释,网上是这么说的:
SP = SP - 9×4;
address = SP;
for i = 0 to 7
Memory[address] = Ri;
address = address + 4;
Memory[address] = LR;
经过我在keil4的多次调试,个人理解如下:
sp = address;
sp = sp - 4;
Memory[address] = LR;
for( i=7;i>0;i--)
{
sp = sp-4;
Memory[address] = Ri;
}
由于ARM堆栈结构是从高向低压栈的,此时SP即是栈顶。
这里的sp = sp-4,是因为处理器是32位的ARM,所以每次压一次栈SP就会移动4个字节(32位)。
假设此时SP地址为: 0x40000460,由前面解释伪代码可得下图(蓝色填充区为地址):
蓝色标注的SP为执行指令前的SP地址,红色标注的SP是执行指令后的SP地址,由此看出STMFD指令是向下压栈的。
LDMFD 指令
LDMFD Rn{!},{reglist}{^}
这条指令的意思是以Rn为基址(起始地址),取值写入寄存器列表。
LDMFD SP!,{R0-R7,PC}^
对于这条指令,网上的伪代码解释是:
address = SP;
for i = 0 to 7
Ri = Memory[address ,4]
address = address + 4;
SP = address;
个人理解与之相同。。
假设此时SP地址为: 0x4000043C,由前面解释伪代码可得下图(蓝色填充区为地址):
蓝色标注的SP为执行指令前的SP地址,红色标注的SP是执行指令后的SP地址。
相关文章推荐
- STMFD和LDMFD指令个人理解分析
- STMFD和LDMFD指令个人理解分析
- STMFD和LDMFD指令个人理解分析
- STMFD和LDMFD指令个人理解分析
- (转)STMFD和LDMFD指令个人理解分析
- STMFD和LDMFD指令个人理解分析
- STMFD和LDMFD指令个人理解分析
- 指令STMFD和LDMFD分析
- 指令STMFD和LDMFD分析
- STMFD和LDMFD指令分析
- STMFD和LDMFD指令分析
- 通过分析一个C程序的汇编指令执行过程,理解计算机的工作。
- ARM汇编指令-STMFD和LDMFD
- ARM指令STMFD和LDMFD
- 80x86系统寄存器以及系统指令(个人理解)
- 我的mqtt协议和emqttd开源项目个人理解(3) - 客户端publish消息QoS==0的源码分析
- 汇编与c之间内容传递的分析理解及ldr指令与.word伪指令的简单介绍
- 仅个人兴趣,自己通过搜索他人的成果,结合自己的理解,来分析discuz的代码。
- DAO层、ENTITY层、SERVICE层、CONTROLLER层个人的理解分析