- •Введение
- •1 Основы микропроцессорной техники
- •1.1 Классификация команд и архитектура ЭВМ
- •1.2 Секционный микропроцессор.
- •1.3 Однокристальный микропроцессор.
- •1.4 Микропроцессорный модуль.
- •3.1 Тип кода операции с dst и rsc
- •3.2 Тип кода операции с dst. Группа коман MOV
- •4 Организация стековой памяти
- •5 Команды сдвигов и приращений.
- •5.1 Команды приращений
- •5.2 Команды сдвига
- •6 Арифметико-логические команды
- •6.1 Команды сложения
- •6.2 Команда сложения с учетом переноса
- •6.3 Операция вычитания
- •6.4 Команда вычитания с учетом заема
- •6.5 Команда логической функции ИЛИ
- •6.6 Команда логической функции И
- •6.7 Команда «Исключающая ИЛИ»
- •Внутриразрядная сумма = 0
- •6.8 Команда сравнения — компарации
- •7 Команды ветвления и переходов
- •7.1 Команды ветвления
- •7.2 Команды перехода
- •8.1 Внутрисегментные переходы
- •8.2 Межсегментные переходы
- •10 Цепочные команды
- •11 Другие одиночные команды
- •13.1 Процедура прерываний и команды прерываний
- •Адрес
- •13.2 Режимы работы ПКП
- •13.3 Программирование ПКП
- •14 Параллельный интерфейс
- •15 Последовательный интерфейс
- •15.1 Антология последовательного интерфейса
- •15.3 Описание регистров 8250 и программирование
- •Регистр управления линией
- •Регистр управления модемом
- •15.4 Порядок инициализации 8250
- •16 Программируемый таймер
- •16.7 Временные диаграммы таймера
- •16.8 Программирование таймера
- •Чтение счетчика канала 2
- •16.9 Чтение содержимого счетчиков
- •16.10 Таймер на системной плате IBM PC
- •17 Клавиатурный интерфейс
- •18. Заключение
- •Приложение А
- •Действие
- •Сегментный регистр
- •Действие команды
- •Действие команды
- •Действие команды
- •SAHF — сохранение <AH> в F
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
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