Вопрос 18. Стековая память

Стековая память является безадресной памятью с последовательным доступом.

В стековом ЗУ ячейки образуют одномерный массив, в котором соседние ячейки связаны друг с другом разрядными цепями передачи слов. Слова становятся доступными для чтения и записи только в определенном порядке. Каждое хранящееся слово привязано не к конкретной ячейке, а к своему положению относительно других хранящихся слов. Слова могут перемещаться по ячейкам, но при этом сохраняют свою взаимную упорядоченность. Поэтому достаточно обеспечить средства для чтения только определенной ячейки. Конкретное слово считывается в тот момент, когда в процессе перемещения по памяти оно оказывается в ячейке, из которой может производиться чтение. Аналогично достаточно обеспечить средства для записи только в определенную ячейку ЗУ.

В зависимости от того, как перемещаются слова в ЗМ, стековые ЗУ подразделяются на два основных типа:

1) память типа очереди или память типа FIFO (First In First Out – первым вошел, первым вышел);

2) память магазинного типа или стек.

Память типа очереди или память типа FIFO. В ЗУ этого типа слова перемещаются всегда в одном направлении от входа к выходу. Данные становятся доступными для считывания в том порядке, в котором производилась запись.

Возможно два варианта организации памяти типа FIFO. В первом случае информация записывается в ячейку в начале цепочки и считывается в ее конце. Запись и чтение информации производятся синхронно. ЗУ этого типа используются в качестве задержки на N тактов, где N – количество ячеек в памяти. Во втором случае информация записывается в первую свободную ячейку. Запись и чтение информации производятся асинхронно. ЗУ этого типа используются в качестве буферов с целью согласования различных скоростей информационных потоков двух компонентов микропроцессорной системы.

Стек. В ЗУ этого типа слова считываются в порядке, обратном порядку записи, т. е. по правилу LIFO (Last In First Out – последним вошел, первым вышел). Стек можно представить в виде вертикально расположенного массива ячеек. Доступ осуществляется всегда к верхней ячейке, которая называется вершиной стека. При записи в вершину стека все слова сдвигаются вниз на одну ячейку, а содержимое нижней ячейки теряется, т. е. стек опускается и происходит операция вталкивания в стек (PUSH). При чтении из вершины стека происходит обратное действие, т. е. стек поднимается и происходит операция выталкивания из стека (POP). При этом становится доступным слово из второй ячейки.

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

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

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

Во многих приложениях применение стека оказывается очень удобным и естественным. Для таких приложений характерно использование памяти с выборкой не по произвольным адресам слов, а на основе взаимной их упорядоченности. Например, при соответствующем расположении операндов в стеке можно вычислять выражения полностью безадресными командами, указывающими только вид операции. Такая команда извлекает из стека в соответствии с кодом операции один или два операнда, выполняет над ними предписанную операцию и заносит результат в стек. Вычисления с использованием стековой памяти удобно описывать и программировать с помощью обратной польской (бесскобочной) записи арифметических выражений. Безадресные команды на основе стековой адресации предельно сокращают формат команд, экономят память и способствуют повышению производительности МП. Однако при такой структуре команд возникают осложнения с построением команд передачи управления и работы с портами ввода/вывода. Поэтому организация вычислений с использованием стековой памяти нашла применение только в специализированных МП. Такие микропроцессоры называют стековыми МП.

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