Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Цель работы: изучить работу команд передачи управления, позволяющих организовать ветвления в программах и научиться использования этих команд в программах.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ.
Когда программа, написанная программистом, загружается в память, то команды хранятся в последовательно расположенных ячейках памяти, но редко исполняются по порядку. Все программы, за исключением простейших, ' содержат переходы и вызовы подпрограмм (процедур), заставляющие микропроцессор изменять путь исполнения программы.
Команды передачи управления обеспечивают переход из одной части программы в другую. Эти команды можно подразделять на три группы: команды безусловной передачи управления, команды условной передачи управления и команды управления циклами. Эти команды ни на какие флаги не воздействуют.
КОМАНДЫ БЕЗУСЛОВНОЙ ПЕРЕДАЧИ УПРАВЛЕНИЯ.
1.Команда вызова процедур (подпрограмм) CALL.Процедура представляет собой совокупность команд, написанных 1 раз, но может быть использована по мере необходимости в любом месте программы.
Формат команды CALL имя где имя - имя вызываемой процедуры (т.е. метка ее начала)
2.Команда возврата из процедуры RET (return-возврат). Команда RЕT заставляет микропроцессор 8086 возвратиться из процедуры в программу, вызвавшую эту процедуру. Команда RET должна быть последней командой процедуры, исполняемой микропроцессором.
3.Команда безусловного перехода JMP (jump unconditionally-перейти безусловно). Эта команда заставляет микропроцессор извлечь новую команду не из следующей ячейки памяти, а из какой-то другой.
Формат команды JMP имя где имя метка новой команды.
Обычно команда JMP используется для обхода группы команд, которым передается управление из другой части программы.
КОМАНДЫ СРАВНЕНИЯ ЗНАЧЕНИЙ ИСТОЧНИКА И ПРИЕМНИКА.
КОМАНДЫ УСЛОВНОЙ ПЕРЕДАЧИ УПРАВЛЕНИЯ.
У микропроцессора Intel 8086 есть 17 различных команд, которые позволяют ему "принять решение" о ходе исполнения программы в зависимости от определенных условий., например, нулевого значения регистра или единичного значения флага переноса CF. Если такое условие выполнено, то микропроцессор выполнит переход; в противном случае он продолжит выполнение следующей команды программы. В качестве условия в таких командах используется состояние битов флагового регистра.
Для изменения состояния флагов, на основе которых команды условной передачи управления принимают решение передавать или нет управление используется команда СМР. Это - КОМАНДА СРАВНЕНИЯ ЗНАЧЕНИЙ ИСТОЧНИКА И ПРИЕМНИКА.
КОМАНДА СРАВНЕНИЯ ЗНАЧЕНИЙ ИСТОЧНИКА И ПРИЕМНИКА.
Команда СМР (compare-сравнить) имеет формат
СМР приемник, источник
Подобно команде вычитания SUB команда СМР вычитает операнд-источник из операнда приемника и в зависимости от результата устанавливает или обнуляет флаги. Но в отличие от команды SUB команда СМР не сохраняет результат вычитания, т.е. не изменяет операнды.
Результат исполнения команды СМР
Условие | Флаги | |||
OF | SF | ZF | CF | |
Операнды без знака | ||||
Источник < приемник | н | н | ||
Источник = приемник | н | н | ||
Источник > приемник | н | н | ||
Операнды со знаком | ||||
Источник < приемник | 0/1 | Н | ||
Источник = приемник | н | Н | ||
Источник > приемник | 0/1 | Н |
Примечание: к - означает не имеет значения,0/1 означает, что флаг может быть равен 0 или 1 в зависимости от значений операндов. Нельзя использовать в качестве приемника непосредственный операнд и сравнивать содержимое одной ячейки памяти с другой.
КОМАНДЫ УСЛОВНОЙ ПЕРЕДАЧИ УПРАВЛЕНИЯ.
Команды условной передачи управления имеют такой общий формат I J*** близкая _метка где ***-мнемокод, состоящий из одной, двух или трех букв. Запись операнда близкая _метка подчеркивает, что метка должна находиться не далее -128 или +127 байтов от команды условной передачи управления. В таблице, расположенной ниже, описаны некоторые команды условной передачи управления и указаны условия, выполнение которых вызывает переход.
команда | Описание, условие перехода |
JA | Jump if above – перейти, если выше CF = 0 и ZF = 0 |
JAE | Jump if above or equal – перейти, если выше или равно CF = 0 |
JB | Jump if below – перейти, если ниже CF = 1 |
JBE | Jump if below or equal – перейти, если ниже или равно CF = 1 или ZF = 1 |
JE | Jump if equal – перейти, если равно ZF = 1 |
JNE | Jump if not equal – перейти, если не равно ZF = 0 |
Командам условной передачи могут соответствовать любые команды, изменяющие состояние флагов, но обычно они используется совместно с командой сравнения СМР. Ниже показано, какими условными переходами надо пользоваться при возможных сочетаниях значений источника и приемника. Если после команды сравнения приемник больше источника, использует команду JA. Если после команды сравнения приемник больше источника или равен ему, используют команду JAE.
Если после команды сравнения приемник меньше источника, используют команду JB. Если после команды сравнения приемник меньше источника или равен ему, используют команду JBE.
Если после команды сравнения приемник равен источнику, используют команду JE.
Если после команды сравнения приемник не равен источнику, используют команду JNE.
Для иллюстрации применения команд сравнения/условного перехода рассмотрим пример. Здесь показан фрагмент программы, размещающей в памяти два числа без знака в порядке возрастания, предполагается, что смещения адресов этих чисел в сегменте данных находятся в регистрах ВХ и DI соответственно. Учтите, что для перестановки двух чисел в памяти одно из них необходимо загрузить в регистр, так как микропроцессор не имеет команд пересылки типа память-память. Размещение двух чисел в порядке возрастания.
Этот фрагмент располагает два 16-битовых числа без знака в памяти в порядке возрастания: меньшее число заносится в ячейку с меньшим
;адресом.
MOV AX,[BX];Загрузить первое число в АХ
СМР АХ,[DI];сравнить его со вторым числом
JBE DONE;первое число меньше второго или равно ему?
XCHG АХ, [DI];если нет, обменяться значениями
MOV [ВХ], АХ
DONE:....
КОМАНДЫ УПРАВЛЕНИЯ ЦИКЛАМИ.
Команды управления циклами обеспечивают условные передачи управления при организации циклов. У микропроцессора 8086 регистр счетчика СХ служит счетчиком числа повторений циклов. Каждая команда управления циклами уменьшает содержимое регистра СХ на 1, а затем использует его новое значение для принятия решения о выполнении или невыполнении перехода. Основная команда этой группы LООР (lорр until count complete-повторять до конца счетчика) уменьшает содержимое регистра СХ на 1 и передает управление операнду близкая метка, если содержимое регистра СХ не равно 0.
Например, для стократного выполнения определенной группы команд можно воспользоваться такой конструкцией
MOV СХ,100;Загрузить число повторений в СХ.
START:....;повторяемая группа
....;команд
LOOP START;если СХ не равен 0, перейти к метке
START,....;в противном случае выйти из цикла
Команда LOOP прекращает выполнение цикла только в том случае, когда содержимое регистр СХ уменьшено до 0.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. На какие группы делятся команды передачи управления? Объясните, как используется каждая группа.
2.Назовите команду сравнения. На какие флаги она воздействует?
3.Как совместно используются команды СМР и условной передачи управления? Назовите условия перехода и применяемую команду.
4.К какой группе команд можно отнести команды: a)LOOP; 6)JMP; в)JNE; г)JB; д)RЕТ e)CALL? мы в качестве регистра-источника в командах сравнения?
5.Какие операнды допустимы в качестве регистра-источника в командах сравнения?
ЗАДАНИЕ К СРС:
1.Подготовиться к ответу на контрольные вопросы.
3.Получить у преподавателя задание на написание программы с использованием команд передачи управления и проверить ее выполнение в программе-тренажере
.
Дата публикования: 2015-10-09; Прочитано: 1642 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!