Есть код, который тестирует команды перехода контроллера AVR. После положительного теста каждой команды увеличивается значение счетчика R17. После теста это значение будет суммироваться с адресом смещения подпрограммы TESTJMP_FINISH. В результате должна выполниться эта строка кода:
RJMP TESTJMP_FINISH_COMPLETE
Количество команд зацикливания на себя RJMP $ равно значению счетчика R17.
Если хоть одна команда перехода отработает не правильно, то значение счетчика будет не верно и выполнение программы попадёт в программную ловушку
RJMP $
Вопрос: как мне определить смещение подпрограммы TESTJMP_FINISH?
Код
...
...
...
;//////////////////////////////////////////////////////////////////////////
;// 21. TEST BRIE перехода(Перейти если флаг I=1)
SEI
BRIE TESTJMP_SUCCESS_BRIE
;// Ошибочный переход(I=0)
CALL TESTJMP_FINISH
TESTJMP_SUCCESS_BRID:
INC R17
;//////////////////////////////////////////////////////////////////////////
;// Формируем адрес перехода исходя из результатов тестов R17=0x19
LDI R31, 0x01
LDI R30, 0x2C
;//////////////////////////////////////////////////////////////////////////
;// Косвенный переход в зависимости от результата в регистре Z:R30,R31
IJMP
// CALL TESTJMP_FINISH_COMPLETE
;//////////////////////////////////////////////////////////////////////////
;// Програмные ловушки
TESTJMP_FINISH:
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP TESTJMP_FINISH_COMPLETE
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
RJMP $
;//////////////////////////////////////////////////////////////////////////
;// Тест прошёл успешно
TESTJMP_FINISH_COMPLETE:
LDI R17, 0x04
sts $2000, R17
XCALL __low_level_init
REQUIRE ?cstartup_call_main