Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
45
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

Глава 1

Архитектура реального режима

31

Загрузка в стек осуществляется специальной командой работы со сте­ ком push (протолкнуть). Эта команда сначала уменьшает на 2 содержимое указателя стека, а затем помещает операнд по адресу в SP. Если, напри­ мер, мы хотим временно сохранить в стеке содержимое регистра АХ, слещ;. дует выполнить команду т

push AX • if

И

Стек переходит в состояние, показанное на рис. 1.10, б. Видно, чтй| указатель стека смещается на два байта вверх (в сторону меньших адре-£ сов) и по этому адресу записывается указанный в команде проталкивай

ния операнд. Следующая команда загрузки в стек, например, И

А т?

push DS

переведет стек в состояние, показанное на рис. 1.10, в. В стеке будут теперь храниться два элемента, причем доступным будет только верхний, на кото­рый указывает указатель стека SP. Если спустя какое-то время нам понадо­билось восстановить исходное содержимое сохраненных в стеке регистров, мы должны выполнить команды выгрузки из стека pop (вытолкнуть):

pop DS ti

pop AX Щ

ii

Состояние стека после выполнения первой команды показано на рис. 1.10, г, а после второй — на рис. 1.10, д. Для правильного восстановления содержимого регистров выгрузка из стека должна выполняться в порядке, строго противоположном загрузке — сначала выгружается элемент, заг­руженный последним, затем предыдущий элемент и т.д.

Совсем не обязательно при восстановлении данных помещать их туда, где они были перед сохранением. Например, можно поместить в стек с»# держимое DS, а извлечь его оттуда в другой сегментный регистр — Е5:/|,

DS

ES

push pop

;Теперь ES=DS, а стек пуст

ком порядке они расположены в стеке. Этот прием часто используется При работе с подпрограммами.

Какого размера должен быть стек' Это зависит от того, насколько интенсивно он используется в программе. Если, например, планируется хранить в стеке массив объемом 10 000 байт, то стек должен быть не мень­ше этого размера. При этом надо иметь в виду, что в ряде случаев стек автоматически используется системой, в частности, при выполнении ко­манды прерывания int 21h. По этой команде сначала процессор помещает в стек адрес возврата, а затем DOS отправляет туда же содержимое реги­стров и другую информацию, относящуюся к прерванной программе. По­этому, даже если программа совсем не использует стек, он все же должен присутствовать в программе и иметь размер не менее нескольких десятков слов. В нашем первом примере мы отвели под стек 128 слов, что безуслов­но достаточно.

1.6. Система прерываний

Система прерываний любого компьютера является его важнейшей частью, позволяющей быстро реагировать на события, обработка кото­рых должна выполнятся немедленно: сигналы от машинных таймеров, нажатия клавиш клавиатуры или мыши, сбои памяти и пр. Рассмотрим в общих чертах компоненты этой системы.

Сигналы аппаратных прерываний, возникающие в устройствах, вхо­дящих в состав компьютера или подключенных к нему, поступают в про­цессор не непосредственно, а через два контроллера прерываний, один из которых называется ведущим, а второй — ведомым (рис. 1.11)

Таймер

Сипи INT

Ведомый

контроллер прерываний

Базовый

вектор 701)

Ведущий контроллер

IRQO

Клавиатура

Процессор

прерываний

Базовы и вектор 08h

>

IRQ3 Мышь

IRQ4

Номер

вектора

Жесткий диск

IRQ.' г , „ Гибкий диск

IRQ6 п Принтер

IRQ7

Это распространенный прием для перенесения содержимого одного регистра в другой, особенно, если второй регистр — сегментный.

Обратите внимание (см. рис 1.10) на то, что после выгрузки сохра­ненных в стеке данных они физически не стерлись, а остались в области стека на своих местах. Правда, при «стандартной» работе со стеком они оказываются недоступными. Действительно, поскольку указатель стека SP указывает под дно стека, стек считается пустым; очередная команда push поместит новое данное на место сохраненного ранее содержимого АХ, затерев его. Однако пока стек физически не затерт, сохраненными и уже выбранными из него данными можно пользоваться, если помнить, в ка-

Рис. 1,11. Аппаратная организация прерываний.

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

К входным выводам IRQ1...IRQ7 и IRQ8...IRQ15 (IRQ — это сокраще­ние от Interrupt Request, запрос прерывания) подключаются выводы уст-

32