Главная · Поиск книг · Поступления книг · 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 ... 36 37 38 39 40 41 42  43 44 45 46 47
программы 10.1:

       _____________________________________________________________

          Байт  Бит    Смысл            Значение, когда бит равен 1
       _____________________________________________________________

            1    1     Insert              состояние активное
            1    2     Caps-Lock           состояние активное
            1    3     Num-Lock            состояние активное
            1    4     Scroll-Lock         состояние активное
            1    5     Alt                 клавиша нажата
            1    6     Ctrl                клавиша нажата
            1    7     смещение слева      клавиша нажата
            1    8     смещение справа     клавиша нажата
            2    1     Insert              клавиша нажата
            2    2     Caps-Lock           клавиша нажата
            2    3     Num-Lock            клавиша нажата
            2    4     Scroll-Lock         клавиша нажата
            2    5     Состояние захвата   активное состояние
            2    6     (не используется)   (после Ctrl-Num-Lock)
            2    7     (не используется)
            2    8     (не используется)
       ____________________________________________________________


     В этой таблице нашел отражение ряд  интересных  моментов.  Во-первых,
можно отметить параллельность использования  первых  четырех  битов  обоих
байтов  для  клавиш-переключателей.  В  первом  байте  отражается  текущее
состояние клавиши, а во втором байте указывается  нажатие  соответствуюших
клавиш. Во-вторых.  обратив  внимание  на  биты,  соответствующие  нажатию
обычных  клавиш  смещения,  расположенные  в  правой  и  в  левой   частях
клавиатуры, распознаются по  отдельности.  Для  такого  разделения  трудно
придумать разумное применение, но тем не менее оно имеет место.
     Кроме того, система BIOS следит за  состоянием  вставки,  управляемым
переключателем.  Эта  функция  обычно  игнорируется  программами,  которые
используют клавишу Iusert, например, текстовыми процессорами. Обычно. все
программы, использующие эту  клавишу,  сами  следят  за  режимом  вставки.
Практического значения это не имеет, но нам показалось любопытным отметить
и такой факт.
     И, наконец, обратите  внимание  на  бит  состояния  захвата,  который
устанавливается, когда  процедура  обслуживания  клавиатуры  системы  BIOS
обнаруживает комбинацию клавиши Ctrl-NumLock. Эта комбинация  используется
системой  BIOS  для  управления  состоянием  захвата,  которое  программам
обнаружить трудно, поскольку в этом состоянии программы не выполняются.  В
состоянии захвата система BIOS выполняет  короткий  цикл,  ожидая  нажатия
клавиши, которое выводит систему из  этого  состояния.  В  этом  состоянии
распознаются и обслуживаются все прерывания. Если прерывание  поступит  от
клавиатуры  (при  нажатии  обычной  клавиши),   то    состояние    захвата
завершается, код нажатой клавиши отбрасывается и  управление  возвращается
той программе, которая выполнялась до установления состояния захвата. Если
прерывание имело другую природу (номер,  прерывание  от  дисков),  то  оно
обслуживается, но состояние  захвата  сохраняется  пока  не  будет  нажата
клавиша.
     Комбинация клавиш Ctrl-NumLock - это один из четырех особых  случаев,
отслеживаемых  процедурой  системы  BIOS.  Когда  процедура   обслуживания
клавиатуры обрабатывает коды, принимаемые  от  клавиатуры,  она  постоянно
проверяет  появление  одной  из  четырех  особых    комбинаций,    которые
обслуживаются специальным образом.
     Фактически, эти четыре комбинации  рассматриваются  как  команды,  по
которым должно начинаться выполнение определенных служебных процедур.  Эти
четыре комбинации: Ctrl-NumLock, PrtSc, Ctrl-Alt-Del и Ctrl-Break.
     Как  мы  уже  видели,  комбинация  Ctrl-NumLock   используется    для
приостановки  работы  компьютера.  Процедура  обслуживания  клавиатуры  не
позволяет  компьютеру  продолжать  выполнение  любой    программы,    пока
приостановка не будет отменена нажатием клавиши.
     Команда  распечатки  экрана  или  PrtSc  предназначена  для    вывода
содержимого  экрана  на  устройство  печати.  Поскольку    эта    операция
выполняется  на  самом  примитивном  уровне,  она  не  может  использовать
возможности ДОС, такие  как  пересылка  сообщения  в  линию  связи  вместо
устройства печати. Процедура распечатки экрана доступна и Вашим программам
на уровне прерываний, что будет показано в главе 11.
     Комбинация клавиш Ctrl-Alt-Del используется для перезапуска  или  для
перезагрузки  системы.  Когда  встречается  такая  комбинация,   процедура
обслуживания клавиатуры передает управление программе проверки  системы  и
запуска работы операционной системы.
     Эту комбинацию клавиш можно использовать в любой момент  времени  для
перезапуска системы, если произошло какое-либо отклонение  от  нормального
функционирования. Однако, как можно заметить, эта комбинация действует  не
всегда. В некоторых случаях IBM/PC необходимо бывает  выключить,  а  затем
снова включить и уже после этого пытаться ее перезапустить. Для  чего  это
бывает  необходимо?  Комбинация  Ctrl-Alt-Del  срабатывает  всегда,  когда
работает процедура обслуживания клавиатуры. Это  условие  может  оказаться
невыполненным в двух случаях. Первый и наиболее распространенный связан  с
запретом прерываний. Из главы 3 Вам должно быть известно,  что  прерывания
запрещаются машинной командой CLI и не обслуживаются пока не будет  выдана
команда STI. Обычно команда  STI  следует  за  командой  CLI  через  очень
короткий промежуток времени. Однако, если программа  по  ошибке,  оставила
прерывания запрещенными, то нажатие клавиш Ctrl-Alt-Del не приведет  ни  к
какому результату. Другая причина нарушения работы процедуры  обслуживания
клавиатуры может быть связана с изменением значения вектора прерывания  от
клавиатуры. Если изменить ячейки памяти с 36 по 39,  в  которых  находится
вектор прерывания от клавиатуры, тогда клавиатура не будет работать, в том
числе и клавиши Ctrl-Alt-Del. Естественно,  что  программа  запуска  после
включения питания восстанавливает все вектора прерываний.
     Комбинация Ctrl-Break предназначена для прерывания текущей  операции.
В  отличие  от  остальных  трех  специальных    комбинаций    она    может
отрабатываться программно. Прерывание номер 27, шестнадцатиричное значение
1В, зарезервировано для процедуры, которая должна вызываться  при  нажатии
клавиш Ctrl-Break. Если программа хочет  использовать  это  средство,  она
должна занести адрес процедуры обслуживания прерывания  в  ячейки  вектора
прерывания 27 - ячейку с адресом 108, шестнадцатиричное значение  6С.  Эту
возможность можно исследовать, нажимая клавиши  Ctrl-Break  при  работе  с
интерпретатором БЕЙСИКА или редактором Edlin, поставляемым в составе  ДОС.
Если программа не устанавливает адрес процедуры обслуживания прерывания  в
ячейку 108, то система BIOS совместно с ДОС прерывают  выполнение  текущей
программы или файла пакетной обработки. Управление возвращается ДОС.
     Поскольку  блок  клавиатуры  сообщает  обо  всем,  что  происходит  с
клавишами и процедуры системы BIOS в ПЗУ  интерпретируют  любые  действия,
выполняемые  с  клавиатурой,  Ваша  программа  может  следить  за    всеми
действиями,  производимыми  с  клавиатурой.  Программам  редко   требуются
какие-либо  сведения  помимо  тех,    которые    сообщаются    процедурами
обслуживания  клавиатуры  системы  BIOS  в  ПЗУ,  поэтому  не   обеспечена
специальная возможность, позволяющая программе определить какие в точности
действия выполнялись с клавиатурой.
     Если Вам все-таки необходимо более  точно  знать,  что  происходит  с
клавиатурой,  Ваши  программы  могут  подменить  вектор  прерываний    для
клавиатуры, который расположен по адресу  36,  шестнадцатиричное  значение
24. Если Вы разрабатываете собственную процедуру  обслуживания  прерываний
от  клавиатуры,  то  она  может  либо  выполнять  абсолютно  все   функции
обслуживания, либо  служить  пред-процессором  для  стандартной  процедуры
системы BIOS. Предпроцессор может извлекать любую информацию, которая  Вам
необходима, и передавать управление стандартной процедуре  для  выполнения
обычных действий.


     10.3. Символьные клавиши

     Коды сканирования клавиши  преобразуются системой BIOS в  расширенные
коды ASCII, состоящие из всех 256  возможных  байтовых  комбинаций,  кроме
одной (байт с нулевым  значением).  В  этот  набор  кодов  входят  обычные
символы, набор которых описывается в различных руководствах по IBM/PC. Эти
коды можно формировать либо с помощью нажатия  обычных  клавиш  (например,
клавиши А для "А" и так  далее)  или  путем  использования  клавиатуры  и
клавиши Alt.
     Для формирования кодов  ASCII  по  второму  методу  нужно,  удерживая
клавишу "Alt" в нажатом состоянии, вводить числовое значение  кода  ASCII.
Значение должно вводиться  в  десятичном  виде  (от  1  до  255)  и  можно
использовать только числовые клавиши в  правой  части  клавиатуры  (но  не
числа в верхнем ряду средней части клавиатуры). При использовании  клавиши
"Alt" процедуры системы BIOS работают особым образом, поскольку  несколько
нажатий клавиш должны интерпретироваться  как  один  символ.  Пока  нажата
клавиша "Alt" можно нажимать сколько угодно цифровых клавиш. Когда клавиша
"Alt" будет наконец освобождена,  будет  сформирован  код  символа  ASCII,
соответствующий введенному числовому значению. Если ввести слишком большое
число, используется его значение по  модулю  256.  Например,  если  ввести
Alt-1000, то будет сгенерирован символ CHR$(232). Деление 1000 на 256 дает
остаток 232, поэтому и генерируется символ с кодом CHR$(232).
     Единственное значение в  коде  ASCII,  которое  невозможно  ввести  с
клавиатуры - это нулевое значение или CHR$(0). На  это  имеется  несколько
причин (код 0 определен в системе кодов ASCII как пустой  символ,  который
должен  игнорироваться),  однако,   главная    причина    заключается    в
использовании нуля системой BIOS для указания на  наличие  второго  набора
символов, специальных  символов.  Хотя  некоторые  руководства  по  IBM/PC
указывают, что нулевой код генерируется  нажатием  клавиши  Ctrl-2  или  с
помощью клавиши "Alt", это  неверно.  Если  удерживать  клавишу  "Ctrl"  в
нажатом состоянии и нажать цифровую клавишу "2" будет сформирован один  из
специальных символов и этот символ должен интерпретироваться  как  CHR$(0)
из набора кодов ASCII.  Это  не  совсем  то  же  самое,  что  формирование
действительного кода ASCII CHR$(0). Использование клавиши  "Alt"  тоже  не
даст желаемого  результата,  будете  ли  Вы  нажимать  клавиши  Alt-0  или
пытаться "обмануть" систему, вводя эквиваленты по  модулю  256,  например,
Alt-256 или Alt-512.
     Специальные символы используются для обозначения специальных  клавиш,
таких как "Home", "End" и десять функциональных клавиш (фактически, как Вы
скоро увидите, имеется сорок функциональных клавиш).
     Специальные символы позволяют использовать специальные клавиши, такие
как  функциональные  клавиши,  не  используя  ни  один  из  256   символов
расширенного кода ASCII.
     Механизм кодирования, который  система  BIOS  в  ПЗУ  использует  для
указания, какой символ  был  введен  с  клавиатуры  (и  определение  того,
обычный это символ или специальный), работает с двумя байтами. Если первый
из двух байтов не нулевой, то введен символ расширенного кода ASCII и этот
символ хранится в  первом  байте.  Если  же  первый  байт  нулевой,  то  с
клавиатуры введен специальный символ и его код хранится во  втором  байте.
Здравый смысл подсказывает,  что  можно  было  бы  использовать  один  бит
второго байта для обычных и специальных символов.  Это  было  бы  проще  и
позволило бы вводить нулевой код ASCII.
     В то время как в расширенном наборе ASCII 256 кодов (255 из них можно
Предыдущая страница Следующая страница
1 ... 36 37 38 39 40 41 42  43 44 45 46 47
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама