Перейти если больше к адресу l
Первая из команд (сравнение) производит, как отмечалось выше, вычитание значения операнда B из операнда A. Если A>B, то результат будет положителен и, соответственно, флаг знака во флаговом регистре не установится. Вторая команда (условный переход) анализирует состояние флага знака и, если он не установлен, модифицирует программный счетчик так, чтобы его значение указывало на адрес L.
Команды для работы с подпрограммами. Стеки.В практике программирования широко используется такой прием, как организация подпрограмм. Подпрограмма описывается один раз, а использоваться (вызываться) может из различных мест программы. При этом, после того, как подпрограмма закончила свою работу управление должно быть передано туда, откуда подпрограмма была вызвана, на команду, следующую в памяти сразу за командой обращения к подпрограмме. Адрес команды, на которую управление передается после окончания работы подпрограммы, называется адресом возврата. Очевидно, что для того, чтобы начать выполнять подпрограмму, в программный счетчик необходимо загрузить адрес первой команды подпрограммы. Для осуществления возврата из подпрограммы необходимо запомнить в каком-то месте адрес возврата. Можно, например, сохранить адрес возврата в одном из регистров процессора. Такой способ сохранения адреса возврата очень прост и легко реализуется. Однако он обладает одним существенным недостатком. Достаточно часто встречаются подпрограммы, которые вызывают другие подпрограммы. Пусть основная программа вызвала подпрограмму А. Она в свою очередь обратилась к подпрограмме В. Если адрес возврата для подпрограммы А хранится в регистре процессора, то куда девать адрес возврата при вызове подпрограммы В?
Для организации подпрограмм большинство ЭВМ используют аппаратно поддерживаемую структуру данных, называемую стеком. Стек - это структура данных, организованная по принципу - последним вошел - первым вышел, т. е. последние записанные в стек данные извлекаются из него первыми. В переводе с английского stack - стопка. Аналогом стека может служить стопка тарелок. Положить тарелку в стопку можно только сверху, извлечь - опять-таки только верхнюю тарелку. В ЭВМ для организации стека выделяется область оперативной памяти, а для ее адресации и доступа к стеку используется упоминавшийся выше регистр - указатель стека. Указатель стека хранит адрес ячейки памяти, содержащей последнее помещенное в стек значение. При записи числа в стек указатель стека модифицируется так, чтобы он указывал на следующую свободную ячейку, и в нее записываются данные. При извлечении из стека данные считываются из ячейки, на которую указывает указатель стека, затем указатель стека модифицируется так, чтобы указывать на предпоследнее запомненное значение. Обычно стеки растут в сторону уменьшения адресов, т.е. при записи числа указатель стека уменьшается, при извлечении - увеличивается. Работа стека проиллюстрирована на рис. 5. Изначально указатель стека содержал значение 1000. После проталкивания в стек двух величин размером в два байта указатель стека будет содержать значение 996. После выталкивания одного двухбайтового числа указатель стека содержит 998.
![]() | |||||
Указатель стека | |||||
а) начальное состояние | |||||
![]() | |||||
Указатель стека | |||||
б) в стек записаны два двухбайтовых числа 1234 и 5678 | |||||
![]() | |||||
Указатель стека | |||||
в) из стека извлечено одно двухбайтовое число | |||||
Рис. 5. Иллюстрация работы стека | |||||
При организации работы с подпрограммами для сохранения адреса возврата используется стек. Команды вызова подпрограмм CALL <адрес>работают следующим образом. Когда процессор считывает из памяти команду вызова подпрограммы, программный счетчик увеличивается и показывает на команду, следующую за командой вызова подпрограммы. С этой команды выполнение программы должно продолжиться после окончания работы подпрограммы. Таким образом, программный счетчик после выборки команды вызова подпрограммы содержит адрес возврата. При выполнении обращения к подпрограмме процессор сохраняет содержимое программного счетчика в стеке. Адрес, с которого начинается подпрограмма, вычисляется процессором по адресному полю команды вызова подпрограммы и помещается в программный счетчик. Процессор приступает к выполнению подпрограммы. Если подпрограмма в процессе своей работы вызовет другую подпрограмму, новое значение адреса возврата будет также включено в стек поверх старого значения адреса возврата.
Для возврата из подпрограммы в основную программу служат команды возврата RETURN. Команды возврата из подпрограммы извлекают из стека верхний элемент и помещают его в программный счетчик. Если имели место несколько вложенных вызовов подпрограмм, то возврат произойдет по адресу возврата, сохраненному после последнего вызова, так как для хранения адресов возврата используется стек и последний сохраненный адрес возврата будет использован первым.
Прочие команды.В ЭВМ могут иметься дополнительные (специальные) команды. К их числу можно отнести команды останова центрального процессора, сброса внешних устройств, установки или сброса отдельных признаков и т.д.