3.2.2. Циклы

Микропроцессоры особенно эффективны в случае выполнения повторяющихся задач. Структурная схема на рис. 3.18, например, представляет программу, которая будет производить счет от 0 до 254 (0—FEH) и выводить результат счета на печать. Программа является обычной для установки регистров. В этом примере содержимым аккумулятора А является ООН. Затем содержимое аккумулятора выводится на избранную периферию: это действие является повторяющимся процессом. Затем содержимое аккумулятора инкрементируется или изменяется. Знак сравнения и принятия решения выполняет процедуру проверки, чтобы определить, содержит ли аккумулятор значение FЕH. Если ответ на поставленный в знаке принятия решения вопрос (будет ли               А = FЕH?) отрицателен (Нет), то программа ветвится влево от знака принятия решения и возвращается в блок введения. Это составляет цикл. Программа будет продолжаться, повторяясь 25410  раз. 

Структурная схема на рис. 3.18, а представляет собой программу, которая может содержать только 20 или 30 команд. Если бы 25510 пропусков через программу были запрограммированы последовательно, то их список составил бы тысячи команд. Циклы в программе являются очень эффективным методом ее сокращения.    

На рис. 3.18, б приведена другая циклическая програм­ма размещения ряда чисел (от 0 до 8) последовательно в память с адресами от 2040Н до 2048Н. Две первые прямоугольные рамки соответствуют начальной загрузке пары регистров HL и аккумулятора А значениями 2040Н и ООН соответственно. Третья рамка соответствует процессу размещения данных в памяти, который будет повторен 9 раз в ходе выполнения этой программы. Микропроцессор, по­вторяя свои действия, разместит содержимое аккумулятора в памяти по адресу, указанному парой НL. При первом прохождении цикла содержимое (ООН) аккумулятора будет помещено в память по адресу 2040Н. 

Четвертый и пятый кадры представляют операции, которые изменяют адрес в паре HL и счет в регистре А. Например, в ходе первого прохождения пара HL инкрементируется до 2041Н, а аккумулятор до 01Н.  

Прямоугольник сравнения и знак принятия решения составляют операцию тестирования. Команда сравнения вычитает 09Н из содержимого А для восстановления или сброса индикатора нуля. Если (А)<9, то индикатор нуля будет сброшен, если (А)= 9, индикатор нуля будет установлен в 1. Знак принятия решения спрашивает: равно ли (А) девяти? Если ответ Да, то программа выходит из цикла и заканчивается, если, однако, ответ Нет, то ветвится снова к команде размещения по соседству с вершиной структурной схемы. Команды сравнения и условного перехода используются для проверки из

меняющегося счета для определения момента выхода из цикла. Программа, показанная на рис. 3.18, б, повторит цикл 9 раз прежде, чем выйти на знак Стоп.

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

Эта программа последовательно поместит числа от 0 до 9  в память по адресам от  2040Н  до  2048Н. Две первые команды эквивалентны двум первым  кадрам схемы и предназначены для установки в паре HL и в аккумуляторе начальных значений 2040Н и ООН соответственно. Команда MOV M, А помещает содержимое аккумулятора в ячейку памяти, указанную парой HL. Две следующие команды (INX H и INR A) инкрементируют пару HL и А. Команда CPI сравнивает содержимое А с константой 09Н. Если А содержит значение между 0 и 8, то индикатор нуля сброшен в 0, но если А содержит 9, то индикатор нуля устанавливается в 1.         

Команда JNZ проверяет индикатор нуля. Если индикатор нуля сброшен в 0, то значит результат вычитания (А) – 09Н не равен 0, следовательно, осуществляется переход по символическому адресу LOOP. Если индикатор нуля установлен в 1, то результат вычитания (А) – 09Н нулевой; при этих условиях программа выходит из цикла и выполняет следующую последовательную команду (HLT), по ко­торой завершается выполнение программы.

Таблица 3.10  Программа на ассемблере, соответствующая рис. 3.18

Подпись:

3.2.3. Исп