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


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

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

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

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

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

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

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

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

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

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

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

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

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

Основная команда: LOOP метка.

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

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

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

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

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

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

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

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

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

l INTO
Прервать по переполнению (INTerrupt if Overflow),.при возникновении переполнения флаг OF = 1 и управление передается по адресу 10H (аналог команды INT 4). Команда сбрасывает флаги IF = 0 и TF = 0.

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



Дата добавления: 2021-09-25; просмотров: 310;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.