Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МАВЦ.464319.001ТУ 20140414 Семенов.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.98 Mб
Скачать

4.15 Команды условной передачи управления для прочих проверок

  • JE/JZ (Jump if Equal/Zero) — переход, если равно/нуль (ZF =1).

  • JNE/JNZ (Jump if Not Equal/Not Zero) — переход, если не равно/не нуль (ZF = 0).

  • JS (Jump if Sign) — переход, если есть знак (отрицательно) (SF =1).

  • JNS (Jump if Not Sign) — переход, если нет знака (положительно) (SF = 0).

  • JC (Jump if Carry) — переход, если есть перенос (аналог JB) (CF = 1).

  • JNC (Jump if Not Carry) — переход, если нет переноса (аналог JNB) (CF = 0).

  • JO (Jump if Overflow) — переход, если есть переполнение (OF =1).

  • JNO (Jump if Not Overflow) — переход, если нет переполнения (OF = 0).

  • JP/JPE (Jump if Parity/Parity Even) — переход, если есть четность (PF =1).

  • JNP/JPO (Jump if No Parity/Parity Odd) — переход, если нет четности (PF = 0).

  • JCXZ (Jump if CX is Zero) — переход, если содержимое регистра СХ равно О (СХ = 0).

4.16 Команды управления циклами

Используются для повторения цикла известное число раз. Количество повторе­ний предварительно записывается в регистр СХ (счетчик циклов). Каждый цикл автоматически уменьшает показание СХ на 1. Основная команда:

LOOP метка:

Цикл (loop until count complete — повторять до обнуления СХ). Команда умень­шает значение в регистре СХ на единицу и передает управление по прямому адре­су — метке, если значение в регистре СХ не равно нулю; в противном случае вы­полняется следующая по порядку команда. Флаги не меняет. Существуют еще четыре альтернативные команды, в которых можно поставить дополнительные условия. Передачи управления командами типа lоор только ближние и короткие (метки near и short).

4.17 Команды прерывания

У команд прерывания есть некоторая аналогия с командами вызова процедуры CALL: прекращается выполнение текущей программы и осуществляется переход к подпрограмме обработки прерывания; но при прерываниях нет деления на про­цедуры near или far, так как начальный адрес подпрограммы обработки прерыва­ния (вектор прерывания) берется из таблицы векторов ОЗУ всегда 32-битовым; кроме того, при вызове процедуры в стеке сохраняется только адрес возврата, а при прерывании еще и флаги.

Имеются три команды прерывания.

  • INT орr:

Прерывание (interrupt — прервать). Прерывает выполнение программы и пе­редает управление по одному из 256 адресов (векторов прерывания), определя­емых номером прерывания — орr. По этой команде микропроцессор:

  • помещает в стек содержимое регистров: FL (флагов), CS (сегмента команд), IP (указателя команд);

  • обнуляет флаги TF и IF (флаги системного прерывания и блокировки прерывания);

  • загружает в CS и IP соответственно второе и первое слова вектора прерыва­ний, считанного из таблицы векторов в ОЗУ по адресу 4*орг (4*номер пре­рывания); вся таблица векторов занимает 1024 байт, то есть всего может быть 256 различных векторов прерывания. Например, команда INT lah считает из ОЗУ вектор, находящийся по адресу 68h=4*lah, то есть в регистр CS будет загружен адрес сегмента 6ah, а в регистр IP — смещение 68h программы обра­ботки этого прерывания.

Команда устанавливает флаги IF = 0 и TF = 0.

  • INTO - прерывание по переполнению (interrupt if overflow — прервать при пере­полнении) Прерывает выполнение программы при возникновении переполнения (флаг OF = 1) и передает управление по адресу 10Н (аналог команды INT 4). Команда устанавливает флаги IF = 0 и TF = 0.

  • IRET — возврат из обработки прерывания (interrupt return — возврат после пре­рывания). Обеспечивает возврат из программы обработки прерывания. IRET -последняя команда подпрограммы обработки прерывания, по этой команде из стека извлекаются три последних слова и загружаются в регистры IP, CS и FL, при этом содержимое SP увеличивается на 6. Команда устанавливает значения всех флагов.