In my dabbling with ARM assembly so far (my most recent achievement was completing my simple sorting algorithm – last update here), I had picked up that there’s 16 general purpose 32bit registers for holding either values or addresses, R0 through to R15, but paying a closer look I realized some of these have specific purposes, and or uses by convention.
R0: function argument or result
R1-R3: function args
R4-12: general purpose
R13: SP – this is the stack pointer
R14: LR – Link Register – it’s holds the address to branch back to when you call BR LR
R15: PC – the Program Counter – address pointing to the current instruction being processed