Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП МПУ-13.doc
Скачиваний:
7
Добавлен:
01.04.2025
Размер:
5.78 Mб
Скачать
    1. Структура и адресация памяти программ. Ветвления, циклы, подпрограммы, и группа команд передачи управления

Адресация в цифровых устройствах использует двоичное кодирование. Для адресации двух ячеек достаточно одной линии (адреса 0, 1), четырех ячеек – двух линий (адреса 0, 1, 2, 3). В общем случае n линий адресуют до N = 2n ячеек, для адресации N ячеек необходимо число линий равное ближайшему большему целому n = log2(N).

8 разрядов адресуют лишь 256 ячеек, поэтому в 8-разрядных МК для адресации памяти программ (нередко и для памяти данных) используют 16-разрядные регистры, позволяющие адресовать до 65536 = 64 К ячеек. Здесь и далее следует отличать 1 к = 1000 и 1 К = 1024 = 210.

Режимы адресации описывают способы кодирования (в машинной команде) адреса данных или перехода в программе. Различают прямую и непрямую (косвенную) адресацию.

При прямой адресации адрес является константой и входит в код команды. При адресации до 64 К адрес занимает 2 байта, поэтому длина команды получается 3-4 байта. Разделение большого адресного пространства на подобласти уменьшает длину команды, например, адресация только РОН, регистров ввода/вывода и пр.

Многочисленные варианты косвенной адресации используют регистры-указатели, содержимое которых формируется до выполнения команды с этим типом адресации или модифицируется во время выполнения. Косвенная адресация позволяет работать с вычисляемыми, а не только константными адресами, без чего работа с массивами была бы затруднительна.

Области памяти

Как было отмечено, память МК разделяется на память программ (ПП) [Program Memory] и память данных (ПД) [Data Memory].

Память программ обычно энергонезависима (постоянное запоминающее устройство – ПЗУ), так как управляющая программа редко модифицируется. Память данных состоит из энергозависимой части (оперативное запоминающее устройство – ОЗУ) – собственно рабочей ПД, и энергонезависимой (перепрограммируемое ПЗУ) для хранения редко изменяемых констант (настроек прибора).

Области адресации ПП и ПД разделены за счет выделения для ПП собственной магистрали выборки. Это позволяет производить одновременную выборку команд и данных.

Память программ

Память программ служит для хранения кодов программы и констант. Физическим носителем ПП обычно выступает один из видов энергонезависимого [nonvolatile] постоянного запоминающего устройства (ПЗУ) [ROM: Read Only Memory].

В МК семейства AVR память программ представлена ячейками размером 16 бит = 2 байта = 1 слово [word], количество которых варьируется от 512 до 65 536 слов (1 … 128 килобайт), что требует от 9 до 16 разрядов адреса соответственно. Это и определяет разрядность регистра счетчика команд (СК) [PC: Program Counter]. При размещении в ПП констант предоставляется доступ к отдельному байту, что усложняет обращение по адресам больше 65 535. Физическим носителем ПП является резидентное (встроенное в МК) электрически стираемое и программируемое постоянное запоминающее устройство (ЭСППЗУ) [FlashROM].

Команды передачи управления

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

Ветвления безусловные представлены командами перехода и различаются лишь способом адресации перехода RJMP (относительная 12 бит), IJMP (косвенная Z-указатель 16 бит), JMP (прямая 16 бит).

Ветвления условные можно разделить на подгруппу ветвлений по состоянию флагов состояния процессора и подгруппу пропуска следующей команды.

Первая из указанных подгрупп представлена командами BRxx (от branch – ветвление) с относительным механизмом адресации 7 бит. Эти команды флага состояния процессора (или их сочетания). Состояние флагов процессора изменяется при выполнении арифметико-логических команд, а также команд сравнения TST, CP, CPC, CPI.

Команды пропуска (skip) проверяют состояние бита РОН (SBRS, SBRC), либо бита РВВ (SBIS, SBIC), либо сравнивает содержимое двух РОН (CPSE) и при выполнении условия пропускает следующую команду (PC + 2/3  PC), иначе выполняет следующую (PC + 1  PC). В этих командах адреса перехода предопределены, поэтому нет операнда адреса перехода.

Механизм подпрограмм обеспечивает многократное выполнение отдельного алгоритма или его части при экономии памяти программ. Использование механизма подпрограмм наряду с механизмом макросов развивает модульность программы и упрощает процесс отладки и развития программы.

Тело подпрограммы (п/п – subroutine) состоит из одной и более машинных команд. Адрес расположения первой команды называется точкой входа, для удобства она обозначается символической меткой. В этом случае команда вызова п/п (CALL, RCALL, ICALL, EICALL) в качестве операнда использует эту метку для вычисления адреса перехода. После выполнения запланированных в п/п действий необходимо вернуться к команде, следующей за командой вызова п/п. Для этого необходима хотя бы одна команда возврата из п/п (RET). Применение команд вызова п/п и возврата из п/п приводит к некоторым затратам времени (3–4 м. ц.) и памяти программ (1–2 слова на вызов и 1 слово на возврат из п/п), поэтому при длине п/п менее 5–8 команд эффективнее использовать механизм макрокоманд.

При необходимости передавать в п/п параметры и/или получать из п/п некоторые данные (результат) используются различные механизмы. Один из самых простых и распространенных – через РОН: п/п «знает» номера регистров, через которые получает входные параметры и по которым должна расположить возвращаемые значения.