Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 7. Система команд АVR 1 67 № п/п 1 о Таблица 7. 1 (окончание) Обозна- Наименование Описание чение z Флаг нуля Устанавливается в 1 , если результат выполнения операции равен нулю с Флаг переноса Устанавливается в 1, если в результате выполнения операции произошел выход за границы байта ПОДРОБНОСТИ Для всех флагов регистра SREG есть особые пары команд, устанавливающие или сбра­ сывающие их. С одной такой командой мы уже знакомы - это установка флага r командой sei , разрешающей прерывания, к которой есть парная команда сброса этого флага cli , запрещающая прерывания . Команды для остальных флагов формируются по тому же мнемоническому шаблону: например, установка флага переноса с осуще­ ствляется командой sec, а сброс - командой clc, установка и сброс флага т - коман­ дами set и clt. Все эти команды - лишь синонимы пары команд bset, s и bclr , s (где s - номер бита в регистре SREG) , позволяющих установить или сбросить любой флаг единообразным способом . Специально для сравнения многобайтовых чисел существует команда ере, учиты­ вающая флаг переноса с (сравните с командами adc и sbc в разд. «Команды ариф­ метических операций» далее в этой главе). Команда эта, как и команда ер, предна­ значена для сравнения с регистром, а не с константой, хотя cpi также меняет флаг переноса и может использоваться в паре с командой ере. Листинг 7 . 1 иллюстрирует как, к примеру, можно проверить пару переменных AddrH : AddrL, обозначающих адреса в некоей внешней памяти, на превышение числа 32 767 = $ 7 FFF (что может потребоваться для проверки выхода за диапазон допустимых адресов, если объем памяти ограничен величиной 32 кбайта) . cpi AddrL, OxFF ldi temp , Ox7 F ере AddrH , temp brlo continue ; если меньше , на продолжение clr AddrH ; иначе начинаем отсчет clr AddrL ; с нулевого адреса continue : Попробуем посмотреть, как команды перехода работают на практике для организа­ ции циклов. Например, простейший цикл, в котором переменная temp последова­ тельно принимает значения от 1 до 1 0, показан в листинге 7 . 2 .

RkJQdWJsaXNoZXIy MTExODQxMg==