Шаг 50.
Сравнение строк (команда CMPS)
На этом шаге мы рассмотрим команду, используемую для сравнения строк.
Команда CMPS сравнивает содержимое одной области памяти (адресуемой регистрами DS:SI) с содержимым другой области, адресуемой как ES:DI. В зависимости от флага DF команда CMPS также
увеличивает или уменьшает адреса в регистрах SI и DI на 1 для байта или на 2 для слова. Команда CMPS устанавливает флаги AF, CF, OF, PF, SF и ZF. При использовании префикса
REP в регистре CX должна находиться длина сравниваемых полей. Команда CMPS может сравнивать любое число байт или слов.
При выполнении команд CMPS и SCAS возможна установка флагов состояния, так чтобы операция могла прекратиться сразу после обнаружения необходимого условия.
Перечислим модификации префикса REP для этих целей:
- REP - повторять операцию, пока CX не равно 0;
- REPZ или REPE - повторять операцию, пока флаг ZF показывает "равно или ноль". Прекратить операцию при флаге ZF, указывающему на "не равно или не ноль" или при CX равном 0;
- REPNE или REPNZ - повторять операцию, пока флаг ZF показывает "не равно или не ноль". Прекратить операцию при флаге ZF, указывающему на "равно или нуль" или при CX равном 0.
Пример. Рассмотрим процесс сравнения двух строк, содержащих наборы символов '
12AB' и '
12BB'. Они отличаются друг от друга третьим
символом. Так как эти наборы не равны, операция должна прекратиться, как только будет обнаружено условие "не равно". Для этих целей команда
REP имеет модификацию
REPE, которая повторяет сравнение до тех пор, пока сравниваемые элементы равны, или регистр
CX не равен нулю. Кодируется повторяющееся однобайтовое сравнение следующим образом:
На следующем шаге мы рассмотрим команду, применяемую для просмотра строк.
Предыдущий шаг
Содержание
Следующий шаг