Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Булатов В.Н. Архитектура микропроцессороной системы, состав машинных команд и основы программирования микропроцессорной .pdf
Скачиваний:
97
Добавлен:
02.05.2014
Размер:
7.1 Mб
Скачать

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

1) Запись в стек.

а) Ассемблер: PUSH dst; Комментарий: Stack:=<dst>. Примечание – dst —только двухбайтовый источник, так как слова

стековой памяти —двухбайтовые.

Рисунок 5 —Организация стека

б) Машинный код операции:

2) Чтение из стека.

а) Ассемблер: POP dst; комментарий: dst:=<Stack>.

Примечание – dst —только двухбайтовый приемник.

б) Машинный код операции:

31

Рассмотрим пример.

Пример — Составить команду: Stack:=<DX>. Ответ:

а) Ассемблер: PUSH DX. б) Машинный код:

Адресную часть dst КОПа составляем по аналогии с примерами, приведенными в главе 3. Получаем после перевода в H-код: FFF2.

Существуют стековые команды и для сегментных регистров. 1) Запись в стек: Stack:=<RS>.

а) Ассемблер: PUSH RS; б) Машинный код:

2) Чтение стека: RS:=<Stack>.

а) Асеемблер: POP RS; б) Машинный код:

Физический адрес стека определяется, как уже отмечалось в главе 2, следующим образом:

A:=SS:SP.

Следовательно, основание стековой памяти (когда еще не было сделано ни одной записи) назначается так: сначала значение сегмента SS, а затем значение SP. Как это делается — было уже рассмотрено в примере с определением физического адреса для пересылки данных (глава 3, пример 5).

Подводя итог, следует заметить, что далее уже не будет столько внимания уделяться синтезу КОП, а основное внимание будет уделено

32

изучению результатов действия специальных групп команд, таких как: декремент, инкремент, сдвиг, команды АЛУ, ветвлений, ввода-вывода и прерываний.

33