c++ - ATmega8 不支持 JMP 指令

标签 c++ c assembly microcontroller avr

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

最佳答案

我会使用 RJMP:

Relative jump to an address within PC - 2K +1 and PC + 2K (words). In the assembler, labels are used instead of relative operands.

例如:

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

顺便说一句,还有其他几个跳转指令(RJMP、IJMP、RCALL、ICALL、CALL、RET、RETI 等)参见this relevant discussion .

关于c++ - ATmega8 不支持 JMP 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22112988/

相关文章:

arrays - 构建成功,但堆已损坏。使用二维数组

assembly - 内部搬迁未解决

使用 as88 汇编程序从汇编代码调用 C 函数

c++ - 数组排序难度

c++ - 用于构建链表的宏

c - K&R 反向抛光计算器中 buf 数组的用途是什么

linux - 关于Linux中程序的内存布局

c++ - 显示图像数据

c++ - std::thread 的创建使主程序速度减慢 50%

c++ - 发布版本中运行时间过长(调试版本正常)