![](/img/trans.png)
[英]Char array can't save chars as its members. Password system using ATmega8
[英]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.