AVR. Assembler. Алгоритмы.

Деление на 10.
В AVR есть команда перемножения, но нет деления. Реализовать деление на 10 можно путем комбинации умножения и сдвига.
Умножение: MUL Rd,Rr.
Результат (16-разрядное число) сохраняется в регистрах R0 (младший байт) и R1 (старший байт).
Деление на 10:
Result = HI(SRC * 0xCD) >> 3.
Resut - результат,
SRC - исходное число.
Т.е.:
LDI R16,0xAB
LDI R17,0xCD
MUL R16,R17
MOV R16,R1
LSR R16
LSR R16
LSR R16

Результат - в R16.

Деление на 5 и на 20 делается таким же образом, при этом оперируя сдвигом в конце алгоритма, т.е. для деления на 20 - добавить еще LSR R16, для деления на 5 - удалить 1 сдвиг.

Комментарии

Популярные сообщения из этого блога

STM32. Часть 4. Задержки, таймеры, системный таймер SysTick

STM32. Создание проекта в Keil.