ХАНДЫФАР

Инструкция STI

Установить флаг прерывания

STI - Установить флаг прерывания IF.


В большинстве случаев sti устанавливает флаг прерывания (IF) в регистре FLAGS. Это позволяет процессору реагировать на маскируемые аппаратные прерывания.

Если IF=0, маскируемые аппаратные прерывания остаются заблокированными на границе команды после выполнения sti. (Отложенный эффект этой инструкции предусмотрен для того, чтобы разрешить включение прерываний непосредственно перед возвращением из процедуры или подпрограммы. Например, если за инструкцией sti следует инструкция ret, команде ret разрешается выполняться до того, как будут распознаны внешние прерывания. Никакие прерывания не могут быть распознаны, если выполнение cli немедленно следует за таким выполнением sti.) Блокирование заканчивается после доставки другого события (например, исключения) или выполнения следующей инструкции.

Флаг IF и инструкции sti и cli не запрещают генерацию исключений и немаскируемых прерываний (NMI). Однако NMI (и прерывания системного управления) могут быть заблокированы на границе команды после выполнения sti, которое начинается с IF=0.

В качестве примера, сначала очистим флаг IF а следующей инструкцией установим его.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public
  5. ____assume cs:code
  6. ____main proc
  7. ________cli
  8. ________sti
  9. ________mov_____ax, 4C00h
  10. ________int_____21h
  11. ____main endp
  12. code ends
  13. end main
Инструкция STI

Установить флаг прерывания

STI - Установить флаг прерывания IF.


В большинстве случаев sti устанавливает флаг прерывания (IF) в регистре FLAGS. Это позволяет процессору реагировать на маскируемые аппаратные прерывания.

Если IF=0, маскируемые аппаратные прерывания остаются заблокированными на границе команды после выполнения sti. (Отложенный эффект этой инструкции предусмотрен для того, чтобы разрешить включение прерываний непосредственно перед возвращением из процедуры или подпрограммы. Например, если за инструкцией sti следует инструкция ret, команде ret разрешается выполняться до того, как будут распознаны внешние прерывания. Никакие прерывания не могут быть распознаны, если выполнение cli немедленно следует за таким выполнением sti.) Блокирование заканчивается после доставки другого события (например, исключения) или выполнения следующей инструкции.

Флаг IF и инструкции sti и cli не запрещают генерацию исключений и немаскируемых прерываний (NMI). Однако NMI (и прерывания системного управления) могут быть заблокированы на границе команды после выполнения sti, которое начинается с IF=0.

В качестве примера, сначала очистим флаг IF а следующей инструкцией установим его.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public________; Начало сегмента кода
  5. ____assume cs:code
  6. ____main proc______________; Начало процедуры main
  7. ________cli________________; Очищаем флаг IF
  8. ________sti________________; Устанавливаем флаг IF
  9. ________mov_____ax, 4C00h__; Копируем значение функции завершения процесса в ah а значение в al
  10. ________int_____21h________; Вызываем прерывание DOS
  11. ____main endp______________; Конец процедуры main
  12. code ends__________________; Конец сегмента кода
  13. end main___________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda