# Inline assembler for Thumb2 architectures

This document assumes some familiarity with assembly language programming. For a detailed description of the instruction set consult the Architecture Reference Manual detailed below. 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 where stated otherwise. Most supported instructions operate on registers `R0-R7` only: where `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.

## Document conventions

Where possible the behaviour 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.

## Instruction categories

The following sections details 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

## Usage examples

These sections provide further code examples and hints on the use of the assembler.

- 1. Hints and tips

## References

- Wiki hints and tips

- uPy Inline Assembler source-code, emitinlinethumb.c

- ARM Thumb2 Instruction Set Quick Reference Card

- RM0090 Reference Manual

- ARM v7-M Architecture Reference Manual (Available on the ARM site after a simple registration procedure. Also available on academic sites but beware of out of date versions.)

Language and External Links

Language
  English
  中文

External links
  openmv.io
  forums.openmv.io
  github.com/openmv/openmv
  micropython.org
  forum.micropython.org
  github.com/micropython/micropython