Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО Билеты.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Тетрады

представляют собой запись операций в форме из четырех составляющих: <операция>(<операнд1>,<операнд2>,<результат>). Тетрады используются редко, так как требуют больше памяти для своего представления,чем триады, не отражают взаимосвязи операций и, кроме того, плохо отображаются в команды ассемблера и машинные коды, так как в наборах команд большинства современных машин нет операций с тремя операндами.

A+B*C–D

(*, B, C, T1)

(+, A, T1, T2)

(–, T2, D, T3)

T1, T2, T3 –временные переменные формируемые транслятором.

Важным свойством списка тетрад является то, что тетрады располагаются строго в соответствии с порядком в котором должны быть выполнены операторы при реализации программы. При этом оператор с одним операндом может быть представлен в виде тетрад. Некоторые элементы тетрад остаются пустыми: «–A» – изменение знака (–, A, , T1), «A:=B» – (:=, B, , A).

Аналогично вводят тетрады описывающие переходы программ.

(JML, <метка>, , )

(JM, <адрес>, , )

(<оператор>, <адрес>, <условие>, )

Пример: (JMP, <адрес>, R, ) – переход на адрес если R>0;

В случае тетрад под адресом понимается номер тетрад заданной в списке.

Фрагмент программы в тетрадной форме:

1: (–, I, J, T1)

2: (JMP, <6>, T1, )

3: (+, K, 1, T2)

4: (:=, T2, , K)

5: (JMP, <7>, , )

6: (JML, M1, , )

7: (*, B, K, T3)

8: (:=, T3, , A)

Триады

представляют собой запись операций в форме из трех составляющих: <операция>(<операнд1>,<операнд2>), при этом один или оба операнда могут быть ссылками на другую триаду в том случае, если в качестве операнда данной триады выступает результат выполнения другой триады. Поэтому триады при записи последовательно номеруют для удобства указания ссылок одних триад на другие. Например, выражение A := B*C + D - B*10, записанное в виде

триад будет иметь вид:

1) * ( B, C );

2) + ( ^1, D );

3) * ( B, 10 );

4) - ( ^2, ^3 );

5) := ( A, ^4 )

Хранение грамматики с использованием сети

Аппаратные прерывания

1. Уровни управления прерываниями

В микропроцессоре ix86 можно использовать два уровня управления аппаратными прерываниями.

1) Верхний уровень.

На этом уровне все маскируемые прерывания могут быть запрещены с помощью инструкции CLI и, соответственно, разрешены с помощью инструкции STI. Различают маскируемые и немаскируемые прерывания. Немаскируемые прерывания подаются на вход NMI микропроцессора, а маскируемые - на вход INTR;

2) Нижний уровень.

Управление прерываниями на этом уровне основано на использовании регистра масок IMR программируемого контроллера прерываний, отображенного на порт 21h, и регистр команд, отображенного на порт 20h программируемого контроллера прерываний.

Таблица 1. Соответствие битов в регистре масок контроллера прерываний источникам прерываний

Бит IMR

Номер вектора

Источник

0

8

IRQ0 - прерывание таймера (18. 2 раза в сек)

1

9

IRQ1-прерывание от клавиатуры

2

Ah

IRQ2 - используется для каскадирования

3

70h

IRQ8 - часы реального времени

4

71h

IRQ9 - контроллер EGA

5

72h

IRQ10 - зарезервировано

6

73h

IRQ11 - зарезервировано

7

74h

IRQ12 - зарезервировано

8

75h

IRQ13 - пр. от арифметического сопроцессора

9

76h

IRQ14 - жесткий диск

10

77h

IRQ15 - зарезервировано

11

Bh

IRQ3 - асинхронный порт COM2

12

Ch

IRQ4 - асинхронный порт COM1

13

Dh

IRQ5 - жесткий диск (XT)

14

Eh

IRQ6 - контроллер НГМД

15

Fh

IRQ7 - прерывание принтера

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

Пример маскирования прерываний:

MOV AL, MASK

OUT 21h, AL

;обязательно очистка IMR после выполнения

;задач приложением

MOV AL, 0

OUT 21h, AL

