Министерство образования Российской Федерации Восточно-Сибирский государственный технологический университет
ТАБЛИЦА ВЕ...
104 downloads
193 Views
377KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования Российской Федерации Восточно-Сибирский государственный технологический университет
ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ
Методические указания к выполнению лабораторной работы по дисциплине "Организация ЭВМ и систем" для студентов специальностей 2201 "Вычислительные машины, комплексы, системы и сети" и 2204 "Программное обеспечение вычислительной техники и АС".
Составители А.П. Мадыев А.В. Шайдорова
Улан-Удэ – 2003
1. Цель работы Изучение структуры таблицы векторов прерываний и порядка вызова обработчика прерываний. 2. Задание. Разработать программу, выполняющую следующие действия: – Ввод номера произвольного вектора прерывания (в десятичном или шестнадцатеричном формате); – Чтение содержимого таблицы векторов прерываний (ТВП) по введенному номеру вектора; – Определение и отображение физического адреса памяти, с которого начинается исполняемый код обработчика прерывания (в формате сегмент : смещение и в десятичном формате). 3. Порядок выполнения работы. 3.1. Программа отлаживается и выполняется только в режиме эмуляции MS DOS; 3.2. Запустить разработанную программу и ввести номер программного прерывания INT 33h (прерывание, используемое драйвером «мыши»); 3.3. Записать полученный адрес начала исполняемого кода обработчика INT 33h; 3.4. Выполнить пп. 3.2 и 3.3 для IRQ4 (см. приложение Б.) 3.5. Утилитой mem с ключами d и p (>c:\mem/d /p) просмотреть оперативную память и записать кем заняты области, куда указывают векторы прерываний INT 33h и IRQ4, записать результаты; 3.6. Запустить любой драйвер «мыши» для среды MS DOS (mouse.com, imouse.com, gmouse.com и т.п.) и выполнить пп. 3.2–3.5;
3.7. Выгрузить из памяти драйвер «мыши» (см. 5.3.) и повторить пп. 3.2.–3.5; 3.8. Выгрузить из памяти драйвер «мыши» и загрузить его в область «верхней памяти» (HMA High Memory Area) (см. 5.3.); 3.9. Повторить пп. 3.2–3.5; 3.10. Выполнить пп. 3.2–3.5 для программного прерывания, заданного преподавателем, записать полученный адрес начала исполняемого кода обработчика; 3.11. Сравнить полученные результаты и сделать вывод. 4. Требования к отчету Отчет должен содержать: • Титульный лист установленного образца; • Состав и назначение переменных программы; • Исходный текст программы; • Результаты выполнения пп 3.2.-3.11. оформить в виде таблицы (см. приложение А). • Вывод на основе полученных результатов. 5. Методические указания. 5.1. Переход в режим эмуляции MS DOS Переход в режим эмуляции MS DOS можно выполнить двумя способами: 1. При загрузке компьютера нажать клавишу F8 и из появившегося меню выбрать MS DOS; в командной строке указать компилятор языка программирования, на котором написана программа с полной спецификацией (путь к файлу). 2. Перезагрузить компьютер из ОС Windows; В пункте «Завершение работы» выбрать «Перезагрузить в режиме
инсталляции MS DOS» и затем в командной строке указать компилятор с полной спецификацией. 5.2. Краткие сведения о ТВП Прерывание – особое событие в системе, требующее немедленной реакции. Реакция на прерывания состоит в выполнении центральным процессором специально предусмотренной для данного события программы, которая называется обработчиком прерывания. В IBM PC-совместимых ЭВМ предусмотрены 2 вида прерываний: аппаратные и программные. Аппаратные (обозначаются IRQm, где m – уровень прерывания, определяемый его приоритетом) вызываются физическими устройствами с помощью контроллера прерываний в произвольные моменты времени и информируют систему о событиях, связанных с работой устройств. Программные прерывания вызываются из текущей программы командой INTn (n – номер прерывания) и обеспечивают доступ к общим для всех программ исполняемым модулям, которыми и являются те или иные обработчики. Исполняемые коды обработчиков аппаратных прерываний хранятся в микросхеме ПЗУ BIOS (ROM BIOS), обработчиков программных прерываний – в файлах операционной системы, загружаемых в оперативную память. Кроме того, в ПЗУ BIOS хранятся обработчики программных прерываний, обслуживающие стандартные периферийные устройства. По принадлежности прерывания часто называют прерываниями BIOS и прерываниями DOS. Обработчики программных прерываний называют также функциями или сервисами BIOS и DOS. Доступ к обработчикам организован через ТВП, в которой хранятся начальные адреса обработчиков. ТВП занимает первый килобайт (1Кбайт=1024 байта) оперативной памяти – адреса от 0000:0000 до 0000:03FF. Таблица состо-
ит из 256 (по максимально возможному числу обработчиков) элементов - FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний. В первом слове элемента таблицы записано смещение, а во втором – сегмент адреса обработчика прерывания. Таким образом, каждый вектор указывает на начало исполняемого кода соответствующего обработчика. Так прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 – 0000:0004 и т.д. ТВП заполняется программой начальной загрузки. При отсутствии какого-либо обработчика вектор, тем не менее, формируется, но по указанному им адресу записывается инструкция IRET – возврат из прерывания. Обработка прерывания происходит следующим образом. Как только в процессе выполнения текущей программы появляется команда INTn, которая либо содержится в текущей программе (программное прерывание), либо сформирована в данный момент времени с помощью контроллера прерывания по специальному сигналу от какоголибо устройства (аппаратное прерывание) процессор прерывает выполнение текущей программы, запоминает её состояние и считывает из ТВП вектор прерывания по адресу, соответствующему номеру n. Затем процессор переходит по адресу, указанному вектором, на выполнение соответствующего обработчика. Обработчики заканчиваются инструкцией IRET, по которой процессор восстанавливает состояния прерванной программы и возобновляет ее выполнение. При такой организации в программе не требуется указывать абсолютный адрес той или иной функции BIOS или DOS, который часто заранее неизвестен, т.к. его значение зависит от многих причин. Благодаря ТВП работа программ не зависит от адресов функций BIOS и DOS, адресов
обработчиков аппаратных прерываний, а также от адреса загрузки вызывающей программы. В приложении Б приведено назначение некоторых прерываний (функций). 5.3. Краткие сведения о драйверах «мыши». В среде MS DOS системные и прикладные программы могут заменять обработчики или добавлять новые вместо отсутствующих. При этом программа изменяет и вектор прерывания. После завершения работы программа должна восстановить прежние обработчики и векторы. В данной работе в качестве программы, модифицирующей векторы прерывания, применяется драйвер «мыши», который использует прерывание INT 33h. BIOS и MS DOS не имеют обработчиков этого прерывания. При запуске драйвер загружает в оперативную память исполняемый код обработчика, заменяет вектор прерывания INT 33h, а также может изменить вектор аппаратного прерывания IRQ4 (см. приложение Б) в случае, если «мышь» подключена к последовательному порту COM1. При выгрузке драйвер должен восстановить все измененные векторы. Чтобы узнать имя и размер загруженного драйвера нужно запустить утилиту DOS – mem с параметром /р. При выводе информации первая колонка – адрес, вторая - имя загруженной в память программы, третья – размер программы. Запустив драйвер с параметром /h можно получить справку о данном драйвере (используемые ключи, выгрузка из памяти и др.). Для загрузки драйвера в верхнюю память (память с адресами от 640 Кбайт до 1Мбайта) нужно в файле конфигурации CONFIG.SYS использовать команду: DEVICEHIGH = имя-файла-драйвера (параметры). Чтобы загрузка прошла удачно, необходимо чтобы перед этой командой в файле CONFIG.SYS был запущен драйвер верхней памяти (типа ЕММ386) и содержалась строка:
DOS=UMB или DOS=HIGH, UMB. 5.4. Перевод адреса сегмент:смещение в абсолютный адрес. Для определения абсолютного адреса необходимо перевести считанный из ТВП адрес из формата сегмент:смещение в абсолютный адрес. Для этого необходимо к шестнадцатеричному числу справа приписать ноль, (при этом получится двадцатиразрядное двоичное число) и прибавить смещение: ХХХХ0 – сегмент + YYYY – смещение = абсолютный адрес
Приложение А. Таблица А.1. Результаты выполнения разработанной программы Начальный адрес обработчика прерывания Вектор прерывания
Дополнительное условие
33h
Драйвер «мыши» не загружен Драйвер «мыши» загружен в базовую память
IRQ4 33h IRQ4
По данным про-
По данным утилиты mem
граммы * абсол. Сегмент: абсол. Сегмент : Имя влаадрес смещение адрес смещение дельца области памяти
33h IRQ4 33h
Драйвер «мыши» выгружен из памяти Драйвер «мыши» загружен в область HMA
** ** * Имя разработанной программы; ** По заданию преподавателя;
Приложение Б Таблица Б.1 Назначение некоторых векторов прерываний. Номер 0 1 2 3 4
5
6 7 8 9 A B C D E
Описание Ошибка деления. Вызывается после выполнения команд DIV или IDIV, если в результате деления происходит переполнение (например, при делении на 0). Прерывание пошагового режима. Вырабатывается после выполнения каждой машинной команды, если в слове флагов установлен бит пошаговой трассировки TF. Аппаратное немаскируемое прерывание, вырабатывается при ошибке четности в оперативной памяти и при запросе прерывания от сопроцессора. Прерывание для трассировки, генерируется при выполнении однобайтовой машинной команды с кодом CCh и обычно используется отладчиками для установки точки прерывания. Переполнение, генерируется машинной командой INT0, если установлен флаг 0F. Если флаг не установлен, то команда INT0 выполняется как NOP. Используется для обработки ошибок при выполнении арифметических операций. Печать копии экрана, генерируется при нажатии на клавиатуре клавиши PrtScr. Для процессора 80286 генерируется при выполнении машинной команды BOUND, если проверяемое значение вышло за пределы заданного диапазона. Неопределенный код операции или длина команды больше 10 байт (для процессора 80286). Особый случай отсутствия математического сопроцессора (процессор 80286). IRQ0 – прерывание интервального таймера, возникает 18,2 раза в секунду. IRQ1 – прерывание от клавиатуры. Генерируется при нажатии и при отжатии клавиши. Используется для чтения данных от клавиатуры. IRQ2 – используется для каскадирования аппаратных прерываний в машинах класса AT. IRQ3 – прерывание асинхронного порта COM2. IRQ4 – прерывание асинхронного порта COM1. IRQ5 – прерывание от контроллера жесткого диска для XT. IRQ6 – прерывание генерируется контроллером флоппидиска после завершения операции.
F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20-5F 60-67 68-6F 70 71 72 73 74 75 76 77 78 - 7F 80-85 86-F0 F1-FF
IRQ7 – прерывание порта принтера, генерируется принтером, когда он готов к выполнению очередной операции. Часто не используется принтерами. Обслуживание видеоадаптера. Определение конфигурации устройств в системе. Определение размера оперативной памяти в системе. Обслуживание дисковой системы. Последовательный ввод/вывод. Расширенный сервис для AT-компьютеров. Обслуживание клавиатуры. Обслуживание принтера. Запуск BASIC в ПЗУ, если он есть. Загрузка операционной системы. Обслуживание часов. Обработчик прерывания Ctrl-Break Прерывание возникает 18.2 раза в секунду, вызывается программно обработчиком прерывания таймера. Адрес видеотаблицы для контроллера видеоадаптера 6845. Указатель на таблицу параметров дискеты. Указатель на графическую таблицу для символов с кодами ASCII 128-255. Используются DOS или зарезервировано для DOS. Зарезервированы для прерываний пользователя. Не используются. IRQ8 – прерывание от часов реального времени. IRQ9 – прерывание от видеоадаптера EGA. IRQ10 – резерв. IRQ11 – резерв. IRQ12 – резерв. IRQ13 – прерывание от математического сопроцессора. IRQ14 – прерывание от контроллеров жестких дисков ATA первичного канала. IRQ15 – прерывание от контроллеров жестких дисков ATA вторичного канала. Не используются. Зарезервированы для BASIC. Используются интерпретатором BASIC. Не используются.