stmfd
st --> store
m --> multiple
f --> full
d --> decrease
指令本身很好理解,但是后面有个“!”,实在是不明白这个东东。
datasheet上说: {!} If present requests write-back(W=1),otherwise W=0.
这TMD是什么意思?里面一个不认识的单词也没有,但是就是不明白。莫非这句话是英语过级考试中的变态老头老太太写出来的?
2.测试一下
- mov r1, #0x11
- mov r2, #0x22
- mov r3, #0x33
- ldr r13, =0xFF30
- stmfd r13!, {r1-r3}
- stmfd r13, {r1-r3}
- 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没有变化,说明栈被覆盖。
stmfd 后面加上!:当压栈之后r13移动到相应的位置
stmfd 后面不加!: 当压栈之后r13不动