Использование LOOP     Использование условного перехода — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Использование LOOP     Использование условного перехода

2023-01-01 19
Использование LOOP     Использование условного перехода 0.00 из 5.00 0 оценок
Заказать работу

      LOOP A20                                DEC CX

                                                             JNZ A20

Команды DEC и JNZ действуют аналогично команде LOOP: уменьшают содержимое регистра CX на 1 и выполняет переход на метку A20, если в CX не ноль. Команда DEC кроме того устанавливает флаг нуля во флаговом регистре в состояние 0 или 1 в зависимости от значения операнда после ее выполнения. Команда JNZ затем проверяет эту установку. В рассмотренном примере команда LOOP хотя и имеет ограниченное использование, но более эффективна, чем две команды: DEC и JNZ.

Расстояние между командой JNZ и адресом операнда должно быть в пределах от -128 до +127 байт. В случае перехода за эти границы ассемблер выдаст сообщение "Relative jump out of range"  (превышены относительные границы перехода).

Рассматривая назначение команд условного перехода следует пояснить характер их использования. Типы данных, над которыми выполняются арифметические операции и операции сравнения определяют какими командами пользоваться: беззнаковыми или знаковыми. Беззнаковые данные используют все биты как биты данных; характерным примером являются символьные строки: имена, адреса и натуральные числа. В знаковых данных самый левый бит представляет собой знак, причем если его значение равно нулю, то число положительное, и если единице, то отрицательное. Многие числовые значения могут быть как положительными так и отрицательными.

В качестве примера предположим, что регистр AX содержит 11000110, а BX - 00010110. Команда

CMP AX,BX

сравнивает содержимое регистров AX и BX. Если данные беззнаковые, то значение в AX больше, а если знаковые - то меньше.

 

Команда CMP сравнивает содержимое двух полей данных. Фактически эта команда вычитает второй операнд из первого, но содержимое полей не изменяет. Операнды должны иметь одинаковую длину: байт или слово. Команда может сравнивать содержимое регистра, памяти или непосредственное значение с содержимым регистра; или содержимое регистра или непосредственное значение с содержимым памяти.

 

Переходы для беззнаковых данных

 

Мнемоника      Описание                          Проверяемые флаги

JE/JZ     Переход, если равно/нуль                                  ZF

JNE/JNZ Переход, если не равно/не нуль                        ZF

JA/JNBE Переход, если выше/не ниже или равно        ZF,CF

JAE/JNB Переход, если выше или равно/не ниже           CF

JB/JNAE  Переход, если ниже/не выше или равно           CF

JBE/JNA   Переход, если ниже или равно/не выше         CF,AF

 

Любую проверку можно кодировать одним из двух мнемонических кодов. Например, JB и JNAE генерирует один и тот же объектный код, хотя положительную проверку JB легче понять, чем отрицательную JNA

 

Переходы для знаковых данных

 

Мнемоника     Описание                           Проверяемые флаги

JE/JZ      Переход, если равно/нуль                                    ZF

 JNE/JNZ    Переход, если не равно/не нуль                          ZF

 JG/JNLE  Переход, если больше/не меньше или равно ZF,SF,OF

 JGE/JNL  Переход, если больше или равно/не меньше    SF,OF

 JL/JNGE     Переход, если меньше/не больше или равно    SF,OF

 JLE/JNG Переход, если меньше или равно/не больше ZF,SF,OF

 

Команды перехода для условия равно или ноль (JE/JZ) и не равно или не ноль (JNE/JNZ) присутствуют в обоих списках для беззнаковых и знаковых данных. Состояние равно/нуль происходит вне зависимости от наличия знака.

 

Специальные арифметические проверки

Мнемоника            Описание                      Проверяемые флаги

JS              Переход, если есть знак (отрицательно)          SF

JNS           Переход, если нет знака(положительно)         SF

JC              Переход, если есть перенос (аналогично JB)  CF

JNC        Переход, если нет переноса                      CF

JO        Переход, если есть переполнение                     OF

JNO           Переход, если нет переполнения                      OF

JP/JPE    Переход, если паритет четный                  PF

JNP/JP       Переход, если паритет нечетный              PF

Задания к выполнению лабораторной работы выдаются преподавателем непосредственно перед занятием

Примерный вариант задания

Разработать программу, выполняющую прорисовку на экране заданной геометрической фигуры в текстовом режиме 80х25 путем прямого программирования текстового видеобуфера (без использования функций прерывания видеосервиса). Положение и геометрические размеры должны определяться переменными, определенными в сегменте данных. При прорисовке обязательно использование циклов, организованных любым описанным выше способом.

 

Содержание отчета

1. Тема и цель работы.

2. Задание на лабораторную работу.

3. Блок-схема программы.

4. Листинг программы.

5. Выводы по работе.

Контрольные вопросы

1. Какой вид имеет формат определения данных?

2. Что может содержать выражение в определении данных?

3. Как организовать безусловный переход в программе?

4. Какой переход называют прямым, а какой – косвенным?

5. Для чего используется команда сравнения?

6. Как строится команда условного перехода?

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

8. Как можно организовать циклы в ассемблере?

9. Какой регистр в ассемблере используется как «счетчик» цикла?

10. Для чего используется оператор Loop?

11. Какими командами можно заменить оператор Loop?


Лабораторная работа № 3

«ИЗУЧЕНИЕ ФУНКЦИЙ ПРЕРЫВАНИЯ 21 h»

 

Цель работы: изучить прерывание 21h и возможности его применения для ввода информации с клавиатуры, вывода на экран, а также получить навыки работы с файлами через описатели.

 


Поделиться с друзьями:

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.