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.2). Строго говоря, приведенные в этой таблице прерывания поддерживаются не любыми процессорами, которые использовались в персональных ЭВМ. Однако, к настоящему времени ранние модели ПЭВМ с процессорами i8086…i80286, в которых некоторые функции могли отсутствовать, практически вышли из употребления.
Вызов прерывания осуществляется путем использования операнда в качестве индекса в таблице векторов прерываний (или в таблице дескрипторов прерываний IDT). В реальном режиме IDT содержит 4-байтные указатели на процедуры обработки. При возникновении внутреннего прерывания процессор оставляет свою работу, сохраняет в стеке содержимое регистра флагов RF, значения сегмента CS и смещения IP, после чего процессор переходит к выполнению команд программы обработки прерывания по адресу, равному номеру прерывания, умноженному на 4 (см. пример настройки прерывания в программе п. 2.2.4). Вызов прерываний 3 и 5 может быть инициирован пользователем командой ассемблера int <n>, где n — номер (код) прерывания. После входа в прерывание структура стека имеет вид, показанный на рис. 3.8 (см. также рис. 1.4).
Т а б л и ц а 3.2
Внутренние прерывания
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.