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

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


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

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


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

Ассемблер и программирование для IBM PC

Предыдущая страница Следующая страница
1 ... 21 22 23 24 25 26 27  28 29 30 31 32 33 34 ... 85

               Шест.          Символ

               DA        Верхний левый угол
               BF        Верхний правый угол
               C0        Нижний левый угол
               D9        Нижний правый угол
               C4        Горизонтальная линия
               B3        Вертикальная линия

     Следующие команды с помощью INT 10H выводят горизонтальную  линию  на
25 позиций в длину:

               MOV  AH,09          ;Функция вывода на экран
               MOV  AL,0C4H        ;Горизонтальная линия
               MOV  BH,00          ;Страница 0
               MOV  BL,0FH         ;Выделение яркостью
               MOV  CX,25          ;25 повторений
               MOV  10H            ;Вызвать BIOS

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

               Шест.          Символ

               B0        Одна четверть точек (светлая штриховка)
               B1        Половина точек (средняя штриховка)
               B2        Три четверти точек (темная штриховка)

     Можно извлечь много полезных идей, изучая программное  обеспечение  с
профессионально организованным выводом, или самому изобрести  оригинальные
идеи для отображения информации.


     ДРУГИЕ ОПЕРАЦИИ ВВОДА/ВЫВОДА В DOS
     ________________________________________________________________

     Ниже  перечислены  другие  функции  DOS,  которые  могут    оказаться
полезными в работе.  Код функции устанавливается в регистре AH  и,  затем,
выдается команда INT 21H.

     AH=01:  Ввод  с  клавиатуры  с  эхо  отображением.  Данная    функция
возвращает значение в регистре AL.  Если содержимое AL не равно  нулю,  то
оно представляет собой стандартный  ASCII-  cимвол,  например,  букву  или
цифру.  Нулевое значение в регистре  AL  свидетельствует  о  том,  что  на
клавиатуре была нажата специальная функциональная клавиша, например, Номе,
F1 или PgUp.  Для определения скэн-кода клавиш, необходимо повторить вызов
функции  (см.  "Дополнительные  функциональные  клавиши"  в    последующих
разделах). Данная функция реагирует на запрос Ctrl/Break.

     AH=02: Вывод символа.  Для вывода символа на экран в текущую  позицию
курсора необходимо поместить  код  данного  символа  в  pегистр  DL.  Коды
табуляции, возврата каретки и конца строки действуют обычным образом.

     AH=07: Прямой ввод с клавиатуры без эхо отображения.  Данная  функция
работает аналогично функции 01 с двумя отличия  ми:  введенный  символ  не
отображается на экране, т.е. нет эхо,  и  oтсутствует  реакция  на  запрос
Ctrl/Break.

     AH=08:  Ввод  с  клавиатуры  без  эхо  отображения.  Данная   функция
действует аналогично функции 01 с  одним  отличием:  введенный  символ  не
отображается на экран, т.е. нет эхо.

     AH=0B: Проверка состояния клавиатуры. Данная функция возвращает шест.
FF в регистре AL, если ввод с клавиатуры возможен, в  противном  случае  -
00. Это средство связано с функциями 01, 07 и 08, которые не ожидают ввода
с клавиатуры.


     ВВОД С КЛАВИАТУРЫ ПО КОМАНДЕ BIOS INT 16H
     ________________________________________________________________

     Команда BIOS  INT  16H  выполняет  специальную  операцию,  которая  в
соответствии с кодом в регистре  AH  обеспечивает  следующие  три  функции
ввода с клавиатуры.

     AH=00: Чтение символа. Данная функция помещает в регистр AL oчередной
ASCII символ, введенный с клавиатуры, и устанавливает скэн-код в  регистре
AH. (Скэн-коды объясняются в следующем разделе). Если на клавиатуре нажата
одна из специальных клавишей, например, Номе  или  F1,  то  в  регистр  AL
заносится 00. Автоматическое эхо символа  на  экран  по  этой  функции  не
происходит.

     AH=01:  Определение  наличия  введенного  символа.  Данная    функция
