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

122 Часть 11. Программирование микроконтроллеров АVR на ассемблере Особенности мнемонической записи большинства команд в АVR-ассемблере такие же, как и в любых других ассемблерах. Сначала идет собственно команда (в АVR команды бывают двух-, трех- и четырехбуквенные), затем через пробел или знак табуляции (этих знаков может быть любое количество больше нуля) следуют опе­ ранды. Некоторые команды операндов не имеют (lpm, reti ) , в других есть один операнд ( inc rl б, rjmp RESET ) . Если команда имеет два операнда, то сначала указы­ вают приемник, затем источник (это т. н. прямая польская запись ) . Между прием­ ником и источником обязательно должна стоять запятая (с любым числом пробелов до или после нее, или вообще без них) . Так, выражение suЬ rl б , rl 7 означает, что из содержимого rlб нужно вычесть содержимое rl 7, а результат окажется в rlб . Общее правило для использования пробелов и знаков табуляции такое : нельзя раз­ бивать идентификатор на части и, наоборот, нельзя сливать разные идентификато­ ры между собой - хотя бы один пробел, знак табуляции (или знак препинания, если это предусмотрено форматом команды) между наименованиями инструкций, переменных, регистров и т. п . должен быть. Сразу заметим, что А VR-ассемблеррегистр букв не различает, в том числе и в при­ своенных программистом именах переменных, констант, меток и т. п. (одинаково правильной будет форма записи Jmp, JМР и jmp, так же как Reset, RESET и reset ) . С легкой руки А. А. Зубарева [24] по сайтам пошло гулять представление о том, что avrasm2, в отличие от старого avrasm, различает регистр символов, но, как легко убедиться методом проб и ошибок, это представление, к счастью, оказалось непра­ вильным, так что переписывать все программы нам не придется. Зато новый ас­ семблер не терпит переопределений и «внештатного» использования зарезервиро­ ванных слов - назвать процедуру обработки прерывания по внешнему воздейст­ вию INTO у вас не получится, потому что INTO уже употребляется в файлах определений для обозначения вывода, соответствующего этому прерыванию. Каждая команда должна занимать отдельную строку (в большинстве языков высо­ кого уровня операторы можно записывать в одной строке, например, разделяя их знаками препинания, - здесь это не допускается). Длина строки ограничена 1 20-ю символами. Разбивать команду на части разрывом строки нельзя, в avrasm2 (но не в старой версии ! ) можно применять прием из языка С, где строки исходных кодов могут быть продолжены посредством символа \ - обратной косой черты (обратного слеша) в конце строки, что полезно для длинных макроопределений и для длинных директив . dЬ. Кроме команды, строка может содержать метки и примечания . Метка ( label) - идентификатор произвольной длины, придуманный программистом и заканчиваю­ щийся двоеточием без пробела перед ним ( metka : ) . Метку можно располагать и в отдельной строке. Кроме простого указания на адрес перехода для команд ветв­ ления, метки служат также указанием на адрес подпрограмм (процедур) и заодно являются их именем. Примечания можно добавлять в конце строки после знака «точка с запятой». Все, что расположено после точки с запятой и до знака конца строки (обычно в тексто­ вом формате DOS/Windows это пара символов $ 0А $ 0D, которая вводится при нажа-

RkJQdWJsaXNoZXIy MTExODQxMg==