ВУЗ:
Составители:
Рубрика:
4 Организация стековой памяти
Эта небольшая глава посвящена стековой памяти (или просто —
стеку) и ее командам. Стек (stack) —это специально организованное
оперативное запоминающее устройство. Оно, как правило, располагается в
ОЗУ и там занимает то место, которое ему отводит пользователь.
Стек — память безадресная. Под термином «безадресная»
подразумевается, что в команде не указывается — ни прямо, ни
косвенно — адрес ячейки стека. На самом деле источником адреса
является SP — регистр-счетчик адреса стековой памяти, или просто —
указатель стека. Его содержимое указывает всегда на адрес последней
записи в стеке.
Слово стековой памяти — двухбайтовое, поэтому в ОЗУ оно
занимает две соседние ячейки памяти. Причем, по старшему адресу
располагается старший байт слова стека. Как же она организована?
Общая идея такова: это память магазинного типа (например, магазин
автомата Калашникова). Если мы пишем (то есть заправляем патроны), то
после записи видим только последнее записанное слово.
Если читаем (разряжаем магазин), то только в обратном порядке.
И ту запись, которую зарядили первой, сможем достать только
последней. И если последним зашел, то первым выйдешь (LIFO). Такая
память действительно быстрая — не надо искать ни улицу, ни дом, ни
квартиру. Но зато пользователю всегда надо помнить, в какой
последовательности он закладывал в стек данные, чтобы потом ничего
не перепутать.
Теперь о другой особенности стековой памяти, только уже
микропроцессорных систем. Как уже отмечалось, при выполнении
команды содержимое IP увеличивается, подготавливая к выборке из
ОЗУ код следующей команды. Поэтому программы начинают
располагаться с одного края ОЗУ, со стороны младших адресов. Как
следствие, стек задумано располагать с другой стороны ОЗУ, со
стороны старших адресов. А если так, то при записи в стек вершина
стека (последняя запись), адрес которой хранится в SP, будет «расти»
вниз. Поэтому такой стек называют стеком с отрицательной вершиной.
А теперь рассмотрим динамику записи и чтения (рисунок 5).
а) Запись в стек. Записанное слово расположится: старший байт —
по адресу i-1, младший байт — по адресу i-2. Указатель стека SP = i-2 и
указывает уже на новую вершину стека.
б) Чтение из стека. После чтения содержимого ячеек с адресами i-2 и
i-1 указатель стека будет иметь значение: SP = i. Если сделать еще одно
чтение стека, то после чтения SP = i+2, и вершина стека передвинется на
адрес i+2 (хотя там может ничего и не быть). Стековая память
контролируется только самим пользователем. Рассмотрим команды
стековой памяти: ассемблер и коды операций команд стека.
30
4 Организация стековой памяти Эта небольшая глава посвящена стековой памяти (или просто — стеку) и ее командам. Стек (stack) —это специально организованное оперативное запоминающее устройство. Оно, как правило, располагается в ОЗУ и там занимает то место, которое ему отводит пользователь. Стек — память безадресная. Под термином «безадресная» подразумевается, что в команде не указывается — ни прямо, ни косвенно — адрес ячейки стека. На самом деле источником адреса является SP — регистр-счетчик адреса стековой памяти, или просто — указатель стека. Его содержимое указывает всегда на адрес последней записи в стеке. Слово стековой памяти — двухбайтовое, поэтому в ОЗУ оно занимает две соседние ячейки памяти. Причем, по старшему адресу располагается старший байт слова стека. Как же она организована? Общая идея такова: это память магазинного типа (например, магазин автомата Калашникова). Если мы пишем (то есть заправляем патроны), то после записи видим только последнее записанное слово. Если читаем (разряжаем магазин), то только в обратном порядке. И ту запись, которую зарядили первой, сможем достать только последней. И если последним зашел, то первым выйдешь (LIFO). Такая память действительно быстрая — не надо искать ни улицу, ни дом, ни квартиру. Но зато пользователю всегда надо помнить, в какой последовательности он закладывал в стек данные, чтобы потом ничего не перепутать. Теперь о другой особенности стековой памяти, только уже микропроцессорных систем. Как уже отмечалось, при выполнении команды содержимое IP увеличивается, подготавливая к выборке из ОЗУ код следующей команды. Поэтому программы начинают располагаться с одного края ОЗУ, со стороны младших адресов. Как следствие, стек задумано располагать с другой стороны ОЗУ, со стороны старших адресов. А если так, то при записи в стек вершина стека (последняя запись), адрес которой хранится в SP, будет «расти» вниз. Поэтому такой стек называют стеком с отрицательной вершиной. А теперь рассмотрим динамику записи и чтения (рисунок 5). а) Запись в стек. Записанное слово расположится: старший байт — по адресу i-1, младший байт — по адресу i-2. Указатель стека SP = i-2 и указывает уже на новую вершину стека. б) Чтение из стека. После чтения содержимого ячеек с адресами i-2 и i-1 указатель стека будет иметь значение: SP = i. Если сделать еще одно чтение стека, то после чтения SP = i+2, и вершина стека передвинется на адрес i+2 (хотя там может ничего и не быть). Стековая память контролируется только самим пользователем. Рассмотрим команды стековой памяти: ассемблер и коды операций команд стека. 30
Страницы
- « первая
- ‹ предыдущая
- …
- 28
- 29
- 30
- 31
- 32
- …
- следующая ›
- последняя »