JCXZ меткаЦепочкиСравнилиПолностью
REPX CMPS адрес_приемника, адрес_источника
АНАЛИЗ ПРИЧИНЫ ВЫХОДА ИЗ ЦИКЛА
ПРЕФИКСЫ ПОВТОРЕНИЯ ДЛЯ CMPS
То сравниваться будут двойные слова .
Или если с помощью директивы DD,
То сравниваться будут байты.
Если эти метки были определены директивой DB,
Цепочки, адресуемой операндом адрес_источника,
Вычитает из байта, слова или двойного слова
CMPs адрес_приемника, адрес_источника
У этой команды машинного кода нет. Она существует только для удобства программиста.
ФОРМАТЫ КОМАНД СРАВНЕНИЯ
CMPS адрес_приемника,адрес_источника
(CoMPare Strings) — сравнить цепочки;
РЕАЛЬНО ТРАНСЛЯТОР СОЗДАЕТ ТАКИЕ КОМАНДЫ:
CMPSB
(CoMPare Strings of Bytes) — сравнить цепочки байт;
CMPSW
(CoMPare Strings of Words) — сравнить цепочки слов;
CMPSD
(CoMPare Strings of Double words) — сравнить цепочки двойных слов.
элемент цепочки, адресуемой операндом адрес_приемника.
ФЛАГИ УСТАНАВЛИВАЮТСЯ, РЕЗУЛЬТАТ НЕ СОХРАНЯЕТСЯ.
РАЗМЕР ЭЛЕМЕНТОВ определяется по атрибутам приемника и источника. Например:
При трансляции в зависимости от типа операндов транслятор преобразует ее в одну из трех машинных команд: CMPSB, CMPSW или CMPSD.
REPE или REPZ — если необходимо организовать сравнение до тех пор, пока не будет выполнено
одно из двух условий:
• достигнут конец цепочки (содержимое CX равно нулю);
• в цепочках встретились РАЗНЫЕ элементы
(флаг ZF стал равен нулю);
REPNE или REPNZ — если нужно проводить сравнение до тех пор, пока не будет выполнено
одно из двух условий :
• достигнут конец цепочки (содержимое CX равно нулю);
• в цепочках встретились ОДИНАКОВЫЕ элементы
(флаг ZF стал равен единице).
; тут ситуация, когда цикл сравнения
; прервался РАНЬШЕ, чем окончилась цепочка,
; то есть на основании анализа флага ZF.
; При этом в СХ останется НЕНУЛЕВОЕ значение.
меткаЦепочкиСравнилиПолностью:
; а тут ситуация, когда причиной выхода
; стало CX = 0, то есть просмотрели ВСЮ цепочку.
НА КАКОЙ ПАРЕ ЭЛЕМЕНТОВ ПРОИЗОШЕЛ ВЫХОД ИЗ ЦИКЛА СРАВНЕНИЯ?
В цикле делается ТАК: 1. Сравнить элементы. 2. Сдвинуть SI и DI на следующие элементы. 3. Проверить CX=0? и если да, то выйти. 4. Проверить ZF=1? и если нет, то выйти. SI и DI указывают на СЛЕДУЮЩИЕ элементы! Чтобы получить адреса элементов, которые вызвали выход из цикла, … …надо вернуть SI и DI на ПРЕДЫДУЩИЕ элементы! |