@Lerk

AVR inline asm. Нужна помощь или подробный мануал

Пытаюсь написать на inline asm'e аналог сишной строки:
PORTB = array[num];

Дизасм показывает, что компилятор это дело раскидывает так:
LDD R24,Z+0
OUT 0x05,R24

где Z+num — адрес элемента array[num], а 0x05 адрес PORTB.

Пытался вкурить это, но ничего не вышло.
Прошу помощи :)
  • Вопрос задан
  • 3631 просмотр
Пригласить эксперта
Ответы на вопрос 1
А зачем? Вы знаете, как это написать эффективнее?

Вы привели не весь код, в который была откомпилирована приведенная C строка, там еще есть загрузка адреса массива в регистр Z. Это два 8-ми битных регистра. Если не ошибаюсь, то r30 и r31.

Встроенный ассемблер можно писать как
asm(
«LDD R24,Z+0\n»
«OUT 0x05,R24\n»
);
Будет вставлен в выходной файл как есть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы