Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Подпрограмма и стек



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

Принцип работы стековой памяти поясняется рисунком 7.

Рисунок 7

Работа стековой памяти осуществляется по правилу: "последним записан - первым считан". Так, вначале записывается в стек (рисунок 7а) число Х1. Затем число Х1 сдвигается вверх при записи числа Х2 в стек. Тем самым любое записываемое число Хi сдвигает массив "вверх" и размещается в нижней ячейке. При чтении считывается содержимое самой "нижней "ячейки, а весь оставшийся массив чисел сдвигается "вниз". Размещая и считывая двоичные коды в указанном порядке, легко организовать поиск последнего записанного кода или организовать последовательную обработку кодов Хn,...,Х1. Однако микрооперация сдвига массива требует значительных аппаратных затрат. С целью упрощения стековой памяти используют специальный реверсивный счетчик-указатель стека SP. При использовании SP не требуется микрооперация сдвига массива, достаточно перемещения возбуждения "вверх" или "вниз" выходных шин с дешифратора адреса. Так, при записи счетчик декрементируется SP-1 и число через шину данных записывается "вверх"(в сторону младших номеров шин DC), при чтении число сначала считывается, затем устанавливается адрес следующего операнда (SP+1) для возможного считывания.

При записи (считывании) двухбайтных операндов в восьмиразрядную память последовательно инкрементируется (декрементируется) дважды SP+2. При этом запись (считывание) осуществляется побайтно в две соседние ячейки: в М(SP),М(SP+1) - при считывании, в М(SP-1), М(SP-2) - при записи. Содержимое ячеек М(SP) и М(SP+1) определяет информацию в вершине стека (SГ), которая загружается в РОН при чтении стековой памяти.

Использование стековой памяти.

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

Для организации вычислительного процесса с применением подпрограмм используется стековая область ОЗУ. Эта область резервируется программистом для осуществления прерываний при вызове подпрограмм. При этом "низ" стека фиксируется установкой его адреса в SP командой SPHL (в УОУ монитор устанавливает автоматически SP=83Е0) и, начиная с этого адреса, "вверх" (SP-1) размещаются промежуточные данные и коды адресов команд основных программ, которые должны выполняться вслед за выполнением подпрограмм. Для обращения к подпрограмме используется команда CALL аа и её модификации. Эти команды загружают в РС адрес аа начальной команды подпрограммы, а текущий адрес команды основной программы запоминается стековой памятью. Для возвращения вычислений из подпрограммы к следующей за CALL команде в подпрограмме используется команда RET и её модификации. Эта команда возвращает из стековой памяти в РС код адреса этой команды.

Рисунок 8

Подпрограмма перевода числа в аккумуляторе в дополнительный код

Следует отметить, что подпрограмма выполняет вычисления в процессоре с использованием набора тех же РОН, что и программа, поэтому, если данные основной программы, полученные в РОН перед выполнением подпрограммы, необходимы для вычислений после выполнения подпрограммы, их следует запомнить и восстановить, для чего перед обращением к подпрограмме данные заносятся в стековую память командами PUSH RP, а после её выполнения восстанавливаются командами POP RP





Дата публикования: 2014-12-08; Прочитано: 285 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...