Рассмотрим на примере.
Найти большее число и поместить его в определенную ячейку памяти.
Во-первых, 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 | Остановить МП. |