arm堆棧操作
以前困惑的就是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,這樣這兩個操作就可以成功配對
評論