Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 7. Система команд АVR 1 75 L] ori r l б , оьо о о о 1 0 1 0 - установит в регистре rl б биты 1 и з в единичное состоя ние, не трогая остальных; L] andi r l б , оы1 1 1 0 1 0 1 - сбросит в регистре r l б биты 1 и з в нулевое состояние, не трогая остальных. Операцию eor (Исключающее ИЛИ) можно назвать «элементом несовпадения» - она позволяет зафиксировать те биты, которые совпадают и не совпадают в обоих операндах (совпадающие установятся в нули, а не совпадающие - в единицы). К сожалению, аналогичной операции с числом ( eori ) не существует, и мы в пред шествующей главе придумывали ей замену в виде макроса (см. листинг 6 . 8) . Если применить такой макрос совместно с маской, где на нужных местах стоят единицы, то можно инвертировать биты выборочно (а не полностью во всем байте, как это делает команда com ) . Так, команда: eori rl б , оы1 1 1 0 0 0 0 инвертирует биты старшей тетрады регистра rlб . Операция eor пригодна и для элементарного шифрования данных: примененная дважды к одному операнду (второй операнд, называемый ключом, при этом остает ся без изменений) она возвращает его в исходное состояние. Таким образом, зало жив неизвестный посторонним ключ в программу контроллера, можно зашифро вать данные, а в удаленном компьютере их тем же ключом расшифровать. В главе 9 мы рассмотрим способ генерации случайных чисел в МК, который в том числе годится и для формирования «правильных» ключей для подобных целей. Только не надейтесь, чт0 такой простейший способ убережет вас от серьезных шпионов : на стоящая криптография сложна, предполагает многоэтапную защиту данных и клю чи длиной порядка сотен и тысяч битов (а главное, соответствующую арифметику, которая умеет обращаться с числами такой длины). Кроме рассмотренных здесь стандартных логических операций, к этой группе команд часто относят также команды clr (очистить все биты), ser (установить все биты), упоминавшуюся ранее команду tst (проверка на отрицательное или нулевое значение) и очень полезную в двоично-десятичных операциях команду swap, кото рая меняет местами тетрады одного байта. К оманды сдвига и операци и с б итами Это также одна и з важнейших групп команд. Сначала рассмотрим подробно, в силу их важности и относительной сложности, команды установки отдельных битов. Причем команды, устанавливающие значения битов в регистрах общего назначения ( sbr и cbr ), иногда относят к группе арифметических операций, а команды, уста навливающие биты в регистрах ввода/вывода ( sЬi и сЬi ) - к рассматриваемой группе битовых операций. Впрочем, в некоторых пособиях их причисляют к одной группе, - операций с битами, что, конечно, логичней. Но почему такой разнобой, если они по сути делают одно и то же? М ны е ханизм работы этих команд существенно различается . Очевиднее всего устрое sЬi и сЬi : так, уже знакомая нам команда sЬi Portв , 7 установит в единичное состояние разряд номер 7 порта В (не трогая остальных) . Если этот разряд порта
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==