Quote (RSM54)
Почему конкретно нельзя пользоваться GOSUB и GOTO в обработчиках прерываний
Не пугайте человека.
Можно использовать.
С GOTO вообще нет проблем,так-как безусловный переход не использует стек.
Есть нюанс, если используеш прерывания,в обработчике прерывания нельзя командой GOTO "выскакивать" за пределы
обработчика.
С Gosub немного сложнее.Gosub вместе с GOTO легко переполнить стек и без прерывания.
Основное правило "для выхода из процедуры вызванной командой GOSUB нельзя использовать GOTO" выходить можно, или точнее
нужно командой RETURN.
Пример неправильного использования
Code
.
start:
.
.
gosub loop
.
.
goto start
loop:
.
goto start
.
return
end
Вызвав процедуру loop: (gosub loop:)сохраняем стек , из процедуры вышли на метку start:(goto start:),
при этом не востановили стек (обошли return).А дальше тот же цикл с моментальным перполнением стека
о чем Proteus радостно нам сообщает
Quote (RSM54)
Stack underflow executing RETURN instruction
Да-уж...Ну и наваял...Надеюсь хоть что-то понятно.