arx230910
.pdfпроцессор не только сохраняет в стеке адрес возврата, но и записывает в него значения параметров, которые затем могут быть извлечены из стека подпрограммой. При возврате из подпрограммы через стек можно передать и результаты ее выполнения. Набор параметров вместе с адресом возврата образует так называемый стековый кадр (stack frame).
Пример такого подхода представлен на рис. 9.9. В этом примере предполагается, что в подпрограмме Р объявлены локальные переменные XI и Х2, а в подпрограмме Q, которая может быть вызвана из Р, объявлены локальные переменные У1 и Y2. На рисунке показано, что точкой возврата для каждой подпрограммы является первый элемент соответствующего стекового кадра". Далее в стеке (т.е. в ячейке, расположенной ближе к вершине стека) находится указатель на начало предыдущего стекового кадра. Это необходимо на случаи, если количество и длина списка параметров в стеке будут переменными.
Рис. 9.9. Изменение содержимого стека при вызове подпрограмм Р и Q: а — выполняется подпрограмма Р; б — подпрограмма Р вызвала подпрограмму Q.
При составлении программы вычисления арифметических выражений для таких ЭВМ используют Польскую Инверсную (бесскобочную) Запись (ПОЛИЗ) выражений. В ПОЛИЗе операция записывается не между операндами (X+Y), а после них (XY+).
Подобные выражения можно вычислять по следующему алгоритму:
1)проанализировать каждый символ бесскобочной записи формулы, начиная с крайнего левого символа, до тех пор, пока не встретится знак операции;
2)взять ближайших два операнда (если операция двуместная) или один операнд (при унарной операции), расположенные слева от обнаруженного знака операции, выполнить операцию и результат поместить в формулу на место выделенных операндов и знака опера-
71
ции;
3)если после выполнения пункта 2) формула состоит из одного значения, это значение и есть результат, то есть алгоритм завершен, в противном
случае перейти к пункту 1).
Пример использования такого алгоритма для вычисления по формуле
Y = (А + В • С)/(Е - F),
преобразованной в формулу ABC -+EF-/, (*)
приведен в нижеследующей таблице. Для определенности в ней выбраны следующие числовые значения операндов: А=8, В=2, С=5, Е=6 и F=4.
Шаг |
Формула, подле- |
Левый |
Операнды |
Результат |
Новая формула после |
|
жащаярасчету |
знак |
|
|
выполненияоперации |
1 |
825 +64 - / |
|
2 и5 |
10 |
810 + 64 - / |
2 |
8 10 + 64 - / |
+ |
8 и 10 |
18 |
1864 - / |
3 |
1864 - / |
- |
6 и4 |
2 |
182 / |
4 |
182/ |
/ |
18и2 |
9 |
9 |
Бесскобочная запись является идеальной для проведения вычислений на ЭВМ со стековой организацией.
На рис. 19. изображен расчет выражения (*) с использованием стека
Рис. 19. Пример использования стека для вычисления выражений Предполагается, что при работе со стеком на рис. 19. используются
следующие команды:
PUSH <ад> - загрузка в стек содержимого ячейки с адресом <ад.>, POP <ад> - выгрузка из стека в память по адресу <ад.>,
MUL - умножение содержимого двух верхних ячеек стека,
ADD - сложение содержимого двух верхних ячеек стека,
SUB - вычитание содержимого двух верхних ячеек стека,
DIV - деление содержимого двух верхних ячеек стека.
Заметим, что структуры реальных процессоров являются смешанными, то есть позволяют моделировать все указанные выше виды структур.
72