The specified stack operations are only shortcuts for memory operations using sp in the address part. For instance.
PUSH {r3} POP {r3}
are aliases for
str r3, [sp, #-4]! ldr r3, [sp], #4
The first operation says "save the contents of r3 to [sp - #4] and reduce sp by 4". Last one "load r3 from [sp] and increment sp by 4".
Instead of {r3} you can use any other registers or registers (for example, {r1,r2,r3,lr} ). The sets of registers are indicated in the bitmask of the machine code, so you cannot influence the order of storage / loading of registers.
source share