Armv8-M指令集:内存访问相关指令解析
1. PUSH/POP指令
PUSH和POP指令是LDM和STM指令的特殊形式,用于栈操作。为了清晰起见,建议在栈操作中使用PUSH和POP助记符。
-
地址生成与栈指针选择 :PUSH和POP指令使用当前选定的栈指针(SP)进行地址生成,并且每次执行PUSH和POP操作时都会更新SP。栈指针的选择取决于以下几个因素:
- 如果实现了TrustZone,取决于处理器的安全状态。
- 处理器的当前模式(线程模式或处理模式)。
- CONTROL寄存器中第1位的值。
-
指令示例 :
PUSH {R0, R4-R7, R9} ; 将R0, R4, R5, R6, R7, R9压入栈
POP {R2, R3} ; 从栈中弹出R2和R3
通常,PUSH指令会有一个对应的POP指令,且寄存器列表相同,但这并非总是必要的。例如,当POP用于函数返回时:
PUSH {R4–R6, LR} ; 在子程序开始时保存R4到R6和LR(链接寄存器),LR包含返回地址
...
; 子程序中的处理
POP {R4-R6, PC} ; 从栈中弹出R4到R6和返回地址,返回地址直接存储在PC中,触发分支(子程序返回)
<
超级会员免费看
订阅专栏 解锁全文
2248

被折叠的 条评论
为什么被折叠?



