Хелпикс

Главная

Контакты

Случайная статья





STOS: Запись строки. CMPS: Сравнение строк



STOS: Запись строки

Команда STOS записывает (сохраняет) содержимое регистра AL или AX в байте или в слове памяти. Адрес памяти всегда представляется регистрами ES:DI. В зависимости от флага DF команда STOS также увеличивает или уменьшает адрес в регистре DI на 1 для байта или на 2 для слова.

Практическая польза команды STOS с префиксом REP — инициализация области данных конкретным значением, например, очистка дисплейного буфера пробелами. Длина области (в байтах или в cловах) загружается в регистр AX.

Команды, эквивалентные команде REP STOSB:

JCXZ LABEL2

LABEL1: MOV [DI],AL

INC/DEC DI ;Инкремент или декремент

LOOP LABEL1

LABEL2: ...

 

CMPS: Сравнение строк

Команда CMPS сравнивает содержимое одной области памяти (адресуемой регистрами DS:SI) с содержимыми другой области (адресуемой как ES:DI). В зависимости от флага DF команда CMPS также увеличивает или уменьшает адреса в регистрах SI и DI на 1 для байта или на 2 для слова. Команда CMPS устанавливает флаги AF, CF, OF, PF, SF и ZF. При использовании префикса REP в регистре CX должна находиться длина сравниваемых полей. Команда CMPS может сравнивать любое число байт или слов.

Рассмотрим процесс сравнения двух строк, содержащих имена JEAN и JOAN. Сравнение побайтно слева направо приводит к следующему:

J : J Равно

E : O Не равно (E меньше O)

A : A Равно

N : N Равно

Сравнение всех четырех байт заканчивается сравнением N:N — pавно/нуль. Так как имена «не равны», операция должна прекратиться, как только будет обнаружено условие «не равно».

Для этих целей команда REP имеет модификацию REPE, которая повторяет сравнение до тех пор, пока сравниваемые элементы равны, или регистр CX не pавен нулю. Кодируется повторяющееся однобайтовое сравнение следующим образом:

REPE CMPSB

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.