Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Команды обращения к подпрограммам
Очень часто одну и ту же процедуру нужно выполнить в нескольких точках программы. Вместо того чтобы повторно записывать команды этой процедуры в каждой точке, удобнее и эффективнее оформить ее в виде подпрограммы. На рис.4.11 показано взаимодействие главной программы и подпрограммы. Разумеется, должен быть обеспечен возврат в главную программу в ту же точку, откуда было сделано обращение, или в некоторую точку, четко определенную относительно точки обращения. Общий подход к решению этой проблемы состоит в том, чтобы предусмотреть специальные команды, с помощью которых можно было бы запомнить исходную точку, а затем вернуться к ней. В нашем иллюстративном микропроцессоре эти функции выполняют две команды: «переход на подпрограмму» (JMS) и «возврат из подпрограммы» (RET). Информационные потоки для этих команд приведены на рис 4.12. Сначала рассмотрим команду JMS. По третьему синхроимпульсу третьего машинного цикла содержимое регистра адреса данных, равное адресу входа в подпрограмму, поступает на программный счетчики, тем самым осуществляется переход. Одновременно старое содержимое программного счетчика, которое уже было продвинуто и указывало на следующую за JMS команду, помещается в стек. После завершения подпрограммы команда RET позволяет вернуться в главную программу. При ее выполнении стек поднимается, и на программном счетчике восстанавливается адрес команды в главной программе на которую следует вернуться. Совершенно ясно, что та же пара команд позволяет подпрограмме обратиться в свою очередь к другой подпрограмме и т. д. Это называется вложенными обращениями или вложенными подпрограммами. Единственное ограничение на число уровней вложения налагается размерами стека, поскольку, когда стек опускается, содержимое его нижнего регистра теряется. Поскольку подпрограмма — это тоже программа. то ей нужны данные, над которыми производятся вычисления. Вообще говоря, эти данные, называемые параметрами или аргументами подпрограммы зависят от той точки, откуда было сделано обращение к подпрограмме. Один из простейших способов передачи параметров — это загрузка их в общие регистры непосредственно перед выполнением команды JMS. При таком подходе подпрограммы составляются в предположении, что необходимые параметры будут находиться в общих регистрах, откуда их можно будет легко выбрать. Аналогично подпрограмма может оставить в общих регистрах вычисленные ею результаты для передачи их главной программе. Более детально организацию подпрограмм мы рассмотрим в следующей главе.
|