zzgezi的个人空间 https://bbs.21ic.com/?712331 [收藏] [复制] [RSS]

日志

转:一步步学嵌入式操作系统笔记4----stmfd中的!叹号

已有 255 次阅读2016-5-23 16:14 |系统分类:ARM

 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不动


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)