Теоретические указания
CMP операнд1, операнд2 - сравнение двух операндов. Алгоритм работы: - выполнить вычитание (операнд1-операнд2); в зависимости от результата установить флаги, операнд1 и операнд2 не изменять (то есть результат не запоминать). JCC метка - переход внутри текущего сегмента команд в зависимости от некоторого условия. Алгоритм работы: проверка состояния флагов в зависимости от кода операции (оно отражает проверяемое условие): если проверяемое условие истинно, то перейти к ячейке, обозначенной операндом; если проверяемое условие ложно, то передать управление следующей команде. Применение: команды условного перехода удобно применять для проверки различных условий, возникающих в ходе выполнения программы. Ниже приведены перечень команд условного перехода, анализируемые ими флаги и соответствующие им логические условия перехода.
JCXZ/JECXZ метка - переход внутри текущего сегмента команд в зависимости от некоторого условия. Алгоритм работы команды jcxz/jecxz: проверка условия равенства нулю содержимого регистра ecx/cx: если проверяемое условие истинно, то есть содержимое ecx/cx равно 0, то перейти к ячейке, обозначенной операндом метка; если проверяемое условие ложно, то есть содержимое ecx/cx не равно 0, то передать управление следующей за jcxz/jecxz команде программы. Применение jcxz/jecxz:
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 Все права принадлежат авторам размещенных материалов.
|