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

Глава б. Основы программирования МКАVR 123 тии клавиши <Enter>. Редакторы их не показывают, но нумеруют строки именно по наличию этих символов), игнорируется, поэтому комментарий может быть и на русском. Если нужно продлить комментарий на следующую строку, то эту строку нужно опять начинать со знака «точка с запятой». В avrasm2 допускается С-подобная нотация, когда примечание вместо точки с запятой отделяется двумя прямыми косыми чертами (прямыми слешами): / /, или выделение целого блока примечания вот такими скобками : / * здесь многострочное примечание * / . Подсветка подобных комментариев в ASM Editor серым фоном отчасти уже введена в экземп­ ляре файла подсветки ASM Editor, который вы найдете в архиве, доступном по уже упомянутому в главе 5 адресу http://revich.lib.ru/A V R/AVRshk.zip, а для скачанно­ го с оригинального сайта ее придется настраивать отдельно (через меню Highlight 1 Start-Stop keys .•. ) . Числа и выражения В некоторые команды можно включать выражения и числовые значения . Числа по умолчанию считаются десятичными, за uс1<J1ючением чисел с ведущим нулем, кото­ рые, если не имеют дополнительных признаков, воспринимаются как восьмерич­ ные. Шестнадцатеричные числа можно записывать двумя способами: как в языке С ( охОА ) и как в языке Pascal или в ассемблере для контроллеров Motorola ( $ 0А ) . Мы, как правило, будем употреблять последнюю форму записи, как более короткую. «Интеловская» форма записи (OAh) не допускается. Двоичные числа записывают по аналогии с шестнадцатеричными в языке С : оьо о о о 1 0 1 0 . В команды можно включать алгебраические и логические выражения - например : ldi rЗ О , cl+c2 (где cl и с2 - константы) . В выражениях допустимы все арифмети­ ческие и логические операции, включая даже операции сравнения (за их полным перечнем я отсылаю к фирменному описанию ассемблера). Однако действия в вы­ ражениях могут, естественно, производиться только над константами, а не над содержимым регистров, которое при компиляции неизвестно. Хитрый нюанс тут заключается в том, что адреса в программе - тоже константы, поэтому допустима такая, например, конструкция : rjmp metka+l . По этой команде произойдет переход не на команду, помеченную меткой metka, а на следующую за ней. Впрочем, увле­ каться этим не стоит, т. к. дейкстровская1 «лапша» условных и безусловных пере­ ходов и без того затрудняет чтение ассемблерных программ . Укажем на одну операцию с участием выражений, которой мы часто будем пользо­ ваться, - это логический сдвиг влево, обозначающийся знаком «. Оператор этот хорошо известен знатокам языка С, для всех остальных поясним, что выражение х<<п равносильно выражению х · 2 п , или, другими словами, это число х, сдвинутое 1 Эдсгер Дейкстра ( 1930-2002) - голландский программист, один из авторов концепции структурно­ го программирования, лежащей в основе всех современных языков высокого уровня. Называл про­ граммы с активным использованием операторов условного и безусловного перехода «лапшой» за многочисленные линии перехода на метки. О его критике оператора безусловного перехода goto и современном состоянии этого давнего спора см. статью Владимира Мегре на сайте Habr.com (https://habr.com/ru/post/271 131/).

RkJQdWJsaXNoZXIy MTExODQxMg==