Файл: Микропроцессорные устройства систем управления (Ю.И. Иванов, 2005).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 1564

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Стековая адресация требует обязательной инициализации указателя сте­ ка (SP) в начале работы микропроцессорной системы. В качестве начально­ го адреса в SP обычно загружается наибольший физический адрес RAM, запись данных в стек автоматически производится от больших адресов к меньшим адресам. Корректное выполнение рабочей программы микропро­ цессорной системы требует, чтобы количество команд записи данных в стек было строго равно количеству команд чтения из стека. Кроме того, ад­ ресное пространство RAM, выделенное для стека, не должно использовать­ ся остальными компонентами программы. Другие особенности организа­ ции обработки данных в микропроцессорной системе рассматриваются в следующем разделе.

1.4.Организация обработки данных

Вразделе 1.1 показано, что в микропроцессорной системе естественный порядок выполнения команд рабочей программы, определяющийся автома­ тическим инкрементированием программного счетчика, - последователь­ ный, выполняемые команды размещены в ячейках ROM с последовательно нарастающими адресами. При необходимости этот порядок может быть изменен командами управления, основные функции которых и заключают­ ся в изменении адресов выполняемых команд в программном счетчике, С помощью команд управления можно производить обработку данных с раз­ личной организацией алгоритмов выполнения.

Один из стандартных алгоритмов организации обработки данных - за­ мена линейной последовательности однотипных операций циклическим повторением одного и того же фрагмента программы, так называемая орга­ низация циклов. Циклы в программах могут быть с заданным числом по­ вторений или с завершением цикла по заданному условию. Рассмотрим ор­ ганизацию циклов на примерах.

Пример 1 (цикл с фиксированным числом повторений):

Вычислить сумму массива из 16 чисел (целые числа без знака), которые хранятся в последовательных ячейках памяти, начиная с адреса А1, и за­ писать в память по адресу А2.

Примечание 1. Задачу можно решить линейным алгоритмом, выполнив 16 команд с прямой адресацией для чтения из памяти каждого байта данных и соответствующее число команд суммиро­ вания, получив простую, но громоздкую программу.

Примечание 2. При суммировании 16 байтов довольно высока вероятность того, что сумма выйдет за однобайтовый формат. Про­ грамма должна предусматривать формирование двухбай­ товой суммы.

Для решения задачи определим функции регистров микропроцессора: ре­ гистр В - второй байт суммы, регистр С — счетчик числа циклов сумми-

28


рования, регистровую пару HL используем для адресации, так как в каж­ дом следующем цикле суммирования байт данных должен поступать из следующей ячейки памяти.

ml: Ixi HL, Al;

начальный адрес массива чисел в HL,

т2: mvi С, 0x10 ; количество чисел массива (количество циклов),

тЗ: xra A

; очистка аккумулятора (А8=0),

т4: mov В, А

; очистка регистра В (В8-А8=0),

т5: addM

; сложение (A8=A8+M(HL)),

тб: jnC т8

; перейти к т8, если флаг переноса О,

ml: inr В

; увеличить старший байт на 1 (если флаг переноса 1),

т8: inx HL

; инкрементировать адрес в HL для следующего

;

цикла суммирования,

т9: dcr С

; декрементировать количество оставшихся циклов

; суммирования,

mlO.jnZmS

; вернуться к т5, если цикл суммирования не последний,

mil: sta A2

; сохранить в памяти младший байт суммы,

ml2: mov А, В

; переслать в аккумулятор старший байт суммы,

т!3: sta (A2+1) ; сохранить в памяти старший байт суммы,

ml4:. . . .

Команды ml-m4

выполняют инициализацию (подготовку параметров) цик­

ла; команды т5-т10 составляют тело цикла с формированием двух бай-

тов суммы, повторяющееся 16 раз; команды mll-ml3

производят сохра­

нение полученной суммы в памяти по завершению цикла.

Пример 2 (цикл с завершением по условию):

Дополним задачу примера 1 следующим условием:

суммирование чисел

должно производиться только до появления переноса в старший байт. Следовательно, суммирование может быть выполнено и для всех чисел массива, если нет переноса, и может быть прервано раньше при ненуле­ вом переносе. Сумма в любом случае имеет однобайтовый формат.

Назначение регистров С, HL микропроцессора аналогично примеру 1, ре­ гистр В будем использовать для сохранения промежуточного значения суммы.

ml: Ixi HL, Al

; начальный адрес массива чисел в HL,

т2: mvi С, 0x10

; количество чисел массива (количество циклов),

тЗ: хга А

; очистка аккумулятора (А8-0),

т4: mov В, А

; сохранение предыдущей суммы в регистре В (В8=А8),

т5: addM

; сложение (A8=A8+M(HL)),

тб: JC mil

; перейти к завершению по mil, если флаг переноса 1,

т7: inx HL

; инкрементировать адрес в HL для следующего

;

цикла суммирования,

29


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