Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
200 Часть 11. Программирование микроконтроллеров АVR на ассемблере . macro Add32 2 4 add @ 3 , @ 6 ;младшие разряды adc @ 2 , @ 5 ; байтl + С adc @ 1 , @ 4 ; байт2 + С adc @ 0 , 0 ; С -> старший разряд . endmacro Соответственно, вызов такого макроса может, например, выглядеть, так: Add32_2 4 r1 6 , r17 , r1 8 , r l 9 , rl , r2 , r3 где в регист Р ах r l б , rl 7 , rl B , r1 9 по-прежнему находятся байты первого слагаемого (старший в rl б, младший в r 1 9 ) , в rl , r2 , rЗ - байты второго (старший в rl, млад ший в rз ) , а результат будет записан, как и ранее, в r l б , rl 7 , rl B , r1 9 . У множение многоразрядных чисел Несколько сложнее с умножением и, особенно, делением. Ассемблерный текст универсальных (т. е. пригодных для всех моделей контроллеров) процедур умно жения можно найти в Appl ication note АVR200 (на новом сайте Microchip эта «апп нота» переименована в AN_093 6), представленной в виде АSМ-файла («аппноту» AVR200 в аsm-виде можно найти в архиве по адресу, который указан во введении. Учтите, что в архивном варианте некоторые алгоритмы подправлены в сравнении с оригинальным текстом). ЗАМЕТКИ НА ПОЛЯХ На старом сайте atmel .com найти что-то в ворохе различных Appl ication notes было сложно , но там они, по крайней мере, лежали по порядку номеров. В Microch ip, мало того, что сочли нужным переименовать «аппноты» (сохранив , правда, старое название в подзаголовке) , но и разместили их внавал без особой системы, так что нельзя даже отфильтровать «аппноты» , относящиеся к AVR8 , от остальных разновидностей МК. Если вы доберетесь до полного списка «аппнот» (что получается не с первого раза: Главная страница microch ip.com --+ Products --+ Resources --+ Арр Notes) , то единствен ная возможность там что-то найти - набрать в строке поиска или известный номер (AVR200) , или характерное ключевое слово {multiply в данном случае) . Для больших величин мы будем пользоваться своими процедурами. На практике, как мы говорили ранее, 32-разрядное число (максимально 4 294 967 296, т. е. более девяти десятичных разрядов) с точки зрения точности в большинстве случаев из быточно. Если мы ограничимся 24 разрядами результата, то нам придется пожерт вовать частью диапазона исходных чисел так, чтобы сумма двоичных разрядов со множителей не превышала 24. Например, можно перемножать два 1 2-разрядных числа (в пределах 0-4095 каждое) или 1 0-разрядное (скажем, результат измерения АЦП) на 1 4-разрядный коэффициент (до 1 6 3 83) . Так как при умножении точность не теряется, то этого оказывается более чем достаточно, чтобы обработать боль шинство практических величин.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==