Основные команды ЭВМ

Команды для работы с подпрограммами. Стеки. В практике программирования широко используется такой прием, как организация подпрограмм. Подпрограмма описывается один раз, а использоваться (вызываться) может из различных мест программы. При этом, после того как подпрограмма закончила свою работу, управление должно быть передано туда, откуда подпрограмма была вызвана на команду, следующую в памяти сразу за командой обра­щения к подпрограмме. Адрес команды, на которую управление пе­редается после окончания работы подпрограмм, называется адресом возврата. Очевидно, для того, чтобы начать выполнять подпрограм­му, в программный счетчик необходимо загрузить адрес первой ко­манды подпрограммы. Для осуществления возврата из подпрограммы необходимо запомнить в каком-то месте адрес возврата. Можно, на­пример, сохранить адрес возврата в одном из регистров процессора. Такой способ сохранения адреса возврата очень прост и легко реали­зуется. Однако он обладает одним существенным недостатком. Дос­таточно часто встречаются подпрограммы, которые вызывают другие подпрограммы. Пусть основная программа вызвала подпрограмму А. Она в свою очередь обратилась к подпрограмме В. Если адрес воз­врата для подпрограммы А хранится в регистре процессора, то куда девать адрес возврата при вызове подпрограммы В?

Для организации подпрограмм большинство ЭВМ используют аппаратно поддерживаемую структуру данных, называемую стеком. Стек — это структура данных, организованная по принципу: послед­ним вошел — первым вышел, т.е. последние записанные в стек дан­ные извлекаются из него первыми. В переводе с англ, stack — стопка. Аналогом стека может служить стопка тарелок. Положить тарелку в стопку можно только сверху, извлечь опять-таки только верхнюю тарелку. В ЭВМ для организации стека выделяется область оператив­ной памяти, а для ее адресации и доступа к стеку используется упо­минавшийся выше регистр — указатель стека. Указатель стека хра­нит адрес ячейки памяти, содержащей последнее помещенное в стек значение. При записи числа в стек указатель стека модифицируется так, чтобы он указывал на следующую свободную ячейку, и в нее записываются данные. При из­влечении из стека данные счи­тываются из ячейки, на кото­рую указывает указатель сте­ка, затем указатель стека мо­дифицируется так, чтобы ука­зывать на предпоследнее за­помненное значение. Обычно стеки растут в сторону умень­шения адресов, т.е. при записи числа указатель стека умень­шается, при извлечении — уве­личивается.

При организации работы с подпрограммами для сохранения адре­са возврата используется стек. Команды вызова подпрограмм CALL <адрес> работают следующим образом. Когда процессор считывает из памяти команду вызова подпрограммы, программный счетчик уве­личивается и показывает на команду, следующую за командой вызова подпрограммы. С этой команды выполнение программы должно про­должиться после окончания работы подпрограммы. Таким образом, программный счетчик после выборки команды вызова подпрограммы содержит адрес возврата. При выполнении обращения к подпрограм­ме процессор сохраняет содержимое программного счетчика в стеке. Адрес, с которого начинается подпрограмма, вычисляется процессо­ром по адресному полю команды вызова подпрограммы и помещает­ся в программный счетчик. Процессор приступает к выполнению подпрограммы. Если подпрограмма в процессе своей работы вызовет другую подпрограмму, новое значение адреса возврата будет также включено в стек поверх старого адреса возврата.

Для возврата из подпрограммы в основную программу служат команды возврата RETURN. Команды возврата из подпрограммы извлекают из стека верхний элемент и помещают его в программный счетчик. Если имели место несколько вложенных вызовов подпро­грамм, то возврат произойдет по адресу возврата, сохраненному по­сле последнего вызова, так как для хранения адресов возврата ис­пользуется стек и последний сохраненный адрес возврата будет ис­пользован первым.

Прочие команды. В ЭВМ могут быть дополнительные (специальные) команды. К их числу можно отнести команды оста­новки центрального процессора, сброса внешних устройств, установ­ки или сброса отдельных признаков и т.д.

Добавить комментарий