сбрасывает флаг нуля (ZF=0), если имеется символ для чтения с  клавиатуры;
очередной  символ  и  скэн-код  будут  помещены  в  регистры  AL   и    AH
соответственно и данный элемент останется в буфере.

     AH=02: Определение  текущего  состояния  клавиатуры.  Данная  функция
возвращает в регистре AL состояние клавиатуры из адреса памяти шест.417:

     Бит
      7    Состояние вставки активно (Ins)
      6    Состояние фиксации верхнего регистра (Caps Lock) переключено
      5    Состояние фиксации цифровой клавиатуры (Num Lock) переключено
      4    Состояние фиксации прокрутки (Scroll Lock) переключено
      3    Нажата комбинация клавишей Alt/Shift
      2    Нажата комбинация клавишей Ctrl/Shift
      1    Нажата левая клавиша Shift
      0    Нажата правая клавиша Shift


     ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ
     ________________________________________________________________

     Клавиатура располагает тремя основными типами клавишей:

          1. Символьные (алфавитно-цифровые) клавиши: буквы  от  a  до  z,
     цифры от 0 до 9, символы %, $, # и т.д.
          2.  Функциональные  клавиши:  Номе,  End,  Возврат  на  позицию,
     стрелки, Return,  Del,  Ins,  PgUp,  PgDn и программно-функциональные
     клавиши.
          3. Управляющие клавиши: Alt,  Ctrl  и  Shift,  которые  работают
     совместно с другими клавишами.

     Функциональная клавиша не вырабатывает  какой-либо  символ,  но  чаще
формирует запрос на некоторые действия.  Аппаратная реализация не  требует
от функциональных клавишей выполнения каких-либо  специфических  действий.
Задачей программиста является определить, например,  что  нажатие  клавиши
Номе должно привести к установке курсора в верхний левый угол экрана,  или
нажатие клавиши End должно установить курсор в  конец  текста  на  экране.
Можно легко запрограммировать функциональные клавиши для выполнения  самых
различных действий.
     Каждая клавиша имеет собственный скэн-код от 1 (Esc) до 83 (Del)  или
от шест.01  до  шест.53.  Посредством  этих  скэн-кодов  программа   может
определить нажатие любой клавиши.  Например, запрос на ввод одного символа
с клавиатуры включает загрузку 00 в регистр AH и обращение  к  BIOS  через
INT 16H:
               MOV  AH,00     ;Функция ввода с клавиатуры
               INT  16H       ;Вызвать BIOS

Данная операция имеет два типа  ответов  в  зависимости  от  того,  нажата
символьная клавиша или функциональная.  Для символа  (например,  буква  A)
клавиатура посылает в компьютер два элемента информации:

          1. ASCII-код символа A (шест.41) в регистре AL;
          2. Скэн-код для клавиши A (шест.1E) в регистре AH.

     Если нажата функциональная клавиша (например, Ins)  клавиатура  также
передает два элемента:

          1. Нуль в регистре AL;
          2. Скэн-код для клавиши Ins (шест.52) в регистре AH.

     Таким образом,  после выполнения команды INT  16H  необходимо  прежде
проверить  содержимое регистра AL.  Если AL содержит нуль,  то была нажата
функциональная клавиша,  если не нуль,  то получен код символьной клавиши.
Ниже приведен пример такой проверки:

               MOV  AH,00     ;Функция ввода
               INT  16H       ;Вызвать BIOS
               CMP  AL,00     ;Функциональная клавиша?
               JZ   exit      ; да - выйти


                                Скэн-коды
                               -----------
     На рис.9.2 приведены скэн-коды для некоторых функциональных клавишей.
Клавиатура имеет по две клавиши для таких символов как *, + и  -.  Нажатие
"звездочки", например, устанавливает код символа шест.2A в регистре  AL  и
один из двух скэн-кодов в регистре AH в  зависимости  от  того,  какая  из
клавишей была нажата: шест.09 для звездочки над цифрой 8 или  шест.29  для
звездочки на клавише PrtSc.
     Ниже приведена логика проверки скэн-кода для звездочки:

               CMP  AL,2AH    ;Звездочка?
               JNE  EXIT1     ; нет - выйти
               CMP  AH,09H    ;Какой скэн-код?
               JE   EXIT2

__________________________________________________________________________

               Функциональные клавиши            Скэн-коды

                  Alt/A - Alt/Z                   1E - 2C
                  F1 - F10                        3B - 44
                  Home                            47
                  Стрелка вверх                   48
                  PgUp                            49
                  Стрелка влево                   4B
                  Стрелка вправо                  4D
                  End                             4F
                  Стрелка вниз                    50
                  PgDn                            51
                  Ins                             52
                  Del                             53
__________________________________________________________________________

     Рис.9.2. Скэн-коды некоторых функциональных клавишей


     Приведем пример программы для установки курсора в строку 0 и  cтолбец
0 при нажатии клавиши Номе (скэн-код 47):

               MOV  AH,00     ;Выполнить ввод с клавиатуры
               INT  16H       ;
               CMP  AL,00     ;Функциональная клавиша?
               JNE  EXIT1     ; нет -- выйти
               CMP  AH,47H    ;Скэн-код для клавиши Home?
               JNE  EXIT2     ; нет -- выйти
               MOV  AH,02     ;
               MOV  BH,00     ;Установить курсор
               MOV  DX,00     ; по координатам 0,0
               INT  10H       ;Вызвать BIOS

     Функциональные клавиши F1 - F10 генерируют скэн-коды  от  шест.3B  до
шест.44. Следующий пример выполняет  проверку  на  функциональную  клавишу
F10:
               CMP  AH,44H    ;Клавиша F10?
               JE   EXIT1     ; Да!

По адресу EXIT1 программа может выполнить любое необходимое действие.
     Полный список скэн-кодов приводится в  руководстве  по  языку  BASIC.
Техническое описание IBM PC содержит подробное описание всех скэн-кодов, а
также описание использования клавишей Alt, Ctrl и Shift.


     ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ
     ________________________________________________________________

     - Монохромный дисплей использует 4К байт памяти, 2К байт на символы и
2К байт на атрибуты для каждого символа.

     - Цветной дисплей использует 16К  байт  памяти  и  может  работать  в
цветном   или   черно-белом  (BW)  режимах.  Возможно  использование,  как
текстового режима  для  отображения  ASCII-символов,  так  и  графического
режима для любых изображений.

     - Байт-атрибут используется и для монохромных дисплеев и для  цветных
в  текстовом  режиме.  Атрибут  обеспечивает  мигание,  инвертирование   и
выделение яркостью.  Для цветных дисплеев  в  текстовом  режиме  биты  RGB
позволяют выбирать цвета, но не имеют режима подчеркивания.

     - Команда  BIOS  INT  10H  обеспечивает  полную  экранную  обработку:
установку режимов, установку положения курсора, прокрутку экрана, чтение с
клавиатуры и вывод на экран.

     - Если ваша программа выводит вниз экрана, то не забывай те выполнять
прокрутку прежде, чем курсор выйдет из последней строки.

     - При  использовании  атрибутов  для  мигания  и  инвертирования,  не
забывайте сбрасывать их в отключенное состояние.

     - Для функций по команде INT  10H,  выполняющих  чтение  и  вывод  на
экран, помните о перемещении курсора.

     -  Команда  BIOS  INT  16H  обеспечивает  прием    и    распознавание
функциональных клавишей.

     -  Функциональные  клавиши  предполагают  запрограммированный   вызов
некоторых действий.

     -  Каждая  клавиша  на  клавиатуре   имеет    конкретный    скэн-код,
пронумерованный от 1 (Esc) до 83 (Del), или от шест.01 до шест.53.

     - Нажатие символьной клавиши на клавиатуре  передает  код  символа  в
регистр AL и скэн-код клавиши в регистр AH.

     - Нажатие  функциональной  клавиши  на  клавиатуре  передает  нуль  в
Предыдущая страница Следующая страница
1 ... 21 22 23 24 25 26 27  28 29 30 31 32 33 34 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама