Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekcii_OC.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
636 Кб
Скачать
☆

Выполнение программы

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

По указанному адресу из основной памяти считывается команда и пересылается в микропроцессор. Команда длиной от 1 до 8 байт помещается в очередь команд, откуда поступает в устройство управления, где дешифрируется.

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

Данные, считанные из основной памяти по указанному адресу, пересылаются в регистр данных или в арифметико-логическое устройство и обрабатываются в соответствии с кодом команды. Результат помещается либо в регистры, либо (в соответствии с командой) в какую-либо область основной памяти.

Если выполненная команда не являлась командой передачи управления, то содержимое регистра IP увеличивается на длину выполненной команды, в противном случае в регистр IP заносится исполнительный адрес команды, которая должна выполняться следующей.

Затем процесс повторяется.

Флажковый регистр

Флажковый регистр микропроцессора i8086, в котором в виде однобитовых признаков по принципу ДА - НЕТ (ВКЛЮЧЕНО - ВЫКЛЮЧЕНО) фиксирует информацию о результатах выполнения некоторых команд, например арифметических.

О - признак переполнения;

D - признак направления;

I - признак прерывания;

Т - признак трассировки;

S - признак знака: 1 - число < 0, 0 - число > 0

Z - признак нуля: 1 - число = 0

А - признак переноса из тетрады;

P - признак четности;

С - признак переноса.

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

Система прерываний 32-разрядных микропроцессоров 180x86

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

В реальном режиме работы система прерываний использует понятие вектора прерывания. Термин «вектор прерываний» используется потому, что для указания адреса используется не одно значение, а два, то есть мы имеем дело не со скалярной величиной, а с «векторной».

Итак, каждый вектор прерываний состоит из 4 байтов или 2 слов: первые два содержат новое значение для регистра IP, а следующие два — новое значение регистра CS. Таблица векторов прерываний занимает 1024 байта. Таким образом, в ней может быть задано 256 векторов прерываний. В процессоре 18086 эта таб­лица располагается на адресах OQOOGH-003FFH. Расположение этой таблицы в про­цессорах i80286 и старше определяется значением регистра IDTR — Interrupt Descriptor Table Register. При включении или сбросе процессора i80x86 этот ре­гистр обнуляется. Однако при необходимости можно в регистре IDTR указать смещение и, таким образом, перейти на новую таблицу векторов прерываний.

Таблица векторов прерываний заполняется (инициализируется) при запуске сис­темы, но в принципе может быть изменена или перемещена.

Каждый вектор прерывания имеет свой номер, называемый номером прерыва­ния, который указывает его место в таблице. Этот номер, помноженный на четы­ре (сдвиг на два разряда влево и заполнение освободившихся битов нулями), и сложенный с содержимым регистра IDTR, дает абсолютный адрес первого бай­та вектора в оперативной памяти.

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

В IBM PC, как и в других вычислительных системах, прерывания бывают двух видов: внутренние и внешние.

Внутренние прерывания, как мы уже знаем, возникают в результате работы про­цессора. Они возникают в ситуациях, которые нуждаются в специальном обслу­живании, или при выполнении специальных инструкций — INT или INTO. Это следующие прерывания:

  • U прерывание при делении на ноль; номер прерывания — 0;

  • G прерывание по флагу TF (trap flag). В этом случае прерывание обычно ис­пользуется специальными программами отладки типа DEBUG, номер прерыва­ния — 1;

  • Q инструкции INT (interrupt — выполнить прерывание с соответствующим но­мером) и INTO (interrupt if overflow — прерывание по переполнению). Эти пре­рывания называются программными. В качестве операнда команды INT указывается номер прерывания, которое нужно выполнить, например INT 10H.

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

Как известно, прерывания могут быть инициированы внешним устройством ПК или специальной командой прерывания из программы. В любом случае, если прерывания разрешены, то выполняется следующая процедура:

1. В стек помещается регистр флагов.

2. Флаг включения/выключения прерываний IF и флаг трассировки TF, нахо­дящиеся в регистре, обнуляются для блокировки других прерываний и исключения пошагового режима исполнения команд.

3. Значения регистров CS и IP сохраняются в стеке.

4. Вычисляется адрес вектора прерывания, и из вектора, соответствующего но­меру прерывания, загружаются новые значения IP и CS.

Когда системная подпрограмма принимает управление, она может снова разре­шить прерывания командой STI (set interrupt flag, установить флаг прерываний), которая переводит флаг IF в состояние 1, что разрешает микро­процессору вновь реагировать на прерывания, инициируемые внешними устрой­ствами, поскольку стековая организация позволяет вложение прерываний друг в друга.

Закончив работу, подпрограмма обработки прерывания должна выполнить инст­рукцию IRET (interrupt return), которая извлекает из стека три 16-битовых значе­ния и загружает их в указатель команд IP, регистр сегмента команд CS и регистр PSW соответственно. Таким образом, процессор сможет продолжить работу с того места, где он был прерван.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]