sasha_1973 написал(а):Перед "Return", вручную восстанавливайте предварительно сохраненные регистры, скидывайте флаг случившегося прерывания и прыгайте куда надо (Goto W)
Отредактировано sasha_1973 (Сегодня 12:47:02)
И точка возврата в стеке умрет навсегда, потом следующая и сл, пока не закончится стек. Для возврата из прерывания существует специальная команда RETI . Компилятор ее подставит вместо Return если адрес этой подпрограммы указан в "On ".
Команда RETI
Команда "возврат из прерывания" выгружает старший и младший байты счетчика команд из стека и устанавливает "логику прерываний", разрешая прием других прерываний с уровнем приоритета, равным уровню приоритета только что обработанного прерывания. Указатель стека уменьшается на 2. Слово состояния программы (PSW) не восстанавливается автоматически. Выполнение основной программы продолжается с команды, следующей за командой, на которой произошел переход к обнаружению запроса на прерывание. Если при выполнении команды RETI обраружено прерывание с таким же или меньшим уровнем приоьритета, то одна команда основной программы успевает выполниться до обработки такого прерывания.
Отредактировано IgorL (2013-09-17 12:06:57)