
Микропроцессоры Токхайм / 6.11. ВЕТВЛЕНИЕ ПРОГРАММЫ
.doc6.11. ВЕТВЛЕНИЕ ПРОГРАММЫ
Рассмотрим простую задачу сравнения двух чисел. Нужно найти наибольшее и поместить его в определенную ячейку памяти (см. структурную схему решения этой задачи на рис. 6.43). В двух первых прямоугольных кадрах представлена операция загрузки двух чисел в регистры А (аккумулятор) и L (данные). Следующий прямоугольный кадр соответствует операции сравнения, где содержимое регистра L вычитается из содержимого регистра А. Команды сравнения не разрушают содержимого регистров, но влияют на индикатор. Следующий кадр называется знаком принятия решения. Он завершает в программе этап решения и содержит поставленный вопрос [(A)^(L)?]. Если ответ на этот вопрос Да, программа продолжается последовательно и содержимое регистра А помещается в память, затем процессор останавливается. Если Нет, программа ответвляется вправо и содержимое регистра L помещается в память, затем МП останавливается. Использование знаков принятия решения приводит в программах к тому, что называется внутренним ветвлением программы.
В табл. 6.11 представлена
на ассемблере задача, которую мы
только что описали и в которой наибольшее
число помещено в память 2040Н. Заметим,
что здесь аккумулятор А загружен
числом 15Н, а регистр L — числом 6Н.
Сравнивая (третья команда в этом
примере), находим, что (A)>(L), и,
следовательно, индикатор переноса
(СУ) сброшен в 0. Команда перехода
(мнемоника JC в примере) проверяет
индикатор переноса и находит (СУ)=0.
Микропроцессор обращается тогда к
следующей последовательной команде
ПОМЕСТИТЬ (А) в память по адресу 2040Н и
наибольшее число помещено командой
STA в память по адресу 2040Н. Затем МП
останавливает-
Рассмотрим теперь выполнение такой же программы, но в случае, когда содержимое аккумулятора меньше содержимого регистра L. Программа остается та же (табл. 6.11). Содержимое аккумулятора — ОАН (1010), содержимое регистра L — ОЕН (14ю) здесь больше. Команда сравнения устанавливает индикатор CY в 1, так как (A)<(L). Команда ПЕРЕЙТИ, если индикатор переноса установлен в 1 (JC здесь), проверяет индикатор CY и определяет, установлен ли он. При этом изменяется содержимое счетчика команд, т.е. загружается адрес следующей выполняемой команды (STORE L в нашем примере). Заметим, что МП перешел через две команды для того, чтобы обратиться туда, где находится символический адрес STORE L. Микропроцессор выполняет тогда три последние команды, которые помещают содержимое регистра L, т.е. наибольшее число ОЕН в ячейку памяти по адресу 2040Н. Обратившись к схеме на рис. 6.43, мы установим, что программа выполнена последовательно до знака принятия решения, затем ответвилась вправо, заканчиваясь оператором Стоп.
Рассмотрим снова три последние команды в табл. 6.11. Целью этих команд является размещение содержимого регистра L в память по адресу 2040Н. Наш микропроцессор не позволяет поместить содержимое регистра L прямо в память. Нужно последовательно передать сначала содержимое L в А, затем поместить содержимое А в память. Таким образом, часто оказывается, что МП с ограниченным составом команд (как в случае типового МП) использовать сложнее, чем устройства, более мощные по своим возможностям.
Таким образом, рассмотренный на структурной схеме способ ветвления осуществляется командами перехода (или ветвления), согласно которым принимаются решения, основанные на состоянии специальных индикаторов. Мы встретились здесь с использованием символического адреса (метки) при команде перехода. Ветвление очень широко используется при программировании.
Упражнения
6.94. Ромбовидный кадр на рис. 6.43 называется
____ (ромбом решения, знаком принятия решения).
Команда сравнить А и L в табл. 6.11 _______ (изменяет, не изменяет) содержимое аккумулятора.
Команда сравнить А и L служит в приведенном примере для установки индикатора _______.
См. рис. 6.43. Если содержимые А и L равны, CY будет ________ (установлен в 1, сброшен в 0) командой сравнения и использована ветвь ________ (Да, Нет).
См. рис. 6.43. Если в регистре А содержится 1АН, а в регистре L — А5Н, в результате команды перехода МП
_____ (продолжит выполнение команд последовательно,
перейдет к STORE L).
6.99. См. табл. 6.11. Операндом команды JC является STORE L; здесь используется ______ (абсолютная, сим- вольная) адресация.
6.100. Команды перехода и ветвления в программах используются ________ (редко, часто).
Решения
6.94. Знаком принятия решения. 6.95. Не изменяет. 6.96. СУ. 6.97. Если (A) = (L), CY=0, то ветвь Да. 6.98. Если (А) = 1АН, a (L)=A5H, переход к STORE L, так как СУ= 1, потому что (A)<(L). 6.99. Символьная. 6.100. Часто.