Главная · Поиск книг · Поступления книг · 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 ... 19 20 21 22 23 24 25  26 27 28 29 30 31 32 ... 85
включая  прокрутку,  инвертирование,  мигание,  а   также    использование
скэн-кодов для ввода с клавиатуры.


     ВВЕДЕНИЕ
     ________________________________________________________________

     В гл.8  были  показаны  основные  возможности  системы для управления
выводом на экран и ввода с клавиатуры.  В данной  главе  приводятся  более
развитые   возможности,   обеспечивающие  прокрутку  данных  на  экране  и
установку байта-атрибута для подчеркивания,  мигания,  выделения  яркости.
Материал первого раздела этой главы (по прерыванию BIOS 10) подходит,  как
для  монохромных,  так  и  для  цветных   дисплеев.   Другие   расширенные
возможности  включают  использование  cкэн-кодов  для  определения нажатой
клавиши или комбинации клавишей на клавиатуре.


                           Монохромный дисплей
                          ---------------------
     Для  работы  монохромного  дисплея  имеется  память    объемом    4К,
начинающаяся  по  адресу  шест.  B0000  (дисплейный  буфер).  Эта   память
обеспечивает:

          - 2К для символов на экране(25 строк х 80 столбцов);
          -  2К  для  байтов-атрибутов,  обеспечивающих    инвертирование,
     мигание, выделение яркостью и подчеркивание.


                       Цветной/графический дисплей
                      -----------------------------
     Для работы стандартного  цветного  графического  дисплея  имеется  16
Кбайт памяти (дисплейный буфер), начинающийся по адресу шест.B8000.  Такой
дисплей  может  являться  текстовым  (для  нормального  ASCII-кода)    или
графическим и работать как в цветном, так и  в  черно-белом  (BW)  режиме.
Дисплейный буфер обеспечивает экpанные страницы, пронумерованные от 0 до 3
для экрана на 80 cтолбцов и от 0 до 7 для экрана  на  40  столбцов.  Номер
страницы по умолчанию - 0. В следующей главе  будет  подробно  рассмотрено
управление цветом и графикой.


     БАЙТ АТРИБУТОВ
     ________________________________________________________________

     Байт атрибутов, как для монохромного, так и для графического  дисплея
в текстовом (не  графическом)  режиме  определяет  характеристики  каждого
отображаемого символа. Байт-атрибут имеет следующие 8 бит:

                                     Фон       Текст

               Атрибут:         BL  R  G  B    I  R  G  B
               Номер битов:     7   6  5  4    3  2  1  0

     Буквы RGB представляют битовые позиции,  управляющие  красным  (red),
зеленым (green) и синим (blue)  лучем  в  цветном  мониторе.  Бит  7  (BL)
устанавливает мигание, а бит 3  (I)  -  уровень  яркости.  На  монохромных
мониторах текст высвечивается зеленым или оранжевым на темном фоне, хотя в
данной главе такое изображение называется черно-белым (BW).
     Для модификации атрибутов можно комбинировать биты следующим oбразом:

                      Эффект выделения              Фон       Текст
                                                    RGB       RGB
               Неотображаемый (черный по черному)   000       000
               Подчеркивание (не для цвета)         000       001
               Нормальный (белый по черному)        000       111
               Инвертированный (черный по белому)   111       000

     Цветные  мониторы  не  обеспечивают  подчеркивания;   вместо    этого
установка бит подчеркивания выбирает синий цвет для  текста  и  получается
отображение  синим  по  черному.  Ниже  приведены   некоторые    атрибуты,
основанные на комбинации битов фона, текста, мигания и выделения яркостью:

               Двоичный    Шест.     Эффект выделения
                 код       код
               0000 0000   00   Неотображаемый (для паролей)
               0000 0111   07   Белый по черному (нормальный)
               1000 0111   87   Белый по черному (мигание)
               0000 1111   0F   Белый по черному (яркий)
               0111 0000   70   Черный по белому (инвертированый)
               1111 0000   F0   Черный по белому (инверт. мигающий)

     Эти атрибуты подходят для текстового режима, как для монохромных, так
и  для  цветных дисплеев.  В следующей главе будет показано,  как выбирать
конкретные цвета.  Для генерации атрибута можно использовать  команду  INT
10H.  При  этом  регистр  BL  должен содержать значение байта-атрибута,  а
регистр AH один из следующих кодов:  06 (прокрутка вверх),  07  (прокрутка
вниз),  08  (ввод атрибута или символа),  09 (вывод атрибута или символа).
Если программа установила некотоpый атрибут,  то он остается  таким,  пока
программа  его не изменит.  Если установить значение байта атрибута равным
шест.00, то символ вообще не будет отображен.


     ПРЕРЫВАНИЕ BIOS INT 10H
     ________________________________________________________________

     Прерывание INT 10H обеспечивает управление всем экраном.  В  регистре
AH устанавливается код, определяющий функцию прерывания. Команда cохраняет
содержимое регистров BX,  CX,  DX, SI и BP. Ниже описывается все возможные
функции.

     AH=00: Установка режима. Данная функция позволяет переключать цветной
монитор  в  текстовый  или  графический  режим.  Установка   pежима    для
выполняемой в текущий момент программы осуществляется c помощью  INT  10H.
При установке происходит очистка экрана. Содержимое регистра AL может быть
следующим:

          00        40 х 25   черно-белый текстовый режим
          01        40 х 25   стандартный i6-цветовой текстовый режим
          02        80 х 25   черно-белый текстовый режим
          03        80 х 25   стандартный 16-цветовой текстовый режим
          04        320 х 200 стандартный 4-цветовой графический режим
          05        320 х 200 черно-белый графический режим
          06        640 х 200 черно-белый графический режим
          07        80 х 25   черно-белый стандартный монохромный
          08 - 0A   форматы для модели PCjr
          0D        320 х 200 16-цветовой графический режим (EGA)
          0E        640 х 200 16-цветовой графический режим (EGA)
          0F        640 х 350 черно-белый графический режим (EGA)
          10        640 х 350 64-цветовой графический режим (EGA)

     EGA (Enhanced  Graphics  Adapter)  -  обозначает  усовершенствованный
графический адаптер.  Следующий пример показывает  установку  стандартного
16-цветового текстового режима:

               MOV  AH,00     ;Функция установки режима
               MOV  AL,03     ;Стандартный цветной текст 80 х 25
               INT  10H       ;Вызвать BIOS

     Для определения  типа  адаптера,  установленного  в  системе,  служит
прерывание BIOS INT 11H. Данная команда возвращает в регистре AX значение,
в котором биты 5 и 4 указывают на видеорежим:

               01     40 х 25   черно-белый режим в цветном адаптере
               10     80 х 25   черно-белый режим в цветном адаптере
               11     80 х 25   черно-белый режим в черно-белом адаптере

     Программа, работающая с неизвестным типом монитора,  может  провеpить
тип по регистру AX после INT 11H и затем установить необходимый режим.

     AH=01: Установка размера курсора.  Курсор  не  является  символом  из
набора ASCII-кодов. Компьютер имеет собственное аппаратное обеспечение для
управления видом курсора.  Для этого имеется специальная обработка по  INT
прерыванию. Обычно символ курсоpа похож на символ подчеркивания. Используя
INT 10H,  можно  управлять  вертикальным  размером  курсора:  биты  4-0  в
регистре CH для верхней линии сканирования, а биты 4-0 в регистре CL - для
нижней. Можно установить любой pазмер курсора по вертикали: от 0 до 13 для
монохромных и EGA монитоpов и от 0 до 7 для большинства цветных мониторов.
Приведем пример для увеличения размера курсора от его  верхней  до  нижней
линии сканирования:

               MOV  AH,01     ;Установить размер курсора
               MOV  CH,00     ;Верхняя линия сканирования
               MOV  CL,13     ;Нижняя линия сканирования
               INT  10H       ;Вызвать BIOS

     В результате выполнения этих команд  курсор  превратится  в  сплошной
мигающий  прямоугольник.  Можно  установить  любой  размер  курсора  между
верхней и нижней границами, например, 04/08, 03/10 и т.д. Курсор сохраняет
свой вид, пока программа не изменит его. Использование размеров 12/13 (для
моно) и 6/7 (для цвета) переводит курсор в его нормальный вид.

     AH=02: Установка позиции курсора.  Эта функция устанавливает курcор в
любую позицию на экране в соответствии с координатами  cтроки  и  столбца.
Номер страницы обычно равен 0, но может иметь значение от 0 до  3  при  80
столбцах на экране.  Для установки позиции курсора  необходимо  занести  в
регистр AH значение 02, в  регистр  BH  номер  страницы  и  в  регистр  DX
координаты строки и столбца:

               MOV  AH,02          ;Установить положение курсора
               MOV  BH,00          ;Страница 0
               MOV  DH,строка      ;Строка
               MOV  DL,столбец     ;Столбец
               INT  10H            ;Вызвать BIOS

     AH=03: Чтение текущего положения курсора.  Программа может определить
положение курсора на экране (строку и столбец), а  также  pазмер  курсора,
следующим образом:

               MOV  AH,03          ;Определить положение курсора
               MOV  BH,00          ;Установить страницу 0
               INT  10H            ;Вызвать BIOS

     После возврата регистр DH будет содержать номер строки, а регистр  DL
- номер столбца.  В регистре CH будет  верхняя  линия  cканирования,  а  в
регистре CL - нижняя.

     AH=04: Чтение положения светового пера. Данная функция используeтся в
графическом режиме для определения положения светового пеpа.

     AH=05: Выбор активной страницы.  Новая страница  устанавливается  для
цветных  текстовых  режимов  от  0  до  3.  Для  режима  40  х 25 возможно
устанавливать до 8 страниц (от 0 до 7),  а для режима  80  х  25  -  до  4
страниц (от 0 до 3).

               MOV  AH,05          ;Установить активную страницу
               MOV  AL,страница    ;Номер страницы
               INT  10H            ;Вызвать BIOS

     AH=06: Прокрутка экрана вверх.  Когда программа пытается выдать текст
на строку ниже последней на  экране,  то  происходит  переход  на  верхнюю
строку. Даже  если  с  помощью  прерывания  будет  специфициpован  нулевой
столбец,  все равно предполагается новая строка, и нижние строки на экране
будут испорчены. Для решения этой проблемы используется прокрутка экрана.
     Ранее код 06 использовался для очистки  экрана.  В  текстовом  режиме
установка в регистре AL значения 00  приводит  к  полной  прокрутке  вверх
всего экрана,  очищая  его  пробелами.  Установка  ненулевого  значения  в
регистре AL определяет количество строк прокрутки  экрана  вверх.  Верхние
строки уходят с экрана, а чистые строки вводятся снизу.  Следующие команды
выполняют прокрутку всего экрана на одну строку:

               MOV  AX,0601H  ;Прокрутить на одну строку вверх
               MOV  BH,07     ;Атрибут: нормальный, черно-белый
               MOV  CX,0000   ;Координаты от 00,00
               MOV  DX,184FH  ; до 24,79 (полный экран)
               INT  10H       ;Вызвать BIOS

     Для  прокрутки  любого  количества  строк    необходимо    установить
соответствующее значение в регистре AL.  Регистр BH содержит  атрибут  для
нормального или инвертированного отображения, мигания, установки  цвета  и
т.д.  Значения в регистрах CX и  DX  позволяют  прокручивать  любую  часть
экрана. Ниже объясняется стандартный подход к прокрутке:

          1. Определить в элементе ROW (строка) значение 0  для  установки
     строки положения курсора.
          2. Выдать текст и продвинуть курсор на следующую строку.
          3. Проверить, находится  ли  курсор  на  последней  строке  (CMP
     ROW,22).
          4. Если да, то увеличить элемент ROW (INC ROW) и выйти.
Предыдущая страница Следующая страница
1 ... 19 20 21 22 23 24 25  26 27 28 29 30 31 32 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама