Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Команды возврата из подпрограмм




Косвенный вызов подпрограммы — команды ICALL и EICALL

Абсолютный вызов подпрограммы — команда CALL

Относительный вызов подпрограммы — команда RCALL

Команды вызова подпрограмм

Как и для реализации безусловных переходов, для вызова подпрограмм в микроконтроллерах семейства Mega имеются три команды:

- команда относительного вызова RCALL;

- команда абсолютного вызова CALL;

- команда косвенного вызова ICALL.

Эти команды работают так же, как и соответствующие команды безусловного перехода.

 

Сначала команда RCALL сохраняет в стеке адрес возврата — текущее значение счетчика команд, увеличенное на 1. Затем содержимое счетчика команд увеличивается или уменьшается на некоторое значение, являющееся операндом команды. Поскольку операнд представляет собой 12-битное число, максимальная величина перехода составляет от -2047 до +2048 слов (±4 Кбайт).

В программах в качестве операндов этой команды, как и в случае команды RJMP, используются метки. Ассемблер сам вычисляет величину перехода и подставляет это значение в слово команды.

 

При выполнении команды после сохранения в стеке адреса возврата в счетчик команд загружается число, являющееся операндом команды. С помощью этой команды можно осуществлять вызов в пределах всего адресного пространства имеющихся на сегодняшний день микроконтроллеров AVR.

Команда абсолютного вызова подпрограмм выполняется за 4 такта (в моделях ATmega2560x/2561x — за 5 тактов).

 

Команда ICALL сначала сохраняет в стеке адрес возврата. Затем в счетчик команд загружается содержимое индексного регистра. Так как индексный регистр — 16-битный, то максимально возможная величина перехода составляет 128 Кбайт (в моделях с объемом памяти программ более 128 Кбайт старшие биты счетчика команд обнуляются).

В микроконтроллерах ATmega2560x/2561x появилась команда расширенного косвенного вызова подпрограмм — EICALL. Эта команда после сохранения в стеке адреса возврата копирует в счетчик команд содержимое регистра Z и регистра ввода/вывода EIND.

Во всех моделях, кроме ATmega2560x/2561x, команда ICALL выполняется за 3 такта. В моделях ATmega2560x/2561x обе команды — ICALL и EICALL - выполняются за 4 такта.

 

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

Обе команды восстанавливают из стека содержимое счетчика команд, сохраненное там перед переходом к подпрограмме. Команда возврата из подпрограммы RETI дополнительно устанавливает в 1 флаг общего разрешения прерываний I регистра SREG, сбрасываемый аппаратно при возникновении прерывания. На выполнение каждой из команд возврата из подпрограммы требуется 4 или 5 (в моделях ATmega2560x/2561x) тактов.

 




Поделиться с друзьями:


Дата добавления: 2015-07-13; Просмотров: 1181; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.