1. 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没有变化,说明栈被覆盖。
2.5 结论
stmfd 后面加上!:当压栈之后r13移动到相应的位置
阅读(5729) | 评论(0) | 转发(0) |