ATmega8不支持JMP指令

ATmega8 doesn't support JMP instruction

本文关键字:指令 JMP 不支持 ATmega8      更新时间:2023-10-16

现在我正在编写从内存中间启动的引导加载程序,但是完成后我需要转到主应用程序,想尝试jmp 0x00,但是我的芯片不支持jmp,我应该如何启动主应用程序?

我会使用RJMP

相对跳转到 PC 中的地址 - 2K +1 和 PC + 2K(单词)。在 汇编程序,使用标签代替相对操作数。

例如:

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

顺便说一下,还有其他几个跳转指令(RJMP,IJMP,RCALL,ICALL,CALL,RET,RETI等)。请参阅此相关讨论。

好吧,

看看RET指令。它将返回到上一个位置,因此您可以尝试:

push 0x00
push 0x00
ret

这应该有效,因为在进入任何功能时,您都会推送当前位置,RET会让您返回。

据我所知,ATmege8 有 16 位地址行,但如果我说的不对,您可能需要更多push 0x00

为什么不简单地使用IJMP?

将 Z 设置为0x00并使用 IJMP。 可能比 2xpush 和 ret 快

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

应为 4 个周期和 3 个指令字(6 字节程序存储器)