Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1481578
  • 博文数量: 204
  • 博客积分: 4013
  • 博客等级: 中校
  • 技术积分: 4030
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-29 06:34
文章分类

全部博文(204)

文章存档

2012年(204)

分类: 嵌入式

2012-02-15 02:11:56

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;
注意:ARM规定,sp始终是指向栈顶位置的,STM指令把寄存器列表中索引最小的寄存器存在最低地址,所以R0在最低地址,向上依次是R1,R2,...R7,LR。完成后SP指向保存R0的地址。
详解:对于大多数的设计来说都是把栈底设置在高地址栈顶设置在低地址,即是说上面所说的首先要sp=sp-9×4,这里理解了之后就好理解了,那么执行这条指令后,栈中的数据顺序从栈底到栈顶为lr ,r7,r6,r5,r4,r3,r2,r1,r0,此时sp-->r0,即栈顶,这和堆栈的定义没有冲突,如果sp指向的是lr的话栈就没有用了哦,其实这里stmfd有两种方法处理的,第一种先计算总共压入的数据个数,直接一次更改指针sp=sp-4*(number)并从低地址向高地址存入数据,第二种就是每压入一次就把sp=sp-1*4,同时一个一个的把数据从高地址向低地址压入。
阅读(13362) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~