Процедура обработки прерывания должна иметь в своем составе инструкции для выдачи в контроллер прерываний команды EOI (End Of Interrupt). Код EOI - 20h. Эта команда заносится в регистр команд, адрес порта которого - 20h.

EOI EQU 20h

MOV AL, EOI ;пока в порт 20h не будет направлена ко-

OUT 20h, AL ;манда 20h, ПКП не обрабатывает других

;прерываний

IRET

Кроме регистра масок и команд в контроллере имеются регистры IRR - хранит состояние входов запросов на прерывание, ISR - хранит номер обслуживаемого в данный момент прерывания.

2. Программирование ПКП i8259

Программирования контроллера прерываний небходимо по ряду причин. К ним можно отнести:

§ Определение базового адреса в таблице прерываний для поступающих на обработку запросов

§ Каскадирование контроллеров прерываний

§ Изменение приоритетной дисциплины обслуживания.

3. Дополнительные обработчики прерываний

Если есть необходимость для создания дополнительного обработчика прерывания (например обработчик прерывания от клавиатуры09h), следует иметь ввиду следующее: дополнительный обработчик должен включаться в цепь существующих обработчиков с корректной передачей управления данных по цепи. В случае удаления обработчика из памяти необходимо предусматривать меры по восстановлению целостности цепи обработчиков. Структура обработчика прерываний определяется рядом факторов:

1) прерывание может быть аппаратное или программное (Int);

2) программа обработчика может быть резидентной или транзитной;

3) вектор прерывания может быть свободным или использоваться в системе. В случае, когда вектор используется системой, то вызов системного обработчика может осуществляться до работы дополнительного или после окончания работы дополнительного;

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

а) запомнить старый вектор прерывания. Это можно сделать с помощью системного вызова Int 21h Fn 35h;

б) переустановить вектор (Системный вызов Int 21h Fn 25h);

в) необходимо завершить программу с помощью TSR-выхода (Int 21h Fn 31h).

В рабочей секции обработчика прерывания необходимо сохранить все используемые регистры и восстановить их по возвращении из обработчика. На контекст обработчика (тело с привязкой к адресам, его среда) настроены только 2 регистра: CS и IP, поэтому передача управления

CALL DWORD PTR OLD_09

неправильна. Если вызов системного обработчика идет до работы дополнительного, то вызов системного необходимо организовать таким образом, чтобы последний обеспечивал возврат управления в точку вызова дополнительного. Такой вызов можно обеспечить стандартным способом с помощью команды CALL, имея в виду лишь то обстоятельство, что возврат из системного осуществляется с помощью IRET, которая извлекает из стека 3 компоненты, то есть при вызове эти 3 компоненты должны быть помещены в стек.

PUSH F

CALL DWORD PTR CS:OLD_09

Если вызов существующего обработчика производится после работы дополнительного, то это осуществляется так:

NEW_09:

JMP CS:OLD_09 ; выход из дополнительного обработчика

; здесь стек не затрагивается, поэтому возврат

;по цепочке осуществит системный обработчик.

4. Взаимодействие дополнительного и основного обработчиков

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

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

5. Средства переустановки векторов прерывания

Для работы с таблицей векторов прерываний операционная система предоставляет два системных вызова.

1) Получить значение вектора прерывания по номеру - Int 21h Fn 35h.

Этот вызов имеет следующие входные и выходные параметры.

Вход

AH

035h

AL

Номер вектора прерывания

Выход

ES:BX

SEG:OFFSET - адрес обработчика прерывания

2) Установить вектор с номером n равным адресу обработчика прерывания.

Вход

AH

025h

AL

Номер вектора прерывания

Выход

DS:DX

SEG:OFFSET - адрес устанавливаемого обработчика прерывания

6. Пример обработчика прерывания.

; Получить адрес обработчика прерывания 08h

MOV AX, 03508H

INT 21h

MOV WORD PTR OLD_ 08, BX

MOV WORD PTR OLD_ 08+2, ES

. . .

OLD_08 DD ;

. . .

; Установить адрес нового обработчика в вектор 08h

MOV DX, SEG NEW_08

MOV DS, DX

MOV DS, OFFSET NEW_08

MOV AX, 02508h

INT 21h