Использование автодекрементного и автоинкрементного методов адресации для организации стека в памяти ЭВМ

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

Однако, как будет показано ниже, в ЭВМ оказывается полезным использование запоминающего устройства и другого типа, а именно — так называемого стека.

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

При последовательной записи данных (кодов, чисел) в стек загружаемые данные последовательно помещаются на вершину стека; при этом ранее записанные значения как бы «проталкиваются» вглубь стека. В каждый момент времени для чтения в стеке доступно только слово, находящееся на его вершине. При этом прочитать слово, находящееся на вершине стека, можно только один раз, так как после чтения это слово «выталкивается» из стека и на его вершине оказывается слово, записанное перед вытолкнутым (рис. 8.14).

Таким образом, записанные в стек данные могут быть последовательно прочитаны только строго в порядке, обратном

порядку их записи в стек, путем последовательного «выталкивания» этих данных из глубины стека на его вершину. При этом информация о «вытолкнутых» данных теряется.

Принцип работы стека

Рис. 8.14. Принцип работы стека

Коротко такой способ доступа к данным можно сформулировать в виде правила «последним пришелпервым вышел».

Оставляя пока в стороне вопросы целесообразности использования стека процессором ЭВМ, рассмотрим реализацию этого, как будет видно ниже, важного вида организации памяти.

Существуют процессоры, в состав которых включается отдельный набор запоминающих ячеек с доступом, организованным как у стековой памяти — через вершину стека. Однако гораздо более распространенным является реализация стека в адресном пространстве оперативной памяти ЭВМ путем выделения под него определенного количества последовательных ячеек, благо такую возможность предоставляет использование автодекрементного и автоинкрементного методов адресации ячеек оперативной памяти через специально выделенный для этих целей регистр процессора, называемый регистромуказателем стека (УС или англ. Stack Pointer — SP).

Содержимое регистрауказателя стека всегда интерпретируется процессором как адрес ячейки оперативной памяти, являющейся вершиной стека. Другими словами, в ячейке памяти, адрес которой находится в регистре — указателе стека, находится число, записанное в стек последним.

В связи с этим процедура начальной настройки стека использующей его программой (определение выделяемой под стек области оперативной памяти) состоит в обязательной начальной установке содержимого регистра — указателя стека, а именно записи в него адреса ячейки памяти, от которой будет заполняться стек.

Общепринятым является заполнение стека данными в сторону уменьшения адресов отведенных под него ячеек оперативной памяти.

Запись числа в стек, организованный в памяти ЭВМ, иллюстрируется на рис. 8.15 для шестнадцатиразрядной ЭВМ, у которой адреса двухбайтовых ячеек памяти четные.

Запись данных в стек

Рис. 8.75. Запись данных в стек

Представленное на рис. 8.15 состояние стека до записи в него числа свидетельствует о том, что в регистре — указателе стека находится адрес ячейки 776.

При записи нового числа в стек используется автодекрементный метод адресации со ссылкой на регистр — указатель стека. Поэтому для того чтобы записать в стек новое число (на рис. 8.15 это 543), вначале процессор корректирует содержимое регистра — указателя стека, уменьшая его при четных адресах ячеек памяти на 2, после чего в указываемую этим регистром ячейку памяти (теперь это 774) пересылается записываемое число (543).

При пересылке в стек следующего числа (на рисунке — 126) опять вначале происходит коррекция, то есть уменьшение содержимого указателя стека на 2 (новый адрес — 772), и затем запись следующего числа уже в эту ячейку памяти.

Таким образом, регистр — указатель стека всегда содержит адрес ячейки стека, в которой содержится число, записанное последним. Этот адрес мы и называем адресом вершины стека.

Чтение информации из стека или, как еще говорят, выталкивание числа из стека, осуществляется уже с использованием автоинкрементного метода адресации через регистр — указатель стека. Этот процесс иллюстрируется рис. 8.16.

Чтение чисел из стека

Рис. 8.16. Чтение чисел из стека

Число прочитывается из ячейки памяти, адрес которой в данный момент находится в регистре — указателе стека (на рис. 8.16 — ячейка 772), после чего (так как используется автоинкрементный метод адресации) содержимое этого регистра автоматически корректируется в сторону увеличения (новое значение — 774).

При следующей попытке чтения числа аналогичным образом оно уже будет считываться не из ячейки 772, а из ячейки 774 (то есть число 543, записанное в стек до числа 126).

Следует обратить внимание на то, что, хотя при считывании данных из ячейки, являющейся вершиной стека, используется термин «выталкивание», само число из ячейки стека никуда не исчезает. Просто коррекция регистра — указателя стека делает содержимое этой ячейки недоступным с помощью механизма работы со стеком (использования для чтения автоинкрементного метода адресации через регистр — указатель стека). При записи в стек очередного числа (на рис. 8.16 — число 361) оно записывается по адресу ячейки (772), в которой находится число, считанное («вытолкнутое») из стека непосредственно перед этим.

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

Контрольные вопросы

  • 1. Типы команд ЭВМ.
  • 2. Какая информация кодируется в команде ЭВМ?
  • 3. Какие проблемы приходится решать при кодировании команд ЭВМ?
  • 4. Что такое адресация операндов, методы адресации?
  • 5. Что такое адресный код, исполнительный адрес, чем отличаются эти понятия?
  • 6. Для чего в ЭВМ необходимо наличие разнообразных методов адресации операндов?
  • 7. Что такое подразумеваемый операнд, подразумеваемый адрес?
  • 8. Непосредственная адресация.
  • 9. Абсолютная адресация.
  • 10. Относительная адресация.
  • 11. Регистровая адресация.
  • 12. Косвенная адресация.
  • 13. Регистровый и косвенно-регистровый методы адресации.
  • 14. Косвенная адресация со смещением.
  • 15. Методы адресации, использующие регистр — счетчик команд при формировании исполнительного адреса операнда.
  • 16. Использование регистра — счетчика команд при реализации непосредственного, абсолютного и относительного методов адресации.
  • 17. Какой метод адресации следует использовать в перемещаемой программе для адресации данных, расположенных в теле программы?
  • 18. Какой метод адресации следует использовать в перемещаемой программе для адресации регистров внешних устройств?
  • 19. Что такое стек?
  • 20. Организация стека в оперативной памяти ЭВМ.
  • 21. Проиллюстрируйте изменение состояния элементов процессора при последовательной записи в стек трех чисел.
  • 22. Какие методы адресации можно использовать для записи числа в стек, для чтения числа из стека?

Глава 9

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >