Встроенный ассемблер для архитектур Thumb2¶
Этот документ предполагает некоторое знакомство с программированием на языке ассемблера. Краткое описание набора инструкций см. в справочной карточке ARM Thumb-2 Instruction Set Quick Reference Card в разделе References ниже. Встроенный ассемблер поддерживает подмножество набора инструкций ARM Thumb-2, описанное здесь. Синтаксис старается быть как можно ближе к определённому ARM, преобразованному в вызовы функций Python.
Инструкции работают с 32-битными знаковыми целыми данными, за исключением случаев, где указано иное. Большинство поддерживаемых инструкций работают только с регистрами R0-R7: там, где поддерживаются R8-R15, это указано. Регистры R8-R12 должны быть восстановлены до их исходного значения перед возвратом из функции. Регистры R13-R15 представляют собой регистр связи (Link Register), указатель стека (Stack Pointer) и счётчик команд (Program Counter) соответственно.
Соглашения документа¶
Где это возможно, поведение каждой инструкции описывается на Python, например
add(Rd, Rn, Rm)
Rd = Rn + Rm
Это позволяет продемонстрировать эффект инструкций на Python. В некоторых случаях это невозможно, поскольку Python не поддерживает такие концепции, как косвенная адресация. Псевдокод, применяемый в таких случаях, описан на соответствующей странице.
Категории инструкций¶
В следующих разделах подробно описывается подмножество набора инструкций ARM Thumb-2, поддерживаемое MicroPython.
- 1. Инструкции перемещения регистров
- 2. Загрузка регистра из памяти
- 3. Сохранение регистра в память
- 4. Логические и побитовые инструкции
- 5. Арифметические инструкции
- 6. Инструкции сравнения
- 7. Инструкции ветвления
- 8. Помещение в стек и извлечение из стека
- 9. Прочие инструкции
- 10. Инструкции с плавающей точкой
- 11. Директивы ассемблера
Примеры использования¶
Эти разделы содержат дополнительные примеры кода и подсказки по использованию ассемблера.