Типы прерываний и источники возникновения запросов. Принципы обработки прерываний и флаговая логика микропроцессоров, страница 5

5. Составьте программу инкрементации содержимого регистра BX. Дополните ее так, чтобы стала возможной трассировка этого фрагмента инкрементации (используйте функции DOS). Обработчик  прерывания по Т-биту должен содержать вывод любого символа (например  *)  для контроля шагов трассировки. Установку и сброс Т-бита предусмотрите в основной программе. Рекомендуемый алгоритм приведен на рис. 3.5.

6. Преобразуйте программу так, чтобы сброс Т-бита производился в прерывании int 1, используя алгоритм на рис. 3.6. Сброс Т-бита выполнить по заданию преподавателя одним из трех способов:

·  обращением в стек с помощью команды mov, используя содержимое указателя стека (SP), сохраненное перед вызовом прерывания,

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

·  обращением в стек с помощью команд push/pop.

7. Функционально завершите программу, используя вызовы прерываний по точке  останова  для ограничения  трассируемого фрагмента программы. Для этого в программу обработки int 3 введите необходимые  функции управления Т-битом. В качестве алгоритма используйте последовательность действий, показанную на рис. 3.7.

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

В прерывании int 1 предусмотрите вывод адреса (смещения) исполняемой команды в трассируемом фрагменте. Сравните полученные Вашей программой  значения смещений со смещениями, которые можно наблюдать с помощью отладчика.

8. Результаты работы последней  программы выведите на печать, используя прерывание int 5 (печать копии экрана ).

9. Исследуйте стандартные обработчики  прерываний int4, int6, int7 (если это позволяет аппаратура). Перехватите указанные прерывания, позаботившись о восстановлении старых векторов (дополнительное задание ).

Рис. 3.4. Возможная схема алгоритма перехвата прерывания

Рис. 3.5. Рекомендуемый алгоритм перехвата прерывания по биту трассировки

Рис. 3.6. Алгоритм трассировки со сбросом Т-бита в обработчике

Рис. 3.7. Алгоритм трассировки с использованием точек останова  для ограничения  трассируемого фрагмента программы

3.3.3. Методические указания к работе

Под внутренние  прерывания в таблице векторов прерываний отведены первые восемь позиций (с нулевой по седьмую) для реального режима работы процессора (табл. 3.2). Строго говоря, приведенные в этой таблице прерывания поддерживаются не любыми процессорами, которые использовались в персональных ЭВМ. Однако, к настоящему времени  ранние модели ПЭВМ с процессорами i8086…i80286, в которых некоторые функции могли отсутствовать, практически вышли из употребления.

Вызов прерывания осуществляется путем использования операнда в качестве индекса в таблице векторов прерываний (или в таблице дескрипторов  прерываний IDT). В реальном режиме IDT содержит 4-байтные указатели на процедуры обработки. При возникновении внутреннего прерывания  процессор оставляет свою работу, сохраняет  в стеке содержимое регистра флагов RF, значения сегмента CS и смещения IP, после чего процессор переходит к выполнению команд программы обработки прерывания по адресу, равному номеру прерывания, умноженному на 4 (см. пример настройки прерывания в программе п. 2.2.4). Вызов прерываний 3 и 5 может быть инициирован пользователем командой ассемблера  int <n>, где n — номер (код) прерывания. После  входа  в прерывание структура стека имеет вид, показанный на рис. 3.8 (см. также рис. 1.4).

Т а б л и ц а  3.2

Внутренние прерывания