Если в качестве адреса перехода указаны сегмент и смещение, происходит дальний вызов процедуры. А именно: в стек помещается текущее значение регистра CS и значение счётчика команд, соответствующее следующей за CALL команде, и загружаются в регистр CS и счётчик команд значения, указанные в операнде.
В ассемблерных программах вместо непосредственных адресов, как правило, указываются идентификаторы процедур, определённых соответствующей директивой. По общему правилу, ассемблер в процессе трансляции вместо идентификатора подставляет соответствующий адрес.
Вызов дальней процедуры в защищённом режиме имеет особенности, связанные с привилегиями сегмента вызывающей команды и сегмента вызываемой процедуры.
RETN [число] возврат из ближней процедуры 8086
RETF [число] возврат из дальней процедуры 8086
RET [число] возврат из процедуры 8086
Команда RETN
извлекает
значение из стека и его загружает в счётчик команд, выполняя действия, обратные
вызову ближней процедуры командой CALL
.
Команда RETF
загружает
из стека значения счётчика команд и регистра CS,
выполняя возврат из дальней процедуры.
Команда RET
в процессоре не существует, а ассемблер заменяет данную
мнемонику на RETN
или RETF
соответственно описанию процедуры, в которой
данная мнемоника встретилась.
Операнд, если он присутствует, указывает количество байтов, которые будут удалены из стека после считывания адреса возврата. Это удобно использовать, если процедуре передавались параметры через стек, как это имеет место быть в языках высокого уровня.
INT число вызов прерывания 8086
Помещает в стек содержимое регистра флагов, регистра CS и счётчика команд, после чего передаёт управление обработчику прерывания, номер которого задан в качестве операнда.
IRET возврат из обработчика прерываний 8086
IRETD то же
IRET
загружает
из стека значения регистров IP, CS и FLAGS, а IRETD
— EIP, CS и EFLAGS.
Примечание. Единственное отличие IRET
от RETF
состоит в том, что IRET
восстанавливает
значение регистра флагов.
INT3 вызов прерывания 3 8086
INTO вызов прерывания 4 при установленном флаге OF 8086
BOUND индекс, границы проверка: в пределах ли массива 80186
Проверяет, не выходит ли индекс, взятый как число со знаком, за границы, указанные вторым операндом.
Индекс должен быть регистром общего назначения.
Границы — два слова или два двойных слова, в зависимости от
разрядности операндов, находящиеся в памяти подряд и рассматриваемые как числа
со знаком. Первая граница считается нижней, вторая — верхней. Если индекс
меньше нижней границы или больше верхней, вызывается прерывание 5 в режиме
реальной адресации или исключение #BR — в защищённом,
причём адрес возврата указывает не на следующую команду, а на BOUND
, так что обработчик должен исправить значение
индекса или границ, прежде чем выполнить команду IRET
.
Смотри литературу.
Смотри литературу.
Смотри литературу.
ENTER размер, уровень вход в процедуру 80186
Предназначена для автоматизированного создания так называемого стекового кадра в вызванной процедуре. Она используется, как правило, для выделения места под локальные данные процедуры.
Оба операнда — числа. Уровень вложенности может принимать значения от 0 до 31.
В частном случае, когда уровень равен нулю, команда выполняет следующие действия:
1) записывает в стек значение регистра BP или EBP;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.