|
向各位大哥请教对加载/存储指令 LDM 和 STM
[复制链接]
请教:
LDMIA R0!,{R3-R9} ;加载 R0 指向的地址上的多字节数据,保存到 R3-R9 中,R0 值更新
STMIA R1!,{R3-R9} ;将 R3-R9 的值存储到 R1 指向的地址上,R1 值更新
STMFD SP!,{R0-R7,LR} ;现场保护,将 R0-R7,LR 入栈
LDMFD SP!,{R0-R7,PC}^ ;恢复现场,异常处理返回
这里有几个问题向各位大哥请教:
问题一:
LDMIA R0!,{R3-R9} ;加载 R0 指向的地址上的多字节数据,保存到 R3-R9 中,R0 值更新
小问题1:
假设 R0 的初值是 0x11,R0 又不是指针,怎么能说 R0 指向的地址呢?
还有又怎么知道 R0 指向的地址值是多少呢?
小问题2:
假设 R0 的初值是 0x11 ,是不是给 R3-R9 中的每个寄存器都赋值 0x11 啊?
小问题3:
假设 R0 的初值是 0x11 ,那么 R0 值更新后,R0 值是多少啊?
问题二:
STMFD SP!,{R0-R7,LR} ;现场保护,将 R0-R7,LR 入栈
小问题1:
这句话的意思能不能理解为:将 R0-R7,LR 的数据存储到 SP 指向的地址上?
小问题2:SP 的值要不要更新,如果会更新的话,那么和原来的值相比,是
增加多少?或者减少多少?
小问题3:
现场保护 为什么要把 LR 也入栈呢?
问题三:
LDMFD SP!,{R0-R7,PC}^ ;恢复现场,异常处理返回
小问题1:
PC 得到的值,是 STMFD SP!,{R0-R7,LR} 的
LR 的值吗?
SP 的值要不要更新,如果会更新的话,那么和原来的值相比,是
增加多少?或者减少多少?
|
|