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

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


    Прохождения игр    
Demon's Souls |#15| Dragon God
Demon's Souls |#14| Flamelurker
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero

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


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

Программно-аппаратная организация компьютера IBM PC

Предыдущая страница Следующая страница
1 ... 8 9 10 11 12 13 14  15 16 17 18 19 20 21 ... 47
прерывания, 34, 35 и 36, используются несколько иначе, чем все  остальные.
В то время как  все  прерывания  ДОС  вызываются  нашими  программами  для
запуска процедур ДОС,  эти  три  прерывания  используются  противоположным
образом: они вызываются ДОС  для  запуска  процедур  в  наших  программах.
Каждое из трех прерываний  вырабатывается  ДОС  в  соответствующий  момент
времени, определенный для каждого из прерываний. Если  установить  вектора
этих  прерываний  таким  образом,  чтобы  они  указывали   на    процедуры
обслуживания прерываний  в  наших  программах,  то  наши  программы  будут
получать управление в случае возникновения прерывания. Эти три  прерывания
предназначены  для  передачи  управления  программам  пользователей    при
возникновении одного из трех условий.
     Прерывание 34,  шестнадцатиричное  значение  22,  вырабатывается  при
завершении программы. Это прерывание  позволяет  организовать  специальные
завершающие процедуры,  которые  будут  вызываться,  когда  ДОС  завершает
выполнение  наших  программ.  Это    позволяет    обеспечить    выполнение
восстановительных  процедур  независимо  от  того,  как  завершится   Ваша
программа.
     Прерывание 35,  шестнадцатиричное  значение  23,  вырабатывается  при
нажатии  комбинации  клавиш  Ctrl-Break.  Это  позволяет  нашей  программе
перехватывать сигнал  окончания  (Break),  который  служит  ДОС  указанием
аварийно завершить нашу программу.  Пример  такой  возможности  Вы  можете
увидеть в действии при использовании редактора EDLIN, поставляемого вместе
с ДОС. Учтите, что ДОС не всегда реагирует на нажатие клавиши  Ctrl-Break.
Это происходит только в тех случаях, когда опрашивается клавиатура и когда
пересылаются данные на экран дисплея. Более подробно об этом будет сказано
ниже, при рассмотрении функций ДОС, в частности, функции 8.
     Прерывание 36, шестнадцатиричное  значение  24,  возникает  в  случае
ошибки в работе ДОС. В системе предусмотрена проверка  условия  отклонения
от нормального функционирования ДОС, так называемая "критическая ошибка" и
прерывание 36 позволяет нашим программам перехватывать  управление,  когда
такое происходит. В настоящее время рассматриваются два  типа  критических
ошибок, хотя в дальнейшем  могут  появиться  и  другие.  Первая,  наиболее
частая ошибка, - это "аппаратная ошибка диска".
     Такая ошибка возникает, когда дисковод не может  правильно  работать,
даже после трех попыток ДОС выполнить операцию. Вторая критическая  ошибка
вызывается нарушением копии таблицы размещения файлов в памяти  компьютера
(эту таблицу мы  рассмотрим  в  следующей  главе).  Такая  ситуация  может
возникнуть, если программа случайно будет изменять ячейки в нижних адресах
памяти.
     Следующие за этими тремя прерывания используются  более  традиционным
образом. Прерывание 37, шестнадцатиричное значение  25,  используется  для
чтения секторов дискеты. Тогда как данные из файлов  могут  считываться  с
помощью вызовов функций ДОС, это прерывание  позволяет  читать  сектора  в
любом месте на дискете, независимо от того, являются они частью файла  или
нет. Необходимо указать  область  памяти,  в  которую  должна  считываться
информация, и еще три параметра: дисковод (в виде порядкового номера,  где
0 - это дисковод A, а 1, 2 и 3, соответственно B, C и D), число  секторов,
которые необходимо прочитать, и номер, указывающий первый сектор,  который
требуется прочитать.
     Для  этой   и    следующей    процедур    сектора    идентифицируются
