Материал: Микропроцессорные устройства систем управления (2005)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

коды программы, и константы - данные, которые не изменяются в процессе выполнения программы микропроцессорной системы.

Соотношение между объемами RAM и ROM в адресном пространстве памяти зависит от назначения микропроцессорной системы. В универсаль­ ных средствах таких, как персональный компьютер, объем ROM относи­ тельно небольшой. Из программ, необходимых для работы, в ROM персо­ нального компьютера постоянно хранится только BIOS - комплекс про­ грамм, обеспечивающих загрузку в RAM других программ с внешних но­ сителей информации (например, с hard-диска). Набор задач жестко не огра­ ничен и для решаемых задач выбираются и загружаются в RAM с помощью BIOS требуемые компоненты программного обеспечения.

Для специализированных микропроцессорных систем, к которым отно­ сятся и средства автоматизации, обычно и круг задач, и программы, тре­ буемые для их решения, неизменны и могут постоянно храниться в памяти. Поэтому в таких средствах удельный вес ROM в адресном пространстве практически всегда существенно превышает удельный вес RAM. В даль­ нейшем будем рассматривать вопросы организации работы микропроцес­ сорной системы, полагая, что все программы хранятся в ROM и имеется RAM относительно небольшого объема только для хранения данных.

Задание определенных физических адресов для областей RAM и ROM в общем случае может быть произвольным. Однако необходимо учитывать следующую особенность работы микропроцессора: процедура начального сброса (reset), с которой обязательно должна начинаться работа, как прави­ ло, задает в программном счетчике нулевой начальный адрес программы. По начальному адресу памяти должно размещаться начало рабочей про­ граммы микропроцессора, которая обеспечивает корректный старт работы микропроцессорной системы. Область памяти с этими начальными адреса­ ми, следовательно, должна принадлежать области ROM. Чтобы адресные пространства сделать непрерывными, обычно адреса ROM задают, начиная с наименьших адресов, а адреса RAM - в оставшемся диапазоне наиболь­ ших физических адресов.

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

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

25

Самый простой вид - непосредственная адресация. В этом случае байт данных помещается непосредственно в коде команды. Примеры: команда mvi By D8 производит загрузку в регистр В байта данных D8 (38=08), со­ держащегося в коде команды; команда sui D8 производит вычитание из байта аккумулятора байта данных D8 (A8=A8-D8). Команды с непосред­ ственной адресацией часто называют операциями с константами. Так как данные при непосредственной адресации являются элементами кодов про­ граммы, эти данные не могут быть изменены. Неизменность данных явля­ ется свойством и основным ограничением этого вида адресации, который в действительности применяется только для операций с константами.

Для прямой адресации физический адрес ячейки памяти (ША) указыва­ ется в коде команды: например, команда sta A16 производит запись байта данных из аккумулятора в ячейку памяти с двухбайтовым адресом А16 (А8-М(А16)). При такой адресации передаваемые байты данных являются обычными переменными и могут принимать любые допустимые значения. Существенное ограничение - обмен данными по командам с прямой адре­ сации всегда происходит с одной и той же ячейкой памяти, адрес которой указан в команде. Из-за этого ограничения и громоздкого формата команд, содержащих в своем коде двухбайтовый адрес, прямая адресация также имеет ограниченное применение. В алгоритмах обработки данных доста­ точно часто требуется адрес сделать переменным, чтобы можно было им программно управлять.

Более универсальна регистровая адресация, называемая также косвенной адресацией. При регистровой адресации в качестве кода адреса использует­ ся содержимое регистровой пары (два байта). Примеры: команда Шах DE производит загрузку в аккумулятор байта данных из ячейки памяти с адресом, указанным в регистровой паре DE (A8=M(DE)); команда ana M вы­ полняет конъюнкцию байтов аккумулятора и ячейки памяти с адресом, указанным в регистровой паре HL (A8=(A8)&M(HL)). В большинстве ко­ манд с регистровой адресацией микропроцессора Intel 8080 код адреса хра­ нится в регистровой паре HL (H - старший байт адреса, L - младший байт адреса). Регистровая адресация, во-первых, упрощает формат команд - в явном виде код команды не содержит двухбайтового адреса; и, во-вторых, адрес можно изменять, выполняя с байтами адреса любые операции из на­ бора команд микропроцессора. Возможность преобразования адреса при работе программы является важнейшим свойством этого вида адресации и широко используется в различных алгоритмах.

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

26

Например, команда Ixi HL, DLDH производит загрузку двух байт (DJ3 и DH8) в регистры L и Н (L8 = DL8, H8 = Он8), используя непосредственную адресацию, а команда inx HL выполняет инкремент содержимого реги­ стровой пары HL, как двухбайтовой переменной (HL=HL+1).

Четвертый вид - стековая адресация, в первую очередь, предназначена для работы с подпрограммами. Более подробно процедуры с подпрограм­ мами будут рассмотрены в следующем разделе. Следует помнить, что стек в микропроцессорной системе - не отдельное запоминающее устройство, а способ адресации RAM с особым алгоритмом формирования адреса. Адрес RAM для операций со стеком всегда определяется специальным адресным регистром - указателем стека (SP) микропроцессора (рис. 2).

В командах, использующих стековую адресацию, адрес в явном виде ни­ когда не указывается и определяется следующим алгоритмом доступа к данным: "последний вошел - первый вышел". Обычно этот алгоритм реа­ лизуется преобразованием содержимого указателя стека: при записи дан­ ных указатель стека (SP) автоматически декрементируется, а при чтении данных указатель стека (SP) автоматически инкрементируется. Такое пре­ образование адреса в указателе стека обеспечивает в командах чтения сле­ дующий порядок доступа: первым считывается байт данных, записанный последним, вторым - записанный предпоследним, и т.д. Следовательно, порядок записи данных в стек однозначно определяет порядок поступления данных при чтении, а стековая адресация не позволяет производить незави­ симый доступ к любым данным, как другие виды адресации.

Стековая адресация применяется из-за упрощенного формата команд и процедур обмена данными в алгоритмах, требующих однократной записи в память и затем однократного считывания данных из памяти в строго задан­ ной последовательности. Команды со стековой адресацией микропроцессо­ ра Intel 8080 производят обмен двухбайтовыми данными.

Рассмотрим пример применения стека для хранения данных:

ml: push

ВС

; B8-+RAM(SP-1), C8-+RAM(SP~2),

SP=SP-2

m2: push

DE

; D8-*RAM(SP~3), E8-+RAM(SP-4),

SP^SP-4

;команды программы, изменяющие данные в

;регистрах В, С, D, Е

 

; однако данные в этих регистрах должны быть восста-

 

; новлены для дальнейшего использования в программе.

тЗ: pop

DE

; RAM(SP-4)-+E8, RAM(SP-3)->D8,

SP=SP-2

m4: pop

ВС

; RAM(SP-2)-+C8, RAM(SP-1)-+B8,

SP^SP

Комментарии в каждой строке примера поясняют характер выполняемых операций.

27

Стековая адресация требует обязательной инициализации указателя сте­ ка (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

Источник: https://studfile.net/preview/16521245/