INT Программное прерывание
Команда hit инициирует в процессоре процедуру прерывания, в результате которой управление передается на обработчик прерывания с номером n, который указан в качестве операнда команды int. В стек текущей программы заносится содержимое регистра флагов, сегментного регистра CS и указателя команд IP, после чего в регистры IP и CS передается содержимое двух слов из вектора прерывания с номером n (расположенных по адресам 0:n*4 и 0:n*4+2). Команда сбрасывает флаги IF и TF в 0. Команда iret, которой всегда завершается обработчик прерывания, восстанавливает исходное состояние этих флагов.
Пример 1
int 60h ;Переход на прикладной
;обработчик прерывания 60h
Пример 2
mov AH,1 ;Функция MS-DOS - ввод с
Пример 3
mov АН, 0 ;Функция BIOS (прерывание
INTO Прерывание по переполнению
Команда into, будучи установлена вслед за какой-либо арифметической, логической
или строковой командой, вызывает обработчик прерываний через вектор 4, если
предшествующая команда установила флаг переполнения
OF. Перед использованием
команды INTO прикладной программист должен поместить в вектор прерывания 4 двухсловный
адрес своей программы обработки прерывания по переполнению. Команда сбрасывает
флаги IF и TF в 0. Команда iret, которой всегда завершается обработчик прерывания,
восстанавливает исходное состояние этих флагов.
Пример
add AX,BX ;Произвольная команда
IRET Возврат из прерывания
Команда iret возвращает управление прерванному в результате аппаратного или
программного прерывания процессу. Команда извлекает из стека три верхние слова
и помещает их в регистры IP, CS и флагов (см. команду
int). Командой iret должен
завершаться любой обработчик прерываний, как аппаратных, так и программных (от
команды int). Команда не воздействует на флаги, однако она загружает в регистр
флагов из стека его исходное содержимое, которое было там сохранено процессором
в процессе обслуживания прерывания. Если требуется, чтобы после возврата из
обработчика программного прерывания командой iret какие-либо флаги процессора
были установлены требуемым образом (весьма распространенный прием), их установку
надо выполнить в копии флагов в стеке.
386+ IRETD
Возврат из прерывания в 32-разрядном режиме
Команда iretd используется в защищенном режиме для возврата из обработчика прерывания
или исключения, а также для переключения на исходную задачу. В отличие от 16-разрядной
команды iret, данная команда, завершая обработку прерывания или исключения,
снимает со стека 3 двойных слова, содержащие расширенный регистр флагов
EFALGS,
CS и расширенный указатель команд EIP. В случае переключения задач команда iretd
выполняет переключение контекстов задач - сохранение состояния завершающейся
задачи в ее сегменте состояния задачи и загрузку регистров процессора из сегмента
состояния исходной задачи.
Jcc Команды условных переходов
Команды, обозначаемые (в книгах, не в программах!)
Jcc, осуществляют переход
по указанному адресу при выполнении условия, заданного мнемоникой команды. Если
заданное условие не выполняется, переход не осуществляется, а выполняется команда,
следующая за командой Jcc. Переход может осуществляться как вперед, так и назад
в диапазоне + 127...-128 байтов.
В составе команд процессора предусмотрены следующие команды условных переходов:
Команда Перейти, если Условие перехода
Команды условных переходов, осуществляющие переход по условию "выше - ниже",
предназначены для анализа чисел без знака; команды, осуществляющие переход по
условию "больше - меньше", предназначены для анализа чисел со знаком.
Пример 1
cmp СХ,0 ;CX=0?
Пример 2
cmp AX,1000 ;Пусть AX=8000h=32768
Пример 3
cmp AX,1000h ;Пусть AX=8000h=-32768
Пример 4
int 21h ;Вызов системной функции
Команды условных переходов имеют варианты 16- и 32-разрядной адресации (при тех же мнемонических обозначениях) и могут передавать управление в диапазоне -32768...+32767 байт для сегментов с атрибутом размера 16 и в диапазоне -231...+231-1 байт для сегментов с атрибутом размера 32.