![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Разветвлений
Исходные концепции, касающиеся принятия решений, мы рассмотрели в разд. 2.2. Процедура сводилась к тому, чтобы сформировать проверяемое условие, т. е. результат, служащий основой для принятия решения, а затем проверить это условие с помощью подходящей команды условного перехода. Таким способом микропроцессор выбирает один из двух возможных путей дальнейшего выполнения программы, другими словами, одну из двух ветвей. Эту процедуру легко обобщить на случай большего количества ветвей, т. е. на случай более сложных разветвлений. Для этого нужно сформировать тестируемую переменную, которая может принимать несколько значений. С каждым из значений связывается своя ветвь в программе. Микропроцессор должен в результате проверок выбрать одну из ветвей. Один из подходов — это сравнивать тестируемую переменную поочередно со всеми возможными ее значениями. При положительном результате сравнения с первым значением управление передается на первую ветвь программы. При отрицательном— производится сравнение со вторым возможным значением и т. д. Этот метод показан на рис. 5.2. Другой метод выбора нужной ветви связан с использованием таблицы переходов. Основная идея метода состоит в том, чтобы использовать тестируемую переменную или достаточно простую функцию от нее в качестве указателя в таблицу переходов, которая содержит начальные адреса ветвей.
Рис. 5.2. Один из методов программирования сложных разветвлений Чтобы проиллюстрировать этот метод, предположим, что нам нужно совершить переход по одному из восьми направлений, и условие разветвления формулируется следующим образом: Перейти на программу 1, если в аккумуляторе 00000001, Перейти на программу 2, если в аккумуляторе 00000010 ………………………………………………………………………………………….. Перейти на программу 8, если в аккумуляторе 10000000. Программа, показанная в табл. 4 решает нашу задачу в предположении, что тестируемая переменная находится в аккумуляторе. В ячейках с 2000 по 200F расположена таблица переходов, содержащая 8 начальных адресов, по которым возможно разветвление. Основная задача программы — преобразовать значение тестируемой переменной в соответствующий адрес строки в таблице переходов. Это позволит выбрать нужный адрес из таблицы и передать по нему управление. Первые две команды программы загружают адрес начала таблицы переходов, т. е. 2000, в регистры Н и L. Далее следует цикл, в котором вычисляется адрес в таблице переходов по значению, заданному на аккумуляторе. Первым делом содержимое аккумулятора циклически сдвигается вправо так, чтобы младший разряд попал в триггер переноса. Если после сдвига в триггере переноса окажется 1, то регистры Н и L как раз будут указывать на нужную ячейку в таблице переходов. Если же в триггере переноса 0, тогда содержимое пары регистров Н, L дважды увеличивается на 1, и управление передается на начало цикла. Процесс повторяется, и на этот раз делается проверка, не соответствует ли следующий элемент таблицы переходов значению тестируемой переменной.
Таблица 5.4
|