Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры МПТ 2012 ДИМОН.doc
Скачиваний:
38
Добавлен:
16.04.2019
Размер:
2.02 Mб
Скачать

23.Система команд, режимы адресации аа

Микроконтроллеры типа AVR серий ATmega16 и их модели имеют сокращённые (по сравнению с процессорами универсальных ЭВМ) наборы команд-инструкций. Это вместе с особенностями архитектуры позволяет значительно сократить число машинных тактов, затрачиваемых на исполнение команды, и повысить скорость выполнения типичных для МК программ.

Для программирования используется как язык ассемблера, так и языки высокого уровня (в частности, язык Си). Наиболее доступной интегрированной средой программирования на языке ассемблера является программный пакет AVR Studio. Он включает в себя текстовый редактор, транслятор-ассемблер, отладчик-симулятор и программу загрузки Flash-памяти и EEPROM через специальное устройство-программатор. Язык ассемблера состоит из набора команд-инструкций, в которых можно использовать простые операторные выражения, и директив, используемых на этапе трансляции-ассемблирования.

Базовый набор команд подразделяется на арифметико-логические, передачи данных, переходов и битовые. Команда состоит из кода операции и одного или двух операндов. Ряд команд не содержит операндов. Операндом может являться: либо значение, непосредственно заносящееся в команду; либо адрес ячейки, содержащей значение, – прямая адресация; либо адрес ячейки, содержащей адрес, – косвенная адресация.

Режимы адресации

Реализовано пять различных способов адресации для охвата всей памяти данных:

- регистровая адресация, слово команды (16 бит) содержит поле адреса одного, двух регистров РОН или регистров ввода-вывода;

- прямая адресация, когда второе слово команды содержит 16-битный адрес, что позволяет адресоваться ко всей памяти данных (при 1К SRAM ATmega16 используются 10 бит);

- косвенная адресация, когда адрес операнда содержится в регистре X, Y или Z (регистры R26 – R31 из файла регистров используются как регистры-указатели);

- косвенная адресация со смещением, когда в слове команды содержится 6 бит смещения, что позволяет адресовать 63 ячейки, начиная с адреса, указанного в регистрах Y или Z;

- косвенная с предварительным декрементом (преддекрементом -1) или косвенная с последующим инкрементом (постинкрементом +1), когда значения адресных регистров X, Y и Z соответственно декрементируются до выполнения инструкции или инкрементируются после выполнения инструкции.

32 рабочих регистра общего назначения, 64 регистра ввода-вывода и 1024 байт внутреннего статического ОЗУ данных в ATmega16 доступны с помощью всех этих режимов адресации.

Для адресации в программной памяти используются следующие варианты:

- Адресация константы кода памяти с использованием команды LPM (Load Program Memory). Адрес байта константы определяется содержимым регистра Z. Старшие 15 битов определяют адрес слова (что позволяет адресовать память до 32Кслов, внутри кристалла имеем только 8К адресов). Состояние младшего бита определяет выбор младшего байта (LSB = 0) или старшего байта (LSB = 1).

- Непосредственная адресация памяти программ с помощью команд безусловного перехода JMP и вызова подпрограмм CALL. Выполнение программы продолжается с адреса, записанного непосредственно в втором слове команды. При программировании адрес в команде представляется в виде метки (JMP Label, а в программе где-то должна быть эта метка Label:), при трансляции ссылка на метку заменяется конкретным адресом метки.

- Косвенная адресация памяти программ с помощью команд косвенного (Indirect) перехода IJMP и вызова подпрограмм ICALL. Выполнение программы продолжается с адреса, содержащегося в регистре Z (т.е. счетчик команд загружается содержимым регистра Z).

- Относительная адресация памяти программ с помощью команд относительного (Relative) перехода RJMP и вызова подпрограмм RCALL. Выполнение программы продолжается с адреса PC+k+1. Значение относительного смещения k может быть от -2048 до +2047. При программировании смещение в команде представляется в виде метки (RJMP Label, а в программе где-то должна быть эта метка Label:), при трансляции ссылка на метку заменяется конкретным значением смещения адреса метки относительно содержимого программного счетчика к началу программы (отрицательное k) или далее по программе (положительное k).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]