Здавалка
Главная | Обратная связь

Теоретические указания



CMP операнд1, операнд2 - сравнение двух операндов.

Алгоритм работы: - выполнить вычитание (операнд1-операнд2);

в зависимости от результата установить флаги, операнд1 и операнд2 не изменять (то есть результат не запоминать).

JCC метка - переход внутри текущего сегмента команд в зависимости от некоторого условия.

Алгоритм работы: проверка состояния флагов в зависимости от кода операции (оно отражает проверяемое условие):

если проверяемое условие истинно, то перейти к ячейке, обозначенной операндом;

если проверяемое условие ложно, то передать управление следующей команде.

Применение: команды условного перехода удобно применять для проверки различных условий, возникающих в ходе выполнения программы. Ниже приведены перечень команд условного перехода, анализируемые ими флаги и соответствующие им логические условия перехода.

 

PRIVATEКоманда Состояние проверяемых флагов Условие перехода
JA CF = 0 и ZF = 0 если выше
JAE CF = 0 если выше или равно
JB CF = 1 если ниже
JBE CF = 1 или ZF = 1 если ниже или равно
JC CF = 1 если перенос
JE ZF = 1 если равно
JZ ZF = 1 если 0
JG ZF = 0 и SF = OF если больше
JGE SF = OF если больше или равно
JL SF <> OF если меньше
JLE ZF=1 или SF <> OF если меньше или равно
JNA CF = 1 и ZF = 1 если не выше
JNAE CF = 1 если не выше или равно
JNB CF = 0 если не ниже
JNBE CF=0 и ZF=0 если не ниже или равно
JNC CF = 0 если нет переноса
JNE ZF = 0 если не равно
JNG ZF = 1 или SF <> OF если не больше
JNGE SF <> OF если не больше или равно
JNL SF = OF если не меньше
JNLE ZF=0 и SF=OF если не меньше или равно
JNO OF=0 если нет переполнения
JNP PF = 0 если количество единичных битов результата нечетно (нечетный паритет)
JNS SF = 0 если знак плюс (знаковый (старший) бит результата равен 0)
JNZ ZF = 0 если нет нуля
JO OF = 1 если переполнение
JP PF = 1 если количество единичных битов результата четно (четный паритет)
JPE PF = 1 то же, что и JP, то есть четный паритет
JPO PF = 0 то же, что и JNP
JS SF = 1 если знак минус (знаковый (старший) бит результата равен 1)
JZ ZF = 1 если ноль

 

JCXZ/JECXZ метка - переход внутри текущего сегмента команд в зависимости от некоторого условия.

Алгоритм работы команды jcxz/jecxz: проверка условия равенства нулю содержимого регистра ecx/cx:

если проверяемое условие истинно, то есть содержимое ecx/cx равно 0, то перейти к ячейке, обозначенной операндом метка;

если проверяемое условие ложно, то есть содержимое ecx/cx не равно 0, то передать управление следующей за jcxz/jecxz команде программы.

Применение jcxz/jecxz:

PRIVATEКоманда Состояние флагов в eflags/flags Условие перехода
JCXZ не влияет если регистр CX=0
JECXZ не влияет если регистр ECX=0

LOOP метка - организация цикла со счетчиком в регистре cx.

Алгоритм работы:

выполнить декремент содержимого регистра ecx/cx;

анализ регистра ecx/cx:

если ecx/cx=0, передать управление следующей за loop команде;

если ecx/cx=1, передать управление команде, метка которой указана в loop.

Применение: команду loop применяют для организации цикла со счетчиком. Количество повторений цикла задается значением в регистре ecx/cx перед входом в последовательность команд, составляющих тело цикла.

PRIVATE mov cx,10

jcxz m1

cycl:

… ;тело цикла

loop cycl

m1:

LOOPE/LOOPZ метка, LOOPNE/LOOPNZ метка - организация цикла со счетчиком в регистре cx с учетом флага zf.

Алгоритм работы:

выполнить декремент содержимого регистра ecx/cx;

проанализировать регистр ecx/cx:

если ecx/cx=0, передать управление следующей за loopxx команде;

если ecx/cx=1, передать управление команде, метка которой указана в качестве операнда loopxx;

анализ флага zf:

если zf=0, для команд loope/loopz это означает выход из цикла, для команд loopne/loopnz — переход к началу цикла;

если zf=1, для команд loope/loopz это означает переход к началу цикла, для команд loopne/loopnz — выход из цикла.

Применение: команды loopxx удобно использовать вместе с командами, которыe в результате своей работы меняют значение флага zf. Типичный пример — команда сравнения cmp.

Задания

1. Создать текстовый символьный массив (64 символа, от символа пробела до символа _). Вывести созданную строку на экран.

2. Просмотреть изображения символов второй половины кодовой таблицы (коды 128 – 255, всего 128 символов). Для этого создать символьный массив, состоящий из кодов этих символов, и вывести их на экран.

3. Создать программную задержку. Определить значение параметров программы, позволяющие получить задержки 10с.

4. Во введенной с клавиатуры строки подсчитать количество слов.

Вопросы для самоконтроля

1. Назовите основные команды условного перехода.

2. Функция сравнения двух операндов.

3. Принцип работы JCC метки.

4. Применение команды условного перехода.

5. Алгоритм работы LOOPE/LOOPZ метки.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.