arm仓库的安排结构是 满栈降 的方法,满栈即sp是要停留在最终一个进栈元素,降:便是仓库的增加方向是从高地址向低地址开展。
曾经困惑的便是STMFD 指令 关于操作数 是依照什么次序压栈的
比方:STMFD sp!{R0-R5,LR} 进栈次序是:
高地址(1方法)
LR
R5
R4
“““`
R0
低地址
仍是:
高地址(2方法)
R0
R1
“`
R5
LR <-sp
低地址
现在经过下表,能够轻松的处理这个问题:
寻址方法 | 阐明 | pop | =LDM | push | =STM |
FA | 递加满 | LDMFA | LDMDA | STMFA | STMIB |
FD | 递减满 | LDMFD | LDMIA | STMFD | STMDB |
EA | 递加空 | LDMEA | LDMDB | STMEA | STMIA |
ED | 递减空 | LDMED | LDMIB | STMED | STMDA |
依照图表,可知 STMFD对应的是STMDB,依据arm指令手册,可知STMDB入栈次序是(1方法)
而LDMFD对应的是LDMIA,这样这两个操作就能够成功配对