Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2149440
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: LINUX

2012-07-05 11:38:12

1. stmfd 
     st --> store
     m --> multiple
     f --> full
     d --> decrease
指令本身很好理解,但是后面有个“!”,实在是不明白这个东东。
datasheet上说: {!} If present requests write-back(W=1),otherwise W=0.
这TMD是什么意思?里面一个不认识的单词也没有,但是就是不明白。莫非这句话是英语过级考试中的变态老头老太太写出来的?

2.测试一下

点击(此处)折叠或打开

  1. mov r1, #0x11
  2. mov r2, #0x22
  3. mov r3, #0x33
  4. ldr r13, =0xFF30
  5. stmfd r13!, {r1-r3}
  6. stmfd r13, {r1-r3}
  7. stmfd r13!, {r1-r3}
   2.1 初始化好栈之后,r13 与 memory 如下图所示,r13初始化为0xFF30

2.2 执行完stmfd r13!,{r1-r3}之后,r13 与 memory 如下图所示,可以看出r13向下移动了3*4=0x0C,现在r13为0xFF30-0x0C=0xFF24,同时0xFF30-0xFF24有变化,即压栈。
2.3 执行完stmfd r13,{r1-r3}之后,r13 与 memory 如下图所示,可以看出r13没有变化,还是0xFF24,同时0xFF24-0xFF18有变化,即压栈。


2.4 执行完stmfd r13!,{r1-r3}之后,r13 与 memory 如下图所示,可以看出r13向下移动了3*4=0x0C,现在r13为0xFF24-0x0C=0xFF18,同时0xFF24-0xFF18没有变化,说明栈被覆盖。

2.5 结论
    stmfd 后面加上!:当压栈之后r13移动到相应的位置
    stmfd 后面不加!: 当压栈之后r13不动

阅读(5715) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~