Необходимо проверить значения регистров ввода-вывода SPH, SPL, в которых хранится текущий указатель стека.Это может быть что-то вроде этого:
ldi r18, hi(RAMEND)
rjmp enterloop // first jump to check
loop:
pop r20 // pop from the stack
enterloop:
in r16, SPL
in r17, SPH
cpi r16, lo(RAMEND)
cpc r17, r18 // we have no comparison to immediate with carry
brlo loop
Но я не могу себе представить, зачем вам нужен такой странный способ доступа к стеку.Вы можете просто установить указатель стека на его конец
ldi r16, lo(RAMEND)
ldi r17, hi(RAMEND)
in r18, SREG // save flags, including interrupt flag
cli // lock interrupts until both registers are updated
out SPL, r16
out SPH, r17
out SREG, r18 // restore interrupts
Вы также можете прочитать самый верхний адрес ОЗУ в r20 для достижения того же результата.