Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода_Организация_ЭВМ.DOC
Скачиваний:
34
Добавлен:
11.06.2015
Размер:
598.02 Кб
Скачать

1.4. Стеки.

Во многих случаях программе требуется временно запомнить информацию, а затем считывать ее в обратном порядке. Эта проб­лема в ПК решена посредством реализации стека LIFO ("последний пришел - первый ушел"), называемого также стеком включения/из­влечения (stack - кипа, например, бумаг). Наиболее важное ис­пользование стека связано с процедурами. Стек обычно рассчитан на косвенную адресацию через регистр SP - указатель стека. При включении элементов в стек производится автоматический декре­мент указателя стека, а при извлечении - инкремент, то есть стек всега "растет" в сторону меньших адресов памяти. Адрес последнего включенного в стек элемента называется вершиной сте­ка (TOS). Физический адрес стека формируется из SP и SS или BP и SS, причем SP служит неявным указателем стека для всех операций включения и извлечения, а SS - сегментным регистром стека. Со­держимое SS является самым младшим адресом (границей) области стека и называется базой стека. Первоначальное содержимое SP считается наибольшим смещением, которого может достигать стек.

Одно из назначений стека – передача параметров в подпрограммы. Совокупность параметров размещенных в стеке называется стековым кадром. Регистр BP предназначен, главным образом, для обращений к стековым кадрам.

1.5. Прерывания.

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

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

Некоторыми видами прерываний управляют флажки IF и TF, ко­торые для восприятия прерываний должны быть правильно установ­лены. Если условия для прерывания удовлетворяются и необходимые флажки установлены, то микропроцессор завершает текущую коман­ду, а затем реализует последовательность прерывания: текущее значение регистра Flags включается в стек (экви­валентно команде pushf); текущее значение кодового сегмента CS включается в стек (эквивалентно команде push CS); текущее значение указателя инструкции IP включается в стек (эквивалентно команде push IP); сбрасываются флажки IF и TF.

Новое содержимое IP и CS определяет начальный адрес выпол­няемой процедуры прерывания (обслуживание прерывания). Возврат в прерванную программу осуществляется командой, которая извле­кает из стека содержимое для: IP (эквивалентно pop IP); CS (эквивалентно pop CS); Flags (эквивалентно popf).

Двойное слово, в котором находится новое содержимое IP и CS, называется указателем прерывания, или вектором. Каждому ти­пу прерывания назначено число из диапазона 0...255, и адрес указателя прерывания находится путем умножения номера типа на четыре.