последовательными номерами. Нумерация начинается с нуля, что соответствует
первому  сектору  на  дискете,  который,  при  обычном  способе  адресации
секторов, был бы первым сектором дорожки  0  на  стороне  0.  (Сведения  о
дорожках, адресах  и  сторонах  дискеты  приведены  в  главе  5.)  Сектора
пронумерованы последовательно  на  первой  (сторона  0)  стороне  дискеты.
Номера имеют диапазон от 0 до  319  (шестнадцатиричное  значение  13F),  а
затем, для двухсторонних дискет, продолжаются  с  первого  сектора  второй
стороны, в диапазоне  от  320  (шестнадцатиричное  значение  140)  до  639
(шестнадцатиричное значение 27F).
     Этот  способ  нумерации  можно  представить  в  виде  формулы.   Если
пронумеровать стороны дискеты как 0 и 1, дорожки от 0 до 39 и сектора от 1
до 8,  то  искомый  номер  сектора  для  этой  служебной  процедуры  будет
вычисляться по формуле:


     ИНДЕКС = (СЕКТОР - 1) + (ДОРОЖКА * 8) + (СТОРОНА * 320)


     Эта служебная процедура возвращает однобайтный код ошибки, в  котором
каждый бит указывает отдельное возможное условие ошибки. Номера битов,  их
числовые эквиваленты и смысл ошибки приведены в следующей таблице:


         БИТ     ЧИСЛОВОЙ              ЗНАЧЕНИЕ
                 ЭКВИВАЛЕНТ
         ___     __________      __________________________________

         1-ый       128           Нет ответа от дисковода
         2-ой        64           Ошибка поиска (головка
                                  чтения/записи не перемещается
                                  к нужной дорожке)
         3-ий        32           Ошибка управления (см. описание
                                  контроллера фирмы "НЭК" в главе
                                  2)
         4-ый        16           Ошибка циклического избыточного
                                  проверочного кода (CRC), означает
                                  ошибку в данных
         5-ый         8           Ошибка  ПДП  (ошибка  при  прямом
                                  доступе к памяти)
         6-ой         4           Сектор     не     найден    (либо
                                  неправильный номер  сектора, либо
                                  ошибка форматирования)
         7-ой         2           Дискета защищена от  записи  (при
                                  операции записи)
         8-ой         1           Не используется


     Эта служебная процедура может оказаться  очень  полезной  для  чтения
секторов той  области  дискеты,  которая  отведена  для  системных  целей,
например, для чтения загрузочной записи  или  справочника  файлов  (см.  в
главе 5 дополнительные подробности об этих частях дискеты).
     Прерывание 38, шестнадцатиричное значение 26, используется для записи
сектора на диск, аналогично тому как прерывание 37 используется для чтения
секторов. Остальные подробности работы этих двух процедур одинаковы.
     Функции, аналогичные двум последним, позволяет  выполнять  и  система
BIOS в ПЗУ. В использовании процедур ДОС, впрочем, имеются преимущества  -
ДОС обеспечивает автоматическое повторение  операции  и  восстановление  в
случае ошибки, а также большую гибкость при использовании различных  типов
дискет.
     Две эти процедуры ДОС позволяют за  одну  операцию  читать  и  писать
несколько секторов  диска.  Преимущества  и  недостатки  чтения/записи  по
одному сектору за операцию более подробно рассматриваются в главе 7.
     Прерывание 39, шестнадцатиричное  значение  27,  реализует  операцию,
получившую название "завершить,  но  оставить  в  памяти".  Эта  процедура
используется программами, которые должны остаться в памяти после  загрузки
и выполнения. Основное назначение такой процедуры  состоит  в  обеспечении
возможности загрузки программ, которые  смогут  служить  для  обслуживания
прерываний и использования другими программами.
     ДОС следит за тем, какой объем памяти в нижних  адресах  используется
векторами прерываний и программами  ДОС.  Любые  программы  загружаются  в
область памяти, располагающуюся выше зарезервированной области. При вызове
прерывания 39, адрес  верхней  границы  зарезервированной  области  памяти
изменяется  и  указывает  на  ячейку,  следующую  за  последней    ячейкой
программы, которая должна стать резидентной.
     Когда  эта  процедура  используется  программой,    которая    должна
впоследствии  выполнять  функции  обслуживания   прерываний,    происходит
следующее. Программа должна быть выполнена один раз, что указывает ДОС  на
необходимость загрузить эту программу  и  передать  ей  управление.  После
этого программа только загружает свой собственный адрес в таблицу векторов
прерываний и  вызывает  прерывание  39.  Позднее,  как  только  произойдет
прерывание, управление будет передано резидентной программе.
     Помимо семи описанных процедур обслуживания прерываний  ДОС,  имеется
41 функция ДОС. Каждая из этих функций  вызывается  с  помощью  прерывания
33,шестнадцатиричное значение 21. Ниже перечислены все эти функции.
     Функция  номер  0  в  точности  соответствует  прерыванию  32  -  она
завершает выполнение программы. Очевидно, что нет необходимости  обсуждать
преимущества того или иного способа осуществления этой операции.
     Функция номер 1 используется для чтения одного символа, введенного  с
клавиатуры, и отображения его на экране  дисплея  (в  режиме  "эхо").  Эта
функция ожидает нажатия клавиши. Если нажата одна из  клавиш  специального
назначения, например, функциональная клавиша, то ее нажатие  преобразуется
в последовательность двух отдельных символов, для ввода которых необходимо
выполнить функцию дважды. При этом  первый  из  двух  символов  имеет  код
CHR$(0), а второй - один из символьных кодов. Более подробно использование
этих клавиш и их кодов описано в главе 10 при рассмотрении клавиатуры. Эта
же  функция  позволяет  обнаруживать   специальную    комбинацию    клавиш
Ctrl-Break, которая используется для прерывания работы программы.
     Функция номер 2 используется  для  выдачи  одного  символа  на  экран
дисплея.  Для  обычных,  например,  алфавитных,  символов  эта    операция
выполняется  очень  просто.  В  некоторых,  особых   случаях    выполнение
происходит  иначе.  Все  это  более  подробно  рассмотрено  в  главе  8  и
приложении 4.
     Функция номер 3 используется  для  ввода  одного  байта  от  адаптера
асинхронной связи. Эта функция  ожидает  ввода  символа  и  не  возвращает
никакой информации об ошибках. Это один из немногих случаев, когда функция
ДОС обеспечивает  меньший  сервис,  чем  процедуры  системы  BIOS  в  ПЗУ.
Соответствующие процедуры системы BIOS в ПЗУ описываются в главе 11.
     Функция номер 4 передает один байт данных через  адаптер  асинхронной
линии связи и, таким образом, выполняет операцию, обратную функции 3.
     Функция  номер  5  используется  для  передачи  одного  байта  данных
устройству печати. В отличие от процедур системы BIOS в  ПЗУ здесь  нельзя
указать на какое устройство  печати  должен  осуществляться  вывод  -  ДОС
работает  только  с  одним  устройством.  Если  к  компьютеру   подключено
несколько устройств печати, то вывод будет  осуществляться  на  первое  из
них. Соответствующие процедуры системы BIOS в ПЗУ описаны в главе 11.
     Функция номер 6 довольно любопытна, поскольку  она  используется  как
для ввода с клавиатуры, так и для вывода на экран дисплея.  Любой  символ,
кроме CHR$(255) может быть выдан на экран. Если эту функцию вызвать как бы
для вывода на экран символа CHR$(255), то тем самым будет инициирован ввод
с клавиатуры. Так же как в случае с  функцией  номер  1,  для  кодирования
специальных клавиш  используются  двухбайтовые  коды.  Но,  в  отличие  от
функции номер 1, эта функция не ожидает нажатия клавиши - если ни одна  не
нажата, она возвращает признак отсутствия ввода. Эта функция не распознает
Ctrl-Break особым образом.
     Функция номер 7 аналогична функции номер 1, за исключением того,  что
символы, вводимые с клавиатуры, не отображаются  на  экране.  Так  же  как
функция номер 6, эта функция не отслеживает нажатия клавиши Ctrl-Break.
     Функция номер 8 выполняет те же функции, что и функция  номер  1,  но
без отображения вводимых символов на экране. Подобно функции номер 1  и  в
отличие от функции  номер  7,  эта  функция  следит  за  нажатием  клавиши
Предыдущая страница Следующая страница
1 ... 8 9 10 11 12 13 14  15 16 17 18 19 20 21 ... 47
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама