Команды SetCondition

SETCC СС - код условия совпадает с кодами условий в командах JCC условного перехода

Формат команд:

SETCC reg/ mem 8- если условияСС удовлетворяется, то в байт- операнд помещается код 01H, иначе - код 00Н.

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

Команды управления циклами обеспечивают передачи управления при организации циклов. У микропроцессора регистр СX служит счётчиком числа повторений циклов. Каждая команда управления циклами уменьшает содержимое регистра CX на 1, а затем использует его новое значение для “принятия решения” о выполнении или не выполнении перехода. Основная команда этой группы LOOP уменьшает содержимое регистра CX на 1 и передаёт управление операнду 'близкая' метка, если содержимое регистра CX не равно 0.

Например:

MOV CX, 100 ; Загрузить счётчик циклов (CX ¹ 0 в начале цикла!!)

...;

START: ...;

...;

LOOP START ; Если CX ¹ 0, то перейти к метке START, иначе выйти из цикла

...;

Выход из цикла до достижения CX=0 обеспечивают команды LOOPE/LOOPZ (повторять, если равно) и LOOPNE/LOOPNZ (повторять, пока не равно). Команда LOOPE / LOOPZ уменьшает содержимое CX на 1, затем осуществляет переход, если CX ¹ 0 и флаг нуля ZF=1. Обычно LOOPE используют для поиска первого ненулевого результата в серии операций. Команда LOOPNE / LOOPNZ уменьшает CX на 1, затем осуществляет переход, если CX ¹ 0 и флаг нуля ZF=0. Обычно LOOPNE используется для поиска первого нулевого результата в серии операций. Для того чтобы определить, по какому условию произошел выход из цикла можно использовать команду JCXZ (CX=0).

2.5.5.Цепочечные (строковые) команды.

Под цепочкой (строкой) понимается последовательность байт, слов или двойных слов в памяти, а цепочечной операцией называется операция, которая выполняется над каждым элементом цепочки. Микропроцессор имеет набор команд, которые сокращают время выполнения операций по обработке цепочек. Сокращение времени достигается за счёт мощного набора примитивных команд, ускоряющих обработку каждого элемента цепочки и за счёт устранения служебных действий, которые обычно требуются между обработкой последовательных элементов. Перечень цепочечных команд приведен в таблице 2.15.

Таблица 2.15. Перечень цепочечных команд.

Мнемоника Описание Модифицирует
MOVS (передать цепочку ) источник à приемник SI, DI (ESI,EDI)
CMPS (сравнить цепочки ) источник- приемник à SI, DI (ESI,EDI)
SCAS (скопировать цепочку ) AL (AX,EAX)- приемник à DI (EDI)
*INS (ввести цепочку ) входной порт à приемник DI (EDI)
*OUTS (вывести цепочку ) источник à выходной порт SI (ESI)
LODS (загрузить цепочку ) источник à AL (AX,EAX) SI (ESI)
STOS (запомнить цепочку) AL (AX,EAX) à приемник DI (EDI)

* В операциях над словами вместо AL используется AX, для двойных слов- EAX. По умолчанию микропроцессор предполагает, что цепочка-приёмник находится в дополнительном сегменте и адресуется парой регистров ES : DI (или для двойных слов - ES:EDI), а цепочка-источник в текущем сегменте данных и адресуется парой регистров DS : SI (для двойных слов - ES:ESI ). Цепочечные команды автоматически модифицируют указатели для адресации следующего элемента цепочки. Флаг направления DF определяет направление обработки цепочки. Если DF = 0, то значения регистров DI и SI увеличиваются, а если DF = 1, то значения регистров DI и SI уменьшаются. В первом случае мы двигаемся по цепочке в прямом направлении (слева - направо), во втором случае - в обратном (справа - налево).

Состоянием флага DF можно управлять с помощью двух команд: CLD (DF ß 0) и STD (DF ß 1). Одна команда обработки цепочки обрабатывает один элемент цепочки длиной 8, 16 или 32 бит.

Для того чтобы одна команда обработала группу последовательных элементов перед ней надо указать префикс повторения. При этом число повторений извлекается из регистра CX. Префикс REP даёт указание повторять команду, пока не обнаружится конец цепочки, то есть CX = 0. Префиксы REPE и REPZ (повторять пока равно) повторяют цепочечную команду, пока флаг ZF = 1 и CX ¹ 0.

Например:

MOV CX, 100; поэлементное сравнение

REPE CMPS DEST, SOURCE; DEST и SOURCE до первого несовпадения

REPNE / REPNZ; (повторять, пока не равно) обеспечивают повторение команды, пока ZF = 0 и CX ¹ 0. Если в предыдущем примере REPNE CMPS DEST, SOURCE будет повторяться до первого совпадения.

Префиксы REPE / REPZ и REPNE / REPNZ используются с командами сравнения или сканирования цепочки, так как они воздействуют на флаг ZF.