ATmega8 не поддерживает инструкцию JMP

Сейчас я пишу загрузчик, который начинается в середине памяти, но после его завершения мне нужно перейти к основному приложению, подумал попробовать jmp 0x00Однако мой чип не поддерживает jmpкак мне запустить главное приложение?

3

Решение

Хорошо взглянуть на RET инструкция. Он возвращается в предыдущее место, поэтому вы можете попробовать:

push 0x00
push 0x00
ret

Это должно работать, потому что при входе в любую функцию вы нажимаете свое текущее местоположение, и RET заставляет вас вернуться.

Насколько я помню, ATmege8 имеет 16-битную адресную строку, но если я не прав, вам может понадобиться больше push 0x00

3

Другие решения

я хотел бы использовать RJMP:

Относительный переход по адресу внутри ПК — 2К +1 и ПК + 2К (слова). В
ассемблер, вместо относительных операндов используются метки.

Например:

entry:
rjmp reset
.org 512
reset:
rjmp foo
.org 3072
foo:
rjmp entry

Кстати, есть несколько других инструкций перехода (RJMP, IJMP, RCALL, ICALL, CALL, RET, RETI и т. Д.). См. это соответствующее обсуждение.

4

почему бы просто не использовать IJMP?

установите Z на 0x00 и используйте IJMP. может быть быстрее, чем 2xpush и ret

EOR R30, R30  ; clear ZL
EOR R31, R31  ; clear ZH
IJMP          ; set PC to Z

должно быть 4 цикла и 3 слова инструкции (6 байт памяти программы)

3
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector