IRET/IRETD
(Interrupt RETurn)
Возврат из прерывания
Схема команды: | iret iretd |
Назначение: используется в той точке программы обработки прерывания, откуда необходимо вернуть управление прерванной программе.
Алгоритм работы:
Работа команды зависит от режима работы микропроцесссора:
в реальном режиме команда iret последовательно извлекает из стека и затем восстанавливает в микропроцессоре содержимое следующих регистров: eip/ip, cs, eflags/flags. Далее прерванная программа продолжается с точки прерывания;
в защищенном режиме действия команды зависят от состояния флага NT (вложенной задачи) в регистре флагов:
если NT=0, то производятся действия по возврату управления прерванной программе, при этом характер этих действий зависит от соотношения уровней привилегированности прерванной программы и программы обработки прерывания;
в случае NT=1 производятся действия по переключению задач.
Состояние флагов после выполнения команды:
11 | 10 | 09 | 08 | 07 | 06 | 04 | 02 | 00 |
OF | DF | IF | TF | SF | ZF | AF | PF | CF |
r | r | r | r | r | r | r | r | r |
Применение:
Команду iret необходимо применять для восстановления сохраненных командой int регистров флагов, указателя команд и сегментного регистра кода. Число этих команд в программе обработки прерывания должно соответствовать количеству точек выхода из нее. Команда iretd используется в старших моделях микропроцессоров для извлечения из стека и восстановления 32-битных регистров.
my_int1c proc ;программа обработки прерывания 1Ch ... iret endp |
См. также: уроки 15, 17 и команды ,