Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции препода / Лекции для 3 курса.doc
Скачиваний:
86
Добавлен:
30.04.2013
Размер:
1.51 Mб
Скачать

Int n

где n - целое число между 0 и 255. Состояние флажка разрешения преры­ваний IF не влияет на выполнение команды INT.

Команды прерываний процессора 80286 приведены в табл. 3.20.

Таблица 3. 20 Команды прерываний

Мнемоника команды

Описание команды

INT n

Прерывание типа n (два байта)

INT

Прерывание типа 3 (один байт)

INTO

Прерывание при переполнении

IRET

Возврат из прерывания

HLT

Остановка

Требования отладчика. Отметим, что имеются две формы команды INT. В первой форме длина команды составляет два байта, причем второй байт определяет тип прерывания. Во второй форме в команде длиной один байт тип прерывания определен неявно (см. зарезервированные типы на рис. 3.18). Тип 3 не столь важен (им мог бы быть любой тип), как важна длина команды в один байт. Такая команда INT играет существенную роль в работе программы-отладчика. Для понимания этой роли рассмотрим работу отладчика несколько подробнее.

Отладчик - это интерактивная программа, помогающая выяснить, почему разработанная нами программа не работает правильно. Обычно мы хотим сообщить отладчику о выполнении нашей плохой программы до поступления команды по какому-то конкретному адресу, например 100. Это действие называется "установкой контрольного останова" по адресу 100. Отладчик помещает по адресу 100 команду, которая передает ему управление. Теперь он может запустить программу, а когда программа достигнет адреса 100, управление будет передано отладчику. Конечно, отладчик должен сохранить

исходное содержимое по адресу 100 до устано­вки контрольного останова и восстановить его после возврата управления.

Теперь возникает вопрос о том, какую команду процессора 80286 встроить по адресу 100. При наличии в любой момент времени всего одного останова можно было бы обойтись командой перехода. Однако при нес­кольких остановах отладчик должен знать, какой останов достигнут. Идеальной оказывается команда INT, потому что она сохраняет информа­цию (содержимое регистров CS и IP), локализующую останов. Применение двухбайтной команды INT означает необходимость сохранения содержимого памяти по адресам 100 и 101. Отладчик должен сохранить, а затем восстановить это содержимое. В большинстве случаев при этом особых трудностей не возникает. Однако рано или поздно мы напишем програм­му, в которой команда по адресу 101 выполняется прежде команды по адресу 100 (см. пример на рис. 3.19). Но теперь на месте команды по адресу 101 находится второй байт команды INT, встроенной по адресу 100. Вот почему в отладчике должна применяться однобайтная команда INT. Отладчик использует команду INT для генерирования прерываний типа 3 при отладке программ; следовательно, в наших программах, если мы хотим работать с отладчиком, нельзя применять однобайтную команду INT или прерывания типа 3.

С отладчиками используется еще одно средство - флажок трассировки TF. Когда этот флажок установлен в состояние 1, процессор выполняет одну команду, а затем генерирует прерывание типа 1 (рис. 3.20). Другими словами, отладчик выполняет программу по отдельным командам и анализирует, что происходит после каждой команды. Такой режим работы называется пошаговой (покомандной) работой. (Не беспокойтесь о повторяющихся цепочечных командах; в этом режиме прерывание возни­кает после каждого повторения, а не по окончании всей команды.) Отладчик может заставить программу работать в пошаговом режиме, модифицировав флажки, запомненные в стеке предыдущим прерыванием (так что сохраненное значение TF будет 1), а затем выполнив команду IRET. Так как переход в пошаговый режим осуществляет отладчик, а не программа, команды установки и сброса флажка TF не нужны. Предполо­жим, например, что программа выполняется обычным образом. Мы хотим остановить ее и перевести в пошаговый режим. Требуется после каждой команды просмотреть содержимое всех регистров, чтобы убедиться, что программа работает правильно. Мы можем остановить программу, подав как-то сигнал на вход INTR и сообщив процессору тип прерывания, напри­мер 50. Процессор прекратит выполнение программы (если IF = 1) и сохра­нит в стеке значения флажков и регистров CS и IP. Затем он начнет выпол­нять процедуру для прерывания типа 50. В этой процедуре мы предусмот­рели обращение к стеку и установку сохраненного значения состояния флажка TF в 1.

Затем процедура прерывания выполняет команду IRET и восстанавливает значения регистров IP, CS и флажков. В них окажутся теже значения, которые были до прерывания программы, но теперь TF = 1. В результате программа выполняет одну команду, а затем запоминает в стеке значения флажков (с TF = 1) и регистров CS и IP и начинает выпол­нять процедуру для прерывания типа 1. Чтобы предотвратить пошаговую работу в процедуре прерывания, флажок TF автоматически сбрасывается после запоминания состояний флажков в стеке. Процедура для прерыва­ния типа 1 должна индицировать содержимое всех регистров. Последней командой в ней вновь будет команда IRET, которая устанавливает значе­ния содержимого регистров IP, CS и флажков. Так как флажок TF снова оказывается в состоянии 1, описанный процесс повторяется (см. рис. 3.20). Процедуры для типов прерываний 1 и 50 являются частью отладчика.

Изменение стеков. Рассмотрим команду, которая передает новое значение в сегментный регистр стека SS. Она является одной из двух команд MOV, которые необходимо выполнить, чтобы изменить стек (это полезная операция, когда процессор попеременно выполняет несколько программ, у каждой из которых есть свой стек). Вторая команда MOV передает новое значение в указатель стека SP. После выполнения обеих команд MOV регистры SS и SP совместно определяют положение вершины нового стека. Однако после выполнения первой команды MOV, но до начала выполнения второй, комбинация регистров SS и SP не имеет ника­кого смысла; ясно, что она не

определяет вершины никакой области, отведенной для стека (мы исключаем случайное совпадение). Сложность возникает, если во время смены стека кто-то попытается осуществить включение в стек. А ведь именно такая попытка возникнет при внешнем прерывании или при прерывании пошаговой работы. Чтобы предотвратить такую ситуацию, процессор 80286 не воспринимает никаких прерыва­ний после выполнения команды, которая загружает новое значение в регистр SS.

Соседние файлы в папке Лекции препода