Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 37 38 39 40 41 42 43  44 45 46 47 48 49 50 ... 198
         ществить доступ к RTL.  Для этого семейство микропроцессоров 8086
         предоставляет одно решение в форме векторов прерываний. При уста-
         новке вектора прерывания  в  точке  адресации  библиотеки   любая
         программа может осуществить к ней доступ путем использования инс-
         трукции INT.
             Семейство микропроцессоров  8086  поддерживает  256  векторов
         прерываний,  из которых,  по крайней мере, 64 (от 00h до 39h) ре-
         зервируются  для аппаратуры системы или MS-DOS.  Частичный список
         векторов прерываний,  используемых  фирмой  "Интел",  стандартами
         фирмы  "ИБМ",  базовой  системой ввода-вывода (BIOS - Basic Input
         Output System) фирмы "ИБМ" и MS-DOS приведен в таблице  3-5.  Ос-
         тальные  векторы  прерываний используются другими изготовителями.
         Обычно векторы с более высокими номерами являются более надежными
         для использования, хотя это можно подтвердить только тестировани-
         ем.  В нашем случае выбран вектор 40h, потому что при его исполь-
         зовании система не разрушается.
           ____________________________________________________________
          |                                                            |
          |                      ПРЕДОСТЕРЕЖЕНИЕ                       |
          |                                                            |
          |    Многие системы могут использовать векторы прерываний,   |
          |    отличающиеся от определенных  для  MS-DOS.  Перед ис-   |
          |    пользованием  любого  вектора  проверьте  Руководство   |
          |    системы.  В  результате  изменения  уже используемого   |
          |        вектора может произойти полный отказ системы !      |
          |____________________________________________________________|



                                                         Таблица 3-5
              Векторы прерываний стандартов фирмы "ИБМ", процессора,
                         аппаратных средств, BIOS и MS-DOS
         ________________________________________________________________
                       |            |
           Прерывание  | Определено |            Использование
         (шестн.знач.) |            |
         ______________|____________|____________________________________
         Int 0         |   Интел    | Прерывание из-за ошибки деления на
                       |            | нуль
         Int 1         |   Интел    | Прерывание "прослеживания" одного
                       |            | шага
         Int 2         |   Интел    | Немаскируемое прерывание аппаратных
                       |            | средств
         Int 3         |   Интел    | Прерывание контрольной точки

                                      - 3-38 -
         ________________________________________________________________
                       |            |
           Прерывание  | Определено |            Использование
         (шестн.знач.) |            |
         ______________|____________|____________________________________
         Int 4         |   Интел    | Прерывание из-за переполнения при
                       |            | умножении
         Int 5         |   Интел    | Исключительная ситуация "граница
                       |            | 80x86"
                       |   BIOS     | Функция печати экрана
         Int 6         |   Интел    | Исключительная ситуация "неопреде-
                       |            | ленный код операции"
         Int 7         |   Интел    | Исключительная ситуация "код опера-
                       |            | ции ESC"
         Int 8 / IRQ 0 |   ИБМ      | Аппаратные средства системного тай-
                       |            | мера
         Int 9 / IRQ 1 |   ИБМ      | Аппаратные средства клавиатуры
         Int A / IRQ 2 |   ИБМ - XT | Запасной запрос аппаратных средств
         Int A / IRQ 2 |   ИБМ - AT | IRQ 8 - IRQ F
         Int B / IRQ 3 |   ИБМ      | Аппаратные средства последователь-
                       |            | ного порта 2
         Int C / IRQ 4 |   ИБМ      | Аппаратные средства последователь-
                       |            | ного порта 1
         Int D / IRQ 5 |   ИБМ - XT | Аппаратные средства фиксированного
                       |            | диска
         Int D / IRQ 5 |   ИБМ - AT | Параллельный порт 2
         Int E / IRQ 6 |   ИБМ      | Аппаратные средства дискового конт-
                       |            | роллера
         Int F / IRQ 7 |   ИБМ      | Аппаратные средства параллельного
                       |            | порта 1
         Int 10        |   BIOS     | Обслуживание видео и экрана
         Int 11        |   BIOS     | Список аппаратуры считывания
         Int 12        |   BIOS     | Размер отчета памяти
         Int 13        |   BIOS     | Обслуживание дискового ввода-вывода
         Int 14        |   BIOS     | Обслуживание последовательного
                       |            | ввода-вывода
         Int 15        |   BIOS     | Обслуживание кассетной ленты и
                       |            | расширенное обслуживание
         Int 16        |   BIOS     | Обслуживание ввода-вывода клавиату-
                       |            | ры
         Int 17        |   BIOS     | Обслуживание ввода-вывода принтера
         Int 18        |   BIOS     | Загрузчик Бэйсика
         Int 19        |   BIOS     | Программа начальной загрузки (на-
                       |            | чальный загрузчик)
         Int 1A        |   BIOS     | Обслуживание системного таймера и
                       |            | часов
         Int 1B        |   BIOS     | Клавиши Control-Break клавиатуры
                       |            | (из Int 9)
         Int 1C        |   BIOS     | Часы таймера пользователя
                       |            | (из Int 08)
         Int 1D - 1F   |   Интел    | Зарезервировано
         Int 20        |   MS-DOS   | Функция завершения старой (OLD)
                       |            | программы
         Int 21        |   MS-DOS   | Вызов функции MS-DOS
         Int 22        |   MS-DOS   | Адрес завершения программы
         Int 23        |   MS-DOS   | Адрес выхода Control-C

                                      - 3-39 -
         ________________________________________________________________
                       |            |
           Прерывание  | Определено |            Использование
         (шестн.знач.) |            |
         ______________|____________|____________________________________
         Int 24        |   MS-DOS   | Адрес аварийного завершения из-за
                       |            | фатальной ошибки
         Int 25        |   MS-DOS   | Функция чтения по абсолютному ад-
                       |            | ресу на диске
         Int 26        |   MS-DOS   | Функция записи по абсолютному ад-
                       |            | ресу на диске
         Int 27        |   MS-DOS   | Функция "завершить и оставить
                       |            | резидентной"
         Int 28        |   MS-DOS   | Цикл клавиатуры/Простой DOS (заре-
                       |            | зервировано)
         Int 29        |   MS-DOS   | Быстрый вывод консоли (зарезервиро-
                       |            | но)
         Int 2A        |   MS-DOS   | Интерфейс MS-NET (зарезервировано)
         Int 2B - 2D   |   MS-DOS   | Зарезервировано для MS-DOS (IRET)
         Int 2E        |   MS-DOS   | Команда "выполнить" (зарезервиро-
                       |            | вано)
         Int 2F        |   MS-DOS   | Управление принтером MS-DOS вер-
                       |            | сии 3
         Int 30 - 3E   |   MS-DOS   | Зарезервировано для MS-DOS
         Int 3F        |   MS-DOS   | Управление оверлейным компоновщи-
                       |            | ком
         Int 4A        |   BIOS     | Часы реального времени (от int 70)
         Int 67        |   EMS 4.0  | Спецификация расширяемой памяти
         *Int 70/IRQ 8 |   ИБМ      | Аппаратные средства часов реального
                       |            | времени
         *Int 71/IRQ 9 |   ИБМ      | Прерывания аппаратных средств IRQ 2
         *Int 72/IRQ A |   ИБМ      | Зарезервированные аппаратные
                       |            | средства
         *Int 73/IRQ B |   ИБМ      | Зарезервированные аппаратные
                       |            | средства
         *Int 74/IRQ C |   ИБМ      | Зарезервированные аппаратные
                       |            | средства
         *Int 75/IRQ D |   ИБМ      | Аппаратные средства сопроцессора
         *Int 76/IRQ E |   ИБМ      | Аппаратные средства фиксированного
                       |            | диска
         *Int 77/IRQ F |   ИБМ      | Зарезервированные аппаратные
                       |            | средства
         ______________|____________|____________________________________
         * - только шины типа AT
             В MS-DOS векторы прерывания могут быть установлены  посредс-
         твом использования функции MS-DOS с кодом 25h "Установить вектор
         прерывания". Операция установки очень проста: в регистр AL зано-
         сится номер  вектора,  а адрес для загрузки в вектор заносится в
         пару регистров DS:DX (сегмент:смещение).  В связи с тем,  что  в
         программах типа  .COM  регистр  DS устанавливается в то же самое
         значение, что и регистр CS,  содержимое регистра DS уже является
         правильным для  вызова.  Затем загружаются оставшиеся регистры и
         делается вызов с помощью следующего программного кода:
             mov       dx,offset entry    ; получение точки входа RTL
             mov       al,v_num           ; установка номера вектора
             mov       ah,25h             ; установка вектора прерывания
             doscall                      ; вызов MS-DOS

                                      - 3-40 -
             После того,  как  подпрограмма EXRTL установлена в памяти   и
         осуществляет доступ к вектору прерывания, установленному в табли-
         це векторов прерываний,  RTL готова для использования. Для ее вы-
         зова подпрограмма использует инструкцию 40h и управление  переда-
         ется  к  подпрограмме  EXRTL.  Программа  RTL_TEST,  показанная в
         листинге 3-6,  является одним из примеров подпрограммы,  осущест-
         вляющей доступ к этой отдельной RTL.
             Интерфейс между подпрограммами  EXRTL  и  RTL_TEST  полностью
         обеспечивается через стек.  Подпрограмма RTL_TEST помещает в стек
         код функции и выполняет инструкцию int 40h.  Заметим,  что  схема
         стека  в  RTL  отличается  от такого интерфейса в инструкции CALL
         (вызов),  в котором прерывание помещает флажки в  стек,  а  также
         сегмент возврата и смещение.
             Передача управления  между   двумя   секциями   показана   на
         Рис.3-12.  Инструкция  int  40h передает управление через таблицу
         векторов прерываний  в  подпрограмму  EXRTL.  Затем  подпрограмма
         EXRTL  выбирает  код  функции  из стека,  используя блок описания
         структуры стека. Подпрограмма EXRTL анализирует правильность кода
         функции и,  если он правилен, передает управление к соответствую-
         щему драйверу функции путем использования макроса case. После вы-
         полнения  функции подпрограмма EXRTL возвращает управление в под-
         программу RTL_TEST по инструкции IRET (Return  from  Interrupt  -
         возврат из прерывания).
             Стековая структура frame (смотри листинг 3-5) также обеспечи-
         вает  подпрограмме  EXRTL  доступ к флажкам вызывающей программы,
         которые хранятся в стеке  рядом  с  вектором.  Путем  копирования
         флажков  из стека в свой собственный регистр флажков подпрограмма
Предыдущая страница Следующая страница
1 ... 37 38 39 40 41 42 43  44 45 46 47 48 49 50 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама