русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-02-04; просмотров: 1965; Нарушение авторских прав


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

 

Команда вызова подпрограммы CALL передает управление с автоматическим сохранением адреса возврата в стеке. В поле операнда этой команды находится метка первой команды вызываемой подпрограммы.

При переходе к подпрограмме необходимо временно запомнить адрес команды, находящейся после команды CALL. Этот адрес называется адресом возврата. После того, как подпрограмма закончит свои действия, завершающая ее команда возврата RET передает управление по запомненному адресу возврата. Адрес возврата запоминается в стеке.

Вызовы могут быть внутрисегментными (тип NEAR) или межсегментными (тип FAR). В первом случае вызываемая подпрограмма находится в текущем сегменте кода, а во втором – в произвольном участке памяти.

Команды внутрисегментного перехода производят декремент SP на 2, включают в стек содержимое IP, а затем прибавляют к IP 16-битное смещение, которое интерпретируется как знаковое целое. Команды межсегментного перехода производят декремент SP на 2, включают в стек содержимое CS, снова производят декремент SP на 2, включают в стек содержимое IP, затем в IP загружается значение смещения, а в CS - сегментный адрес.

Формат команды:

CALL disp – непосредственный ближний вызов;

CALL mem/reg – косвенный ближний вызов;

CALL addr – непосредственный дальний вызов;

CALL mem – косвенный дальний вызов.

 

 

Каждая подпрограмма должна содержать минимум одну команду возврата RET, которая возвращает управление вызывающей программе. Такая передача управления осуществляется путем извлечения из стека адреса возврата, включенного в него командой вызова подпрограммы.

Команды внутрисегментного и межсегментного возврата имеют одну и ту же мнемонику RET. Тип команды, соответствующей этой мнемонике, определяется ассемблером автоматически.



Формат команды:

RET – однобайтный вариант,

RET data – трехбайтный вариант.

Однобайтная команда RET с кодом операции C3 реализует внутрисегментный возврат. Она передает слово из вершины стека в IP и увеличивает SP на 2. Синонимом данной команды является команда RETN.

Однобайтная команда RET с кодом операции CB осуществляет межсегментный возврат. Она передает слово из вершины стека в IP, увеличивает SP на 2, передает слово из вершины стека в CS и снова увеличивает SP на 2. Синонимом данной команды является команда RETF.

Трехбайтные варианты команд возврата осуществляют те же действия, что и однобайтные, а затем прибавляют содержащиеся в них данные к указателю стека. Эти команды предназначены для упрощения возврата из тех подпрограмм, параметры которых передаются в стеке. Прибавление к SP данных из RET эквивалентно удалению параметров из стека.

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

 



<== предыдущая лекция | следующая лекция ==>
Использование стека | Введение.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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