When pushing context to the stack, the hardware saves eight 32-bits words, comprising xPSR, Return Address, LR (R14), R12, R3, R2, R1 and R0.
Stack frame size = 8 x 32-bits = 32 bytes = 0x20 bytes
SP_main = SP_main - frame size;
frameptr = SP_main;
MemA[frameptr,4] = R[0];
MemA[frameptr+0x4,4] = R[1];
MemA[frameptr+0x8,4] = R[2];
MemA[frameptr+0xC,4] = R[3];
MemA[frameptr+0x10,4] = R[12];
MemA[frameptr+0x14,4] = LR;
MemA[frameptr+0x18,4] = ReturnAddress; /* Address of this instruction or next instruction depending on exception type and attribute */
MemA[frameptr+0x1C,4] = (XPSR<31:10>:frameptralign:XPSR<8:0>);
* Reference : "ARMv7-M Architecture Reference Manual B1.5.6 Exception entry behavior"
2020년 7월 18일 토요일
ARMv7-M (Cortex-M3, M7) CPU registers
- General registers : R0 ~ R12
- Stack Pointer register : R13 (SP, banked to SP_main(MSP), SP_process(PSP))
- Link Register : R14 (LR)
- Program Counter : R15 (PC)
- (Program) Status registers (flags, execution state, exception number) : xPSR
- Mask registers (priority of exception and interrupt)
- Control register (CONTROL, current stack mode, current Thread mode privilege level)
* Reference : "ARMv7-M Architecture Reference Manual B1.4 Registers"
피드 구독하기:
글 (Atom)