When a function calls a subroutine, it places the return address in the link register lr.
The __asm keyword can incorporate inline assembly code into a function using the GNU inline assembly syntax.
Registers r4 through r11 must be preserved by a subroutine. r0-r3, and r12, are corruptible by a subroutine, with parameters being passed in r0-r3.