ARM入棧的規則?
ARM寄存器入棧規則
主程序運行:
r0-r12通用寄存器,
r13(msp主/psp),
r14(lr),
r15(pc指向下一個待取指令地址[pc+4])
產生中斷/異常:
push操作
growth 1 向下增長
addrhigh:0x2100
xpsr. xpsr. xpsr. xpsr. xpsr. xpsr. xpsr. xpsr …
pc. pc. pc. pc. pc. pc. pc
lr. lr. lr. lr. lr. lr
r12. r12. r12. r12. r12
r3. r3. r3. r3
r2. r2. r2
r1. r1
r0
r11————r4
addrlow:0x2000
stm32棧屬于滿遞減棧
滿代表指向被最新被push的棧元素而不是空
遞減代表棧內元素地址更新從高到低遞減
push之前棧空,msp棧指針指向棧地址+1(即空的地方,當有一個元素入棧之后,msp立刻指向這個元素)。
棧頂指針stk從xpsr變為自動push的r0,最終變為手動push的r4。