Inline Assembler for Thumb2 architectures¶
The inline assembler supports a subset of the ARM Thumb-2 instruction set described here. The syntax tries to be as close as possible to that defined in the above ARM manual, converted to Python function calls.
Instructions operate on 32 bit signed integer data except when stated otherwise. Most supported instructions
operate on registers
R0-R7 only: when
R8-R15 are supported this is stated. Registers
R8-R12 must be
restored to their initial value before return from a function. Registers
R13-R15 constitute the Link Register,
Stack Pointer and Program Counter respectively.
Where possible the behavior of each instruction is described in Python, for example
- add(Rd, Rn, Rm)
Rd = Rn + Rm
This enables the effect of instructions to be demonstrated in Python. In certain case this is impossible because Python doesn’t support concepts such as indirection. The pseudocode employed in such cases is described on the relevant page.
The following sections detail the subset of the ARM Thumb-2 instruction set supported by MicroPython.
- 1. Register move instructions
- 2. Load register from memory
- 3. Store register to memory
- 4. Logical & Bitwise instructions
- 5. Arithmetic instructions
- 6. Comparison instructions
- 7. Branch instructions
- 8. Stack push and pop
- 9. Miscellaneous instructions
- 10. Floating Point instructions
- 11. Assembler Directives
These sections provide further code examples and hints on the use of the assembler.