Память с последовательным доступом

Память с последовательным доступом строится либо с использованием продвижения данных по цепочке элементов (по подобию с регистрами сдвига), либо с хранением данных в адресном ЗУ при соответствующем управлении адресом доступа /4/.

Основными представителями такого вида памяти являются видеопамять, буфер FIFO, стек. Более подробно остановимся на организации памяти в виде стека.

Стек – это однонаправленная очередь, в которую данные помещаются и из которой извлекаются строго в определённом порядке. Стековая память обеспечивает такой режим работы, когда информация записывается и считывается по принципу «последним записан – первым считан» (LIFO – Last Input First Output). Такая память используется для временного хранения данных, например, для запоминания и восстановления регистров процессора (контекста) при обработке подпрограмм и прерываний. Работу стековой памяти поясняет рисунок 7.3 /6/.

Когда слово A заносится в стек, оно располагается в первой свободной ячейке. Каждое следующее записываемое слово перемещает всё содержимое стека на одну ячейку вверх и занимает освободившуюся ячейку. Запись очередного слова после H приводит к переполнению стека, поскольку он рассчитан на 7 слов, и потере кода A.

Рисунок 7.3 – Логика работы стековой памяти

Считывание информации из стека осуществляется в обратном порядке, т.е., начиная с кода H, который был записан последним. Доступ к произвольному коду в стеке формально недопустим до извлечения всех данных, записанных позже.

Занесение информации в стек называется включением, считывание информации из стека – извлечением.

Как отмечается в /6/, в настоящее время наиболее распространённым является внешний или аппаратно-программный стек, в котором для хранения информации отводится область оперативной памяти. Обычно под стек отводится участок памяти с наибольшими адресами, а стек расширяется в сторону уменьшения адресов.

На рисунке 7.4 показана схема организации стека для процессора Intel 8086.

Под стек выделяется отдельный сегмент – сегмент стека, начальный адрес которого помещается в соответствующий сегментный регистр – SS. Адресация стека обеспечивается специальным регистром – указателем стека SP, в который предварительно помещается наибольший адрес области основной памяти, отведённой под стек (дно стека). Адрес последнего включённого в стек элемента называется вершиной стека (TOS – Top Of Stack).

Рисунок 7.4 – Схема организации стека для процессора Intel 8086

Для работы со стеком существуют две основные операции: добавление элемента в вершину стека (PUSH) и извлечение элемента из вершины стека (POP). Команда PUSH имеет один операнд, который может быть непосредственным значением, 2-байтовым регистром или адресом ячейки памяти. При записи в стек данного сначала производится уменьшение на 2 содержимого указателя стека SP (стек оперирует словами), которое затем используется в качестве адреса ячейки, куда и производится запись. Команда POP также имеет один операнд, который может быть 2-байтовым регистром. При считывании слова из стека в качестве адреса этого данного берётся текущее содержимое указателя стека, а после извлечения данного содержимое SP увеличивается на 2. Рассмотрим следующий пример:

push 35h

push 57h

pop ax

Состояние стека при выполнении указанных выше команд иллюстрирует рисунок 7.5.

Рисунок 7.5 – Изменение состояния стека

Изначально стек пуст, и регистр SP указывает на ячейку за дном стека. При включении первого значения содержимое SP уменьшается на 2 и затем по полученному адресу помещается 35h. Аналогично со вторым значением. При извлечении слова из стека в регистр AX помещается значение из вершины стека, т.е., 57h, а содержимое SP увеличивается на 2.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: