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

1 66 Часть 11. Программирование микроконтроллеров АVR на ассемблере перейти. Вопрос только, откуда здесь берется собственно условие? Для этого обе указанные команды ветвления обязательно употребляют в паре с одной из команд, устанавливающих флаг нуля z в регистре состояния SREG. Обычно для этой цели используют команды: ер (от compare, сравнить), которая сравнивает регистры, или cpi (сравнить с непосредственным значением). Для по­ нимания того, что именно при этом происходит, нужно учесть, что указанные команды по сути вычитают второй операнд из первого, отличаясь от команд suЬ или suЬi только тем, что результат теряется, операнды остаются теми же, а меня­ ются только значения соответствующих флагов регистра SREG, из которых нас интересуют в первую очередь флаг нуля z, отрицательного значения N и переноса с. Указанные флаги устанавливаются не только в результате сравнения, но и при вы­ полнении операций с битами или арифметических операций, когда значение ре­ зультата, соответственно, становится нулевым, отрицательным или превышает диапазон 8-битового числа (255 ) . Что означают флаги регистра SREG в целом, можно посмотреть в табл . 7 . 1 , где относящиеся к операциям сравнения, а также к арифме­ тическим операциям, флаги выделены светлым фоном. Таблица 7. 1 . Биты регистра состояния· SREG Наименование Описание 5 н Флаг половинного Устанавливается в 1, если произошел перенос из переноса младшей половины байта (т. е. из третьего разряда в четвертый) или заем из старшей половины байта при выполнении некоторых арифметических опера- ций 4 s Флаг знака Равен результату операции «Исключающее ИЛИ» (XOR) между флагами N и v . Соответственно, этот флаг устанавливается в 1, если результат выполне- ния арифметической операции меньше нуля з v Флаг переполнения Устанавливается в 1 при переполнении разрядной дополнительного сетки знакового результата . Используется при кода работе со знаковыми числами ( представленными в дополнительном коде) 2 N Флаг отрицательного Устанавливается в 1, если старший (седьмой) раз- значения ряд результата операции равен единице. В против- нам случае флаг равен о

RkJQdWJsaXNoZXIy MTExODQxMg==