Работает чётко..
А то не понимал как правильно из прерывания на адрес выходить..
Код: Выделить всё
;--- Таймер1 ---
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, low(main)
push R16
ldi R16, high(main)
push R16
reti
С позицией хорошо/плохо или добро/зло тоже далеко не уехать))Demiurg писал(а):А игры со стеком это баловство
С позицией хорошо/плохо или добро/зло тоже далеко не уехать))[/uquote]Demiurg писал(а):А игры со стеком это баловство
Returns from subroutine. The return address is loaded from the STACK. The Stack Pointer uses a pre-increment scheme during RET.
или например инструкцию RETI:Возвращается из подпрограммы. Адрес возврата загружается из СТЕКА. Указатель стека использует схему предварительного приращения во время RET.
Returns from interrupt. The return address is loaded from the STACK and the Global Interrupt Flag is set.
Мы постоянно используем стёк, не ведая об этом и под другим соусом.Возврат из прерывания. Адрес возврата загружается из СТЕКА и устанавливается флаг глобального прерывания.
конкретно по коду Starichok51-ка есть что возразить?Demiurg писал(а):shonty, не верный и неправильный подход. Если вы уже подумали прыгнуть со стеком. Это уже неправильный подход. Это хак. Но не решение. Решение осознать проблему и решить её. Без прыжков по стеку.
Вот, кстати, здравая мысль..BOB51 писал(а):Да и делать такие фокусы с достаточной уверенностью можно только под ассемблером, где главный контроль за всеми элементами программы лежит на авторе данной программы.