I've got a situation where I'm doing something not quite AAPCS compliant (SVC call handler - where R0-3, R12 and a few others are automatically saved to the stack by the CPU) Maybe I'm misremembering, but I recall only the MOV instruction working with R12. (ie. add / adds would give an assembler error) edit: When I read the manual page for ADD(S), it doesn't directly say. But it looks like MOV uses 4 bits for the register, and ADD uses 3 bits. I suppose that's my answer Very hard to use R12 for general purpose stuff