і
МИКРОКОНТРОЛЛЕРЫ
J
которой может быть получен сложени-
ем содержимого сегментного регистра
#А с числом 5. Казалось бы, что введе-
ние механизма сегментной адресации
должно было бы чуть ли не вдвое уве-
личить объем программ - ведь сегмен-
тные регистры теперь требуется загру-
жать нужными значениями едва ли не
перед каждой командой. В действи-
тельности же, однако, ничего подобно-
го не происходит, потому что обраба-
тываемые тем или иным участком про-
граммы данные редко располагаются
более чем в одном-двух сегментах, так
что никаких “беспрерывных” перезагру-
зок при сегментной адресации делать
не приходится. Автор может сослаться
на собственную статистику: у него на-
писана
для
микроконтроллера
КР1878ВЕ1 одна программа, имеющая
размер 1021 команду из 1024 возмож-
ных! Так вот - в этой (далеко не опти-
мально написанной) программе команд
загрузки сегментных регистров всего
72, то есть менее 7% от объема кода.
Регистры косвенного адреса - это
еще один, альтернативный, механизм
доступа к адресному пространству дан-
ных микроконтроллера. В некотором
роде работа их напоминает работу сег-
ментных регистров, но в них хранится
не адрес начала того или иного сегмен-
та, а сразу готовый адрес нужного ре-
гистра или ячейки ОЗУ. Эти регистры
используются в том случае, когда ад-
рес обрабатываемой ячейки ОЗУ или
регистра не известен заранее, а вычис-
ляется при работе самой программы.
Записать такой неизвестный заранее
адрес в команду мы не можем (коман-
ды, напоминаем читателю, хранятся в
отдельном ПЗУ). В этом случае при
программировании контроллера такой
динамически вычисленный
адрес
сначала заносится в одну из регистро-
вых пар (IR0 или IR1), а в команде ука-
зывается, что адрес нужной ячейки не-
обходимо взять из одного из этих реги-
стров. Для указания в команде исполь-
зовать регистр IR0 в качестве адреса
ячейки задается конструкция %d6, а для
указания использовать регистр IR1 -
конструкция %d7. Обратите внимание
- хотя по всем правилам такая запись
должна была бы обозначать для мик-
роконтроллера сегментный регистр #D
плюс смещение 6 (или #D плюс 7 соот-
ветственно), но именно зти две и толь-
ко эти две комбинации рассматривают-
ся микроконтроллером
совершенно
особым образом.
Как устроены регистры IR0 и IR1 ? В
четных регистрах (т.е. #4 и #6) хранит-
ся исполнительный адрес той ячейки
ОЗУ или того регистра внешнего уст-
ройства, к которому необходимо обра-
титься с помощью IR0 или IR1. Обрати-
те внимание - адрес хранится
испол-
нительный,
т.е. именно тот, который
фигурирует в таблице, описывающей
адресное пространство данных микро-
контроллера: емкость регистров #4 и #6
- 8 бит и необходимости в применении
сегментной адресации при работе с
ними не возникает. В нечетных же ре-
гистрах хранится следующая информа-
ция
(таблица 10).
Обычно говорят, что регистры #4 и
#6 - регистры адреса, а регистры #5 и
#7 - управляющие регистры для регис-
тровых пар IR0 и IR1.
Управляющие биты регистров тре-
буют некоторого пояснения. Если в ре-
гистре #5 задана нулевая комбинация
битов, микроконтроллер рассматри-
вает конструкцию %d6 не как особое
указание на использование регистра
IR0, а как ячейку со смещением 6 отно-
сительно регистра #D, т.е. это, факти-
чески, указание не использовать меха-
низм косвенной адресации. Если в ре-
гистре #5 находится комбинация битов
01000000, то адрес ячейки, участвую-
щей в операции, команда берет из ре-
гистра IR0, но, помимо этого, после
окончания команды, она увеличит ад-
рес в этом регистре на единицу, т.е. “пе-
редвинет” его, например, к следующей
ячейке ОЗУ. Этой возможностью удоб-
но пользоваться, например, когда не-
обходимо заполнить большое количе-
ство подряд идущих ячеек ОЗУ одно-
типной информацией - тогда не при-
дется каждый раз перед занесением
информации заполнять нужным адре-
сом регистр IR0 или IR1. Комбинация
бит 10000000 в регистре #5 также вклю-
чает регим косвенной адресации, но
после выполнения команды “передви-
гает” адрес на предыдущую ячейку.
Комбинация битов 11000000 также
включает режим косвенной адресации,
но после выполнения команды ничто
никуда не “передвигает”. Для регистра
#7 эти комбинации битов также дей-
ствительны, но комбинация ОООООххх
выполняет особую роль: обнаружив та-
кую комбинацию, микроконтроллер об-
ращается в команде не к адресному
пространству данных, а к адресному
пространству команд! А поскольку ад-
ресное пространство команд имеет раз-
мер 2048 байт (1024 слова=2048 байт),
8 битов регистра #6 явно не хватит, что-
бы обратиться к любому байту адрес-
ного пространства команд (для этого
необходимо 11 бит), поэтому адрес бай-
та в адресном пространстве программ
записывается сразу в два регистра:
Таблица 10
Регистр #5
Назначение
Регистр #7
Назначение
ооИоооо
Конструкция
%б6
рассматривается как сегмент
#0
+ смещение
6
ОООООххх
С помощью регистра ІЙ1 обращаются к ПЗУ
программ
01000000
Адрес обрабатываемой ячейки находится в
регистре #4. После выполнения команды
содержимое регистра #4 увеличивается на
единицу
01000000
Адрес обрабатываемой ячейки находится в
регистре
#6.
После выполнения команды
содержимое регистра
#6
увеличивается на
единицу
10000000
Адрес обрабатываемой ячейки находится в
регистре #4. После выполнения команды
содержимое регистра #4 уменьшается на
единицу
10000000
Адрес обрабатываемой ячейки находится в
регистре
#6.
После выполнения команды
содержимое регистра
#6
уменьшается на
единицу
11000000
Адрес обрабатываемой ячейки находится в
регистре #4. После выполнения команды
содержимое регистра #4 не изменяется
11000000
Адрес обрабатываемой ячейки находится в
регистре
#6.
После выполнения команды
содержимое регистра
#6
не изменяется
{
45
Радиолюбитель - 0 6 /2 0 0 5 |
предыдущая страница 45 Радиолюбитель 2005-06 читать онлайн следующая страница 47 Радиолюбитель 2005-06 читать онлайн Домой Выключить/включить текст