Ветвление программ

Рассмотрим на примере.

Найти большее число и поместить его в определенную ячейку памяти.

Во-первых, 2-х кадрах блок-схемы представлены операции загрузки чисел в регистре A и L. Команда сравнение, не разрушая содержимого регистров, вычитает из содержимого Аккумулятора содержимое регистра L. Результат сравнения изменяет состояние индикаторов (флагов) в регистре состояния. Следующий кадр называется знаком принятия решений. Он завершает в программе этап решения и содержит поставленный вопрос [(A) ≥ (L)]? Если да, то программа продолжается последовательно и содержимое аккумулятора помещается в память, затем МП останавливается. Если нет, то программа ответвляется и содержимое регистра L помещается в память, затем МП останавливается.

Ъ

Метка Мнемоника Операнд Комментарий
  MVI A, ØF Загрузить число 15 (в десятичной форме) в аккумулятор.
  MVI L, Ø6 Загрузить число Ø6 в регистр L.
  CPM L Сравнить содержимое А с содержимым регистра L, индикатор CY регистра состояния =1, если А<L.
  JC STORE, L Перейти к STORE, L,если CY=1 (если A<L). В противном случае продолжить последовательность.
  STA 2040H Загрузить содержимое А в ячейку памяти 2040.
  HLT   Остановить МП.
STORE, L MOV A, L Поместить регистр L в А.
  STA 2040H Загрузить содержимое А в ячейку памяти 2040.
  HLT   Остановить МП.

В таблице представлена программа на ассемблере, которая решает задачу нахождения наибольшего числа и размещения его в памяти по адресу 2040.

Таким образом, рассмотренный на структурной схеме способ ветвления осуществляется командами перехода, согласно которым принимаются решения, основанные на состоянии индикаторов в регистре состояния.

В этом примере использовался символический адрес (Метка), при команде перехода. Команда ветвления широко используется при программировании.

ЦИКЛЫ

Вычислительные машины (системы) особенно эффективны в случае выполнения повторяющихся задач.

Например, если программе необходимо провести счет от 0 до 254 (ØØ до FE) и вывести результат счета на какую-либо выбранную периферию, то если не использовать циклов, программа будет содержать не менее 300 строчек.

Нарисуем блок-схему этой задачи.

Приведенная структурная схема представляет собой программу, которая содержит в себе примерно 20 команд. Если бы 255 пропусков через программу были запрограммированы последовательно, их список составил бы несколько тысяч команд.

Рассмотрим другой пример.

Структурная схема размещения ряда чисел (от 0 до 8) последовательно в память с адресами от 2040 до 2048. Два первых кадра соответствуют начальной загрузке пары регистров HL и аккумулятора значениями 2040 и ØØ соответственно. Третий кадр соответствует процессу размещения данных в памяти и который будет повторяться 9 раз, в ходе выполнения этой программы. МП, повторяя свои действия, размещает содержимое аккумулятора в памяти по адресу, указанному в паре регистров HL. Четвертый и пятый кадры представляют операции, которые изменяют адрес в паре регистров HL и числа в аккумуляторе. Кадр сравнение и знак принятия решения составляют операцию тестирования. Команда сравнение вычитает число Ø9 из содержимого аккумулятора для установки или сброса индикатора нуля в регистре состояния.

Если содержимое аккумулятора меньше 9 индикатор нуля сброшен. Команда сравнения и условного перехода используются для проверки изменяющегося счета и определения момента выхода из цикла.

Метка Мнемоника Операнд Комментарий
  LXI H, 2040 Загрузить число 2040 в пару регистров HL.
  XRA A Сброс А в ØØ.
LOOP MOV M, A Поместить А в М.
  INX H Инкремент HL.
  INR A Инкремент А.
  CPI Ø9 Сравнить А= Ø9. Если да, то индикатор нуля Z установится в единицу.
  JZ LOOP Перейти к LOOP, если Z=0, т.е. если содержимое А ≠ Ø9, если да, то продолжить последовательно.
  HLT   Остановить МП.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: