Если коротко, то не сработает. Настоятельно советую скорее знакомиться со студией и смотреть пошаговое выполнение программы, тогда все встанет на свои места.
Код:
rjmp a ;и переходим к а
a:
Такая последовательность лишена смысла: метка на которую прыгаем указывает на следующую после команды ветвления инструкцию, но программа и так пошла бы на следующую инструкцию, и без rjmp. Еще один момент, SBIC и SBIS пропускают только 1 следущую команду, не больше. Поэтому идея использовать RJMP после таких команд правильная, если надо выполнить больше одной команды по условию.
Еще о кнопках. Ты используешь правильные команды, но приписка "+" в комментариях заставляет думать, что ты делаешь это неосознанно. Если + означает нажатие кнопки, а не + питания на ноге, тогда все верно, потому что кнопка в твоей схеме замыкает ногу на землю. И это правильно, так обычно и подключают кнопки.
Давай распишем алгоритм на словах:
Начальные условия: на кнопке + от подтяжки, сд1 горит (зажечь в инициализации), сд2 не горит.
Начало:
Если кнопка не нажата, то прыжок на начало.
; здесь ждем пока кнопку нажмут Если сейчас горит светодиод 1, то прыжок на Гасим1Жгем2
; сюда попадаем только при нажатии кнопки. ;Если светодиод 1 не горит, значит не прыгаем, а спокойно продолжаем программу и зажигаем сд1 и гасим сд2.Выкл. сд2
Вкл. сд1
Прыгаем на Цикл1
; сделали дело, надо ждать, пока кнопку отпустят.
; Если не прыгнуть, то мы выполним ненужный код, расположенный сразу за этим Гасим1Жгем2:
Выключить сд1
Включить сд2
; отсюда на Цикл1 попадем своим ходом, прыгать не надоЦикл1:
Если кнопка нажата, то прыжок на Цикл1
; в этом цикле ждем, пока кнопку отпустятПрыгаем на Начало
; попадем сюда если кнопку отпустилиТеперь запиши это на ассемблере.