CALL命令とスタック

pp.86ff.
ATmega328Pのデータシートを見るとSPの初期値はRAMENDになっているので初期化は不要かもしれない。

.org 0
;;;;スタックポインタを初期化する
    ldi r16, high(ramend) ; RAMの末尾アドレス(16ビット)の上位バイトを、
    out SPH, r16          ; スタックポインタの上位バイトに格納する。
    ldi r16, low(ramend)  ; RAMの末尾アドレス(16ビット)の下位バイトを、
    out SPL, r16          ; スタックポインタの下位バイトに格納する。
;
    nop
    nop
    nop
    call sute ; サブルーチンを呼ぶ。
    nop
    nop
;
    .org 0x300
sute:
    nop
    ret

call命令の次のアドレスがスタックへプッシュされた。
f:id:ti-nspire:20200319111047p:plain