m8: dcr С |
; декрементироватъ количество оставшихся циклов |
||
|
|
; |
суммирования, |
т9: jnZ |
m4 |
|
; вернуться к т4, если цикл суммирования не последний, |
mlO: jmp |
ml2 |
; перейти к завершению по ml2 для последнего цикла |
|
|
|
; суммирования, |
|
ml I: movA, |
В |
; переслать в аккумулятор предыдущее значение |
|
|
|
; суммы при переносе, |
|
ml2: sta Л2 |
|
; сохранить в памяти сумму, |
|
т!3: |
. . . . |
|
|
В примере 2 цикл может завершиться по тб при появлении переноса, и по ml2, если перенос при суммировании не формируется.
Еще одной важной процедурой обработки данных является подпрограм ма. Для выполнения этой процедуры в командах управления имеются спе циальные команды: "call A16" - вызов подпрограммы и "ret" - возврат из подпрограммы. При вызове подпрограммы работа основной программы временно приостанавливается, выполняются команды подпрограммы, за тем работа основной программы продолжается. Подпрограммы обычно применяют для реализации повторяющихся в разных частях основной про граммы функций.
Корректное продолжение работы приостановленной программы требует восстановления данных в определенных регистрах микропроцессора. Этот набор данных, необходимых для работы программы, принято называть век тором состояния программы. В общем случае компонентами вектора со стояния являются:
•адрес очередной команды в программном счетчике;
•регистр флагов, так как флаги могут измениться при выполнении под программы;
•аккумулятор, его содержимое практически всегда изменяется при вы полнении подпрограммы;
•регистры блока РОН, содержимое регистров также может измениться при выполнении подпрограммы.
Следовательно, любые компоненты вектора состояния, изменяющиеся при выполнении подпрограммы, должны сохраняться в памяти и при заверше нии подпрограммы восстанавливаться в регистрах микропроцессора. Как правило, эти операции с вектором состояния производят с помощью стека, поэтому стековая адресация всегда поддерживается в микропроцессорных системах.
Очевидно, что вызываемая подпрограмма также требует формирования своего вектора состояния. Вектор состояния вызываемой подпрограммы принято называть вектором прерывания. Так как подпрограмма только на чинает работать с момента вызова, в векторе прерывания обычно указыва-
30
ют только начальный адрес вызываемой подпрограммы для программного счетчика.
Таким образом, процедура использования подпрограммы включает сле дующие операции: остановка выполнения и сохранение вектора состояния программы, загрузка вектора прерывания и выполнение подпрограммы по вектору прерывания, восстановление вектора состояния и продолжение ра боты программы. Выполнение всех этих операций поддерживается систе мой команд микропроцессора.
Команда вызова подпрограммы "call A16" производит автоматическое сохранение в стеке текущего адреса команды из программного счетчика микропроцессора и загрузку адреса А16 вектора прерывания в программ ный счетчик, а команда завершения прерывания "ret" - такое же автомати ческое восстановление адреса в программном счетчике из стека. Из-за та кого алгоритма вызова и завершения прерывания задача сохранения и вос становления остальных компонентов вектора состояния программы обычно решается в подпрограмме прерывания. Подпрограмма должна начинаться с сохранения в стеке содержимого тех регистров микропроцессора, которые будут использоваться при ее работе. А перед командой возврата из подпро граммы (ret) должно выполняться восстановление содержимого этих же ре гистров из стека. Коды подпрограммы могут храниться в любой области адресного пространства памяти микропроцессорной системы.
Работу с подпрограммой рассмотрим на следующем примере:
ml
т2: callAsbl ; вызов подпрограммы по адресу Asbl с
; сохранением в стеке адреса тЗ из программного счетчика,
тЗ
;текст подпрограммы с командами сохранения и восстановления
;вектора состояния,
Asbl: push PSW; сохранение в стеке аккумулятора и регистра флагов, Asb2: push ВС ; сохранение в стеке регистровой пары ВС,
Asb3: push HL ; сохранение в стеке регистровой пары HL,
. . . .; команды преобразования данных в подпрограмме,
Asb4: |
pop HL ; восстановление из стека регистровой пары HL, |
Asb5' |
pop ВС ; восстановление из стека регистровой пары ВС, |
Asb6' |
pop PSW ; восстановление из стека аккумулятора |
|
; и регистра флагов, |
Asbl: |
ret ; возврат из подпрограммы с восстановлением |
|
; из стека адреса тЗ; в программном счетчике |
31
Выполнение команды т2 приостанавливает дальнейшую работу програм мы, при изменении содержимого программного счетчика начинает рабо тать подпрограмма с команды AsbL Завершение подпрограммы командой ret восстанавливает адрес команды тЗ в программном счетчике и обеспе чивает продолэюение работы основной программы. В приведенном примере предполагается использование в подпрограмме текста программы из пре дыдущего примера, которая в процессе работы изменяет данные в акку муляторе, регистре флагов и регистровых парах ВС, HL.
Процедура прерывания с вызовом подпрограммы также имеет большое значение в операциях ввода-вывода данных и организации взаимодействия с периферийными устройствами. Для реализации прерываний по запросам периферийных устройств предусмотрены специальные сигналы ШУ мик ропроцессорной системы. Подробнее эти вопросы рассмотрены в следую щем разделе.
1.5. Алгоритмы ввода-вывода данных
Важным элементом организации эффективной работы микропроцессор ной системы являются процедуры ввода-вывода данных. Выполнение алго ритмов преобразования невозможно без ввода исходных данных через входные интерфейсы и бессмысленно без выдачи полученных результатов через выходные интерфейсы. Различные устройства, с разными свойства ми, самостоятельной организацией и собственными внутренним алгорит мами работы могут быть элементами интерфейсов ввода-вывода (рис. 1).
В отличие от памяти микропроцессорной системы, предназначенной только для обеспечения доступа к требуемым данным, интерфейсные сред ства должны, с одной стороны, работать по сигналам управления микро процессора, и, с другой стороны, учитывать особенности работы внешних (периферийных) устройств. Поэтому для ввода-вывода данных от перифе рийных устройств требуются специальные процедуры, обеспечивающие согласование внутренних и внешних алгоритмов работы. Процедуры вводавывода в микропроцессорной системе можно свести к трем типам: про граммный ввод-вывод, ввод-вывод по прерываниям, ввод-вывод в режиме прямого доступа к памяти (режим DMA). Эти процедуры выполняются с помощью специальных средств и специальных сигналов ШУ микропроцес сорной системы.
Первая особенность этих процедур - устройства ввода-вывода образуют самостоятельное адресное пространство с собственными сигналами управ ления, независимыми адресами и командами микропроцессора для доступа к данным. В рассматриваемой микропроцессорной системе (рис. 2) адреса ция производится только младшим байтом ША, по ШУ предусмотрена пе редача независимых от управления доступом к памяти сигналов ввода и вывода данных. Однобайтовый адрес (А8) и сигналы управления вводом32
выводом передаются микропроцессором при выполнении команд следую щего формата: "in А8" - ввода байта данных из устройства с адресом А8 в микропроцессор, "out A8" - вывод байта данных из микропроцессора в устройство с адресом А8.
Без применения дополнительных средств этими командами можно реа лизовать только программный ввод-вывод данных. Основная рабочая про грамма должна предусматривать периодическое выполнение команд вводавывода данных для всех используемых периферийных устройств. Период обмена данными должен соответствовать максимально возможной скоро сти работы периферийных устройств. При несвоевременном обмене дан ными работа этих устройств может нарушаться с недопустимой потерей данных и некорректным выполнением требуемых функций.
Однако скорость работы периферийных устройств не всегда однозначно известна и зачастую изменяется в довольно широких пределах. Если уст ройство не готово к обмену данными, возможно формирование специаль ного сигнала ШУ, который переведет микропроцессор в состояние ожида ния. Такой способ согласования весьма неэффективен, так как период ожи дания может привести к недопустимо большой задержке выполнения дру гих требуемых функций. Возможен и другой вариант организации взаимо действия: перед обменом данными микропроцессор предварительно вы полняет программный контроль готовности, при готовности производит программный обмен данными, а при отсутствии готовности переходит к выполнению других функций программы с повторением контроля готовно сти устройства через определенный интервал времени. В любом из этих ва риантов взаимодействия процедуры программного ввода-вывода заметно увеличивают объем функций рабочей программы микропроцессора, замед ляют выполнение требуемых функций, не всегда обеспечивают своевре менный обмен данными с периферийными устройствами и, следовательно, могут отрицательно повлиять на эффективность работы микропроцессор ной системы.
Отказаться от программного контроля состояния периферийных уст ройств можно в тех случаях, когда эти устройства сами формируют и пере дают запросы на обработку данных в микропроцессор. В микропроцессор ной системе запросы от периферийных устройств называют прерываниями (interrupt), а процедуры с их использованием - вводом-выводом по преры ваниям. Такая процедура предполагает прием микропроцессором запроса прерывания, остановку выполнения текущих операций основной програм мы, вызов подпрограммы обслуживания прерывания с выполнением необ ходимых операций взаимодействия с устройством, отправившим запрос прерывания, и затем продолжение работы основной программы. Главное достоинство такой организации взаимодействия - отказ от постоянного программного контроля периферийных устройств в основной программе
33
микропроцессора; подпрограмма обработки прерывания вызывается для работы только тогда, когда возникает необходимость.
Для реализации процедуры прерывания в ШУ микропроцессорной сис темы предусмотрены специальные сигналы: запрос прерывания INT, по ступающий в микропроцессор от устройств ввода-вывода, подтверждение прерывания INTA, формируемый микропроцессором при переходе в режим обработки прерывания. В ряде случаев остановка рабочей программы для обслуживания прерываний недопустима, поэтому в системе команд микро процессора обычно содержатся команды запрета ("di") и разрешения ("ei") прерываний. Если командой "di" прерывания запрещены, поступающие за просы INT игнорируются и работа основной программы продолжается.
После команды разрешения прерываний "ei" в основной программе каж дый запрос INT будет обрабатываться микропроцессором. Завершив рабо чий цикл очередной команды, выполнявшейся в момент поступления за проса INT, микропроцессор приостанавливает дальнейшую работу основ ной программы, переходит в режим обработки прерывания и выдает в ШУ сигнал подтверждения INTA. Обработка прерывания производится по стандартной процедуре вызова подпрограммы, рассмотренной в предыду щем разделе.
Для обработки прерывания устройство ввода-вывода должны передать по ШД код команды "call А16", где А16 - начальный адрес подпрограммы обслуживания прерывания, и прекратить передачу запроса прерывания INT. Организация работы подпрограммы прерывания, выполняющей все необходимые операции взаимодействия с периферийным устройством, практически ничем не отличается от стандартной процедуры вызова под программы. Завершается работа подпрограммы прерывания стандартной командой возврата "ret", которая обеспечивает продолжение приостанов ленной работы основной программы. Следует помнить, что работа подпро граммы прерывания ничем не отличается от работы основной программы и поступлением нового запроса прерывания может быть приостановлена. Для управления процедурами вызова прерываний в этих подпрограммах также необходимо использовать команды управления "ei" и "di".
Организация обработки прерываний в микропроцессорной системе ос ложняется тем, что запросы прерываний могут поступать от нескольких разных периферийных устройств. Во-первых, каждое устройство требует вызова индивидуальной подпрограммы прерывания для облуживания за проса, во-вторых, запросы от разных устройств могут поступать одновре менно, и требуется арбитраж для определения очередности обслуживания. Эти функции обычно выполняют специальные устройства, называемые контроллерами прерываний [1].
Контроллер прерываний является стандартным периферийным устрой ством, обеспечивает прием запросов прерываний от нескольких других устройств, выполняет арбитраж поступивших запросов, формирование об-
34