Ревич, Ю.В. Программирование микроконтроллеров 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, которая вводится при нажа-
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==