Дж.Хиллбурн, П.Джулич Микро-ЭВМ и микропроцессоры (1979) (1092080), страница 26
Текст из файла (страница 26)
В свою очередь список параметров должен содержать адреса используемых в подпрограмме данных. Предположим, например, что регистры Н и Ь (РАП) 1п!е! 8008 применяются для. 164 Глава е передачи адреса РАЗУМЬ основной памяти. Если АЬРНА хранится по адресу РАЗУМЬ, ВЕТА — по адресу РАЗУМЬ+1, а 811М записы- вается по адресу РАЗУМЬ+2, то можно написать следующую под- программу: В данной подпрограмме необходимо дважды увеличить на единицу содержимое РАП (регистры Н н С). Некоторой экономии можно достичь, если дополнительно составить подпрограмму приращения содержимого РАП.
Такая подпрограмма (МЕМ1И) может включать следующие команды: МЕМПМ: ПЧЯ 1. КХХ; Возврат, если содержимое~ Ь не равно нулю. ПЧК Н ЕЕТ С использованием данной подпрограммы исходная подпрограм.ма АЯЗМ2 запишется следующим образом: АЯЗМ2: МОЧ А,М; для Ые! 8008. СА1Л. МЕМ1И Агл11 М САЬЬ МЕМНОН МОЧ М,А цЕТ Подпрограмма МЕМ1М вызывается по команде подпрограммы АЯЗМ2. Такой прием называется вложением подпрограмм. Для разных микропроцессоров допустимый уровень вложения различен. В некоторых машинах допускается лишь двухуровневое вло. жение, тогда как микропроцессоры, в которых адрес возврата запоминается в стековой памяти, по существу не имеют ограничений на число уровней вложения. Как правило, мккро-ЭВМ, пред- АЯЗОМ 2: МОУ ПЖ ЭХЕ ПЧК СОМТ: АИ) П% ,1!17. ПЧК СОМТ2: МОУ КЕТ А,М Ь СОХТ Н М СОЫТ 2 Н М,А Прогроггмное обеоленение 165 назначенные для решения задач вычислительного характера, допускают только несколько уровней вложения, в то время как машины, обрабатывающие информацию экономического характера, обладают большими возможностями в данном отношении.
Например, в микропроцессоре 8080 имеется отдельная команда 11чХ Н для реализации увеличения на единицу содержимого РАП, которая эквивалентна подпрограмме МЕМ1И. Описанная выше команда СА1.1. обычно содержит несколько слов. В некоторых процессорах имеется команда КЕБТАКТ, состоящая из одного слова, которая служит для обращения к подпрограммам.
В команде КЕБТАКТ используется лишь ограниченное количество адресов, называемых ячейками захвата, начиная с которых .может быть расположена подпрограмма. Данную команду удобно использовать при обработке прерываний либо прк обращении к подпрограммам, когда фактор быстродействия становится существенным, ввод-вывод Для выполнения любой операции ввода-вывода необходимо реализовать следующую последовательность действий [91: 1. Проверить готовность внешнего устройства. 2. Активировать устройство, если оно готово к выполнению операции ввода-вывода.
3. Передать данные. 4. Дезактивировать устройство. В'обмене участвуют два вида информации: данные и информация о состоянии, Многие микропроцессоры конструктивно связаны с шиной данных, В этом случае микропроцессор должен передавать внешнему устройству управляющую информацию, чтобы проверить, что данные поступают на шину (или выбираются с шины) в соответствующие моменты времени. Эта задача обычно выполняется программными средствами.
В простейшем варианте передачи данных подразумевается, что внешнее устройство постоянно находится в состоянии готовности. Тогда выбирается нужное внешнее устройство и ЦП запрашивает ввод данных с этого устройства через шину данных. Далее ЦП ожидает (используя цикл временнбй задержки, подобный описанному в примере 5.4), пока,с внешнего устройства через соответствующий интер|фейс не поступит на шину очередное слово. Затем выполняется команда ввода — чтения слова с шины. При данном методе передачи предполагается, что внешнее устройство в состоянии выдать информацию за отведенный промежуток времени. По существу мы имеем разомкнутый цикл, т. е.
отсутствует обратная связь с внешним устройством, при помощи которой процессор по- 166 Глава З Рнс. 5.12. Блок-схема подпрограммы ввода при син- хронной передаче данных. лучал бы информацию о поступлении данных на шину. Такой,метод передачи данных определим как синхронную передачу (гл. 6). Блок-схема программы, необходимой для реализации ввода данных по описанному методу, приведена на рис. 5.12. Команды подпрограммы временнбй задержки были рассмотрены в равд.
5.6, а команда ввода — в равд. 4.4. Команды, необходимые для адресации внешнего устройства, определяются архитектурой микропроцессора. В ряде процессоров (например Мо!ого1а 6800) УВВ адресуется как элемент памяти и обмен данными производится так же, как с элементом памяти. В других системах (например, 1п!е! 8008) необходимо выдать сигнал обращения к внешнему устройству, что можно сделать, используя команду вывода, которая побуждает внешнее устройство загрузить данные либо информацию о состоянии на шину.
Такой подход можно использовать при работе с преобразованиями из аналоговой формы в цифровую. Если аналоговый сигнал изменяется медленно, можно просто подать импульс преобразования и открыть выход преобразователя на шину данных при помощи одной или нескольких команд 01)ТР11Т (ВЫВОД). Полагается, что по прошествии достаточного промежутка времени преобразование завершено н данные с шины считываются по команде 114Р1)Т (ВВОД). Другим общепринятым методом обмена данными с внешними устройствами является метод «рукопожатия» (асинхронная передача данных) (101.
В данном случае информация о состоянии Программное обеспечение 187 устройства передается через интерфейс ввода-вывода и обычно занимает один или несколько флажковых разрядов, которые могут считываться микропроцессором. Эти разряды, как правило, определяют состояние готовности внешнего устройства принять либо передать данные ЦП. Перед передачей некоторого информационного слова внешнему устройству процессор должен считать информацию о состоянии этого устройства.
Передача производится в том случае, когда содержимое разряда состояния соответствует готовности устройства. В противном случае выполняется цикл временнбй задержки н снова считывается слово состояния. В течение этой операции микропроцессор будет ожидать, пока внешнее устройство не будет готово к обмену. ПРИМЕР 5.7 Используя асинхронную передачу данных, ввести символ с телетайпа.
Предположим, что слово состояния считывается при помощи интерфейса ввода-вывода с устройства, которое обозначается как устройство 2, а телетайп обозначен как устройство О. Состояние телетайпа задается содержимым наименьшего значащего разряда слова состояния. Если в этом разряде записана единица, значит интерфейс телетайпа готов передать очередной символ. При нулевом содержимом разряда символ не может быть передан. При помощи набора команд микропроцессора 1п1е1 8008 символ считывается следующим образом: 11Ч 2; Ввод слова состояния.
КАК ; Сдвиг натеменьшего значащего разряда в разряд переноса. ЛИС . — 2; Перейти, если устройство не готово. 11ч1 0; Ввод сим|вола с телетайпа. Проверка содержимого разряда состояния производится путем циклического сдвига аккумулятора в направлении разряда переноса, так что соответствующий разряд попадает в триггер переноса. В данном случае необходим сдвиг лишь на один разряд.
Далее реализуется команда условного перехода по содержимому разряда переноса. При этом для возврата к команде 1Х используется относительная адресация (знак определяет адрес команды, выполняемой в текущий момент). Однако подобной адресацией следует пользоваться осторожно, поскольку относительный адрес формируется исходя из количества слов, а не количества команд. В рассмотренном случае обе команды 1Й и КАК занимают по одному слову. Если же в цикле встречается команда из нескольких слов, то это должно учитываться при относительной адресации. 188 Гяава 5 В предыдущем примере в ожидании сигнала готовности телетайпа микропроцессор просто выполняет цикл временнбй задержки. Такой подход часто используется в микропроцессорах, однако при больших периодах ожидания, например 100 — 1000 мкс 18], желательно загружать машину какой-либо полезной работой на время ожидания.
При этом требуются определенные средства для передачи микропроцессору сигнала готовности внешнего устройства. Этот сигнал должен обладать возможностью прерывания текущей последовательности команд, выполняемых микропроцессором. Подобная возможность обеспечивается во многих машинах. Обработка прерывания требует некоторой последовательности действий и представляет собой довольно сложный процесс. Микропроцессор должен распознать прерывание и до завершения его обработки не реагировать ~на последующие прерывания. Если после прерывания следует возобновить вычисления по прерванной за даче, то содержимое флажкового регистра и, возможно, других регистров необходимо запомнить до начала обработки прерывания.