Имена меток, конечно, можно присваивать произвольно. Как вы уже поняли, после точки с запятой идет комментарий — произвольная строка, на которую компилятор не обращает внимания. На новую строку комментарий не переходит: в случае длинного комментария в начале каждой следующей строки также надо ставить точку с запятой.
Но постойте, мы что, обязаны использовать
Лично я оформляю начало программы следующим образом: копирую таблицу в указанном ранее виде, а затем в начале каждой строки (кроме первой) автоматически меняю с помощью функции поиска-замены редактора «rjmp» на «reti; rjmp», вот так (старую команду я закомментировал):
rjmp RESET ;Reset Handler
reti; rjmp EXT_INT0 ;IRQ0 Handler
reti; rjmp EXT_INT1 ;IRQ1 Handler
…
Теперь заготовка начала программы готова: при необходимости в дальнейшем какого-нибудь прерывания, мы удаляем из нужной строки фрагмент reti;, а затем где-то в программе перед началом процедуры обработки этого прерывания ставим нужную метку, например:
rjmp RESET ;Reset Handler
rjmp EXT_INT0 ;IRQ0 Handler
…
EXT_INT0: ;процедура обработки прерывания INTO
…
reti ;окончание процедуры обработки прерывания INTO
Обратите внимание, что после метки в программе (но не внутри команды, которая на нее ссылается!) должно идти двоеточие, иначе компилятор не «поймет», что перед ним именно метка. Кроме того, меток не касается правило написания операторов в отдельных строках (потому что метка не оператор, а адрес), после метки и двоеточия в программе сразу может идти оператор.
Процедура
Теперь обратимся к процедуре RESET, т. е. к истинному началу программы, что там должно быть? Когда контроллер доходит до команды вызова подпрограммы (call или rcall, см. далее), или в нем происходит прерывание, он должен сохранить состояние программного счетчика с тем, чтобы потом «знать», куда вернуться. Это происходит в специальной области памяти, которая называется
RESET:
ldi temp, low(RAMEND) ;загрузка указателя стека
out SPL, temp
ldi temp, high(RAMEND) ;загрузка указателя стека
out SPH, temp
Этими операторами вы указываете, где компилятору расположить программный стек, а именно в конце SRAM (что обозначается константой RAMEND, объявленной в соответствующем inc-файле, загляните). Служебные слова low и high означают, что от ramend нужно взять, соответственно, младший и старший байты. Для тех моделей, у которых объем SRAM не превышает 256 байт (из доступных в настоящее время это только модель 2313 во всех ее версиях), запись сокращается:
RESET:
ldi temp, RAMEND ;загрузка указателя стека
out SPL, temp