簡體   English   中英

ATmega8不支持JMP指令

[英]ATmega8 doesn't support JMP instruction

現在我正在編寫從內存中間開始的bootloader,但在完成之后我需要去主應用程序,想要嘗試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字節程序存儲器)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM