Главная · Поиск книг · Поступления книг · 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 ... 23 24 25 26 27 28 29  30 31 32 33 34 35 36 ... 85

               MOV  AH,00     ;Функция установки режима
               MOV  AL,04     ;Разрешение 320х200
               INT  10H

     Установка графического  режима  приводит  к  исчезновению  курсора  с
экрана. Подробности по установке режима приведены в главе 9.

     AH=0BH: Установка цветовой палитры.  Число в регистре  BH  определяет
назначение регистра BL:

          BH=00 выбирает цвета фона и бордюра в соответствии с  содержимым
     pегистра BL.  Цвет фона от 1 до 16 соответствует шест. значениям oт 0
     до F;
          BH=01 выбирает палитру соответственно содержимому регистра BL (0
     или 1):

               MOV  AH,0BH    ;Функция установки цвета
               MOV  BH,01     ;Выбор палитры
               MOV  BL,00     ; 0 (зеленый, красный, корич.)
               INT  10H       ;Вызвать BIOS

     Палитра, установленная один раз, сохраняется, пока не будет  отменена
другой командой.  При смене палитры весь экран меняет цветовую комбинацию.
При  использовании  функции  AH=0BH  в   текстовом    режиме,    значение,
установленное для цвета 0 в палитре, определяет цвет бордюра.

     AH=0CH: Вывод точки на экран.  Использование кода 0C  в  регистре  AH
позволяет вывести на экран  точку  в  выбранном  цвете  (фон  и  палитра).
Например, для  разрешения  320х200  загрузим  в  регистр  DX  вертикальную
координату (от 0 до 199), а в регистр CX - горизонтальную координату (от 0
до 319). В регистр AL поместим цвет точки (от 0 до 3):

               MOV  AH,0CH         ;Функция вывода точки
               MOV  AL,цвет        ;Цвет точки
               MOV  CX,столбец     ;Горизонтальная координата
               MOV  DX,строка      ;Вертикальная координата
               INT  10H            ;Вызвать BIOS

     AH=0DH: Чтение точки с экрана.  Данная  функция  позволяет  прочитать
точку для определения  ее  цвета.  В  регистр  DX  должна  быть  загружена
вертикальная координата (от 0 до 199), а в регистр CX - горизонтальная (от
0 до 319).  В регистре AH должно быть значение 0D. Функция возвращает цвет
точки в регистре AL.


     ПРОГРАММА: УСТАНОВКА ГРАФИЧЕСКОГО РЕЖИМА И ОТОБРАЖЕНИЕ ЦВЕТА
     ________________________________________________________________

     Программа, приведенная на рис.10.1, использует команду  INT  10H  для
установки графического режима, выбора зеленого  фона  и  вывода  на  экран
точек (40 строк  по  320  столбцов).  В  программе  происходит  увеличение
значения цвета на 1  для  каждой  строки.  Так  как  в  определении  цвета
участвуют только три правых бита,  цвета  повторяются  через  каждые  семь
строк.

__________________________________________________________________________

TITLE   GRAPHIX (COM) Пример цвета и графики
CODESG  SEGMENT PARA 'Code'
        ASSUME  CS:CODESG,DS:CODESG,SS:CODESG
        ORG     100H

MAIN    PROC    NEAR
        MOV     AN,00           ;Установка режима графики
        MOV     AL,0DH          ; для EGA (CGA=04)
        MOV     AH,0BH          ;Установить палитру
        MOV     BH,00           ;Фон
        MOV     BL,02           ;Зеленый
        INT     10H
        MOV     BX,00           ;Начальные цвет,
        MOV     CX,00           ; столбец
        MOV     DX,00           ; и строка
A50:
        MOV     AH,0CH          ;Функция вывода точки
        MOV     AL,BL           ;Установить цвет
        INT     10H             ;BX, CX, и DX сохраняются
        INC     CX              ;Увеличить столбец
        CMP     CX,320          ;Столбец 320?
        JNE     A50             ; нет - цикл,
        MOV     CX,00           ; да - сбросить столбец
        INS     BL              ;Изменить цвет
        INS     DX              ;Увеличить строку
        CMP     DX,40           ;Строка 40?
        JNE     A50             ; нет - цикл,
        RET                     ; да - завершить
MAIN    ENDP
CODESG  ENDS
        END     MAIN
__________________________________________________________________________

     Рис.10.1 Вывод на экран в цветном графическом режиме.


     После выполнения программы дисплей  остается  в  графическом  режиме.
Восстановление текстового режима возможно с помощью команды DOS MODE (MODE
CO80) или  пользовательской  COM  программой,  в  которой  для  этой  цели
используется команда INT 10H.


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

     -  Память  объемом  16К  для  цветного  дисплея  позволяет    хранить
дополнительные страницы (экраны).  Возможны четыре страницы для экранов на
80 столбцов или восемь страниц для экранов на 40 столбцов.

     - Графический режим обеспечивает низкое разрешение (не поддерживается
в ROM), среднее разрешение (для цветной графики) и высокое разрешение (для
черно-белой графики).

     -  Точка  растра  (минимальный  элемент  графического    изображения)
представляется определенным  числом  бит  в  зависимости  от  графического
адаптера и разрешающей способности (низкой, средней или высокой).

     - Для графики среднего разрешения  на  цветном  графическом  адаптере
(CGA) можно выбрать  четыре  цвета,  один  из  которых  принадлежит  к  16
возможным цветам, а три других формируют цветовую палитру.


    ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
    _________________________________________________________________

    10.1. Сколько цветов возможно для фона и  для  текста  на  стандартном
цветном адаптере (CGA) в текстовом режиме?

    10.2. Напишите байты атрибуты в двоичном формате для а) сиреневого  на
ярко-голубом, б) коричневого на желтом, в)красного на сером с миганием.

    10.3. Объясните разницу в количестве  цветов,  возможных  при  низком,
среднем и высоком разрешении.

    10.4. Напишите  команды  для  вывода  пяти  символов  карточной  масти
"бубны" в текстовом режиме ярко-зеленым цветом на сиреневом фоне.

    10.5. Напишите команды для установки графического режима с разрешением
а) 320х200 в адаптере CGA и б) 640х200 в адаптере EGA.

    10.6. Напишите команды для установки синего фона в графическом режиме.

    10.7. Напишите команды для чтения точки на 12 строке и  13  столбце  в
графическом режиме.

    10.8. Модифицируйте программу на рис.10.1 для:  а) графического режима
на вашем мониторе; б) красного фона; в) строк с 10 по 30; г) столбцов с 20
по 300.



ГЛАВА 11                                           Команды обработки строк
__________________________________________________________________________

     Ц е л ь:   Объяснить  назначение   специальных   цепочечных   команд,
используемых для обработки символьных данных.


     ВВЕДЕНИЕ
     ________________________________________________________________

     Команды, показанные в предыдущих главах,  оперировали  одним  байтом,
или одним словом за одно  выполнение.  Часто,  однако,  бывает  необходимо
переслать или сравнить поля данных, которые превышают по длине одно слово.
Например,  необходимо  сравнить  описания  или  имена  для  того,    чтобы
отсортировать их в восходящей последовательности.  Элементы такого формата
известны как  строковые  данные  и  могут являться как символьными,  так и
числовыми.  Для обработки строковых данных  ассемблер  имеет  пять  команд
обработки строк:

MOVS -    переслать один байт или одно слово из  одной  области  памяти  в
          другую;
LODS -    загрузить из памяти один байт в регистр  AL  или  одно  слово  в
          регистр AX;
STOS -    записать содержимое регистра AL или AX в память;
CMPS -    сравнить содержимое двух областей памяти, размером  в  один байт
          или в одно слово;
SCAS -    сравнить содержимое регистра AL или AX с содержимым памяти.

     Префикс REP позволяет этим командам обрабатывать строки любой длины.


     СВОЙСТВА ОПЕРАЦИЙ НАД СТРОКАМИ
     ________________________________________________________________

     Цепочечная команда  может   быть   закодирована   для   повторяющейся
обpаботки  одного  байта  или  одного слова за одно выполнение.  Например,
можно выбрать "байтовую" команду для обработки строки  с  нечетным  числом
байт  или  "двухбайтовую"  команду для обработки четного числа байт.  Ниже
перечислены регистры,  участвующие в цепочечных командах (для однобайтовых
и  двухбайтовых  вариантов).  Предположим,  что  регистры DI и SI содержат
необходимые адреса:

               Команда   Операнды            Байт      Слово

               MOVS      DI,SI               MOVSB     MOVSW
               LODS      AL,SI или AX,SI     LODSB     LODSW
               STOS      DI,AL или DI,AX     STOSB     STOSW
               CMPS      SI,DI               CMPSB     CMPSW
               SCAS      DI,AL или DI,AX     SCASB     SCASW

     Например, можно кодировать операнды для команды MOVS, но опустить  их
для MOVSB и MOVSW. Эти команды предполагают, что pегистры DI и SI содержат
относительные адреса,  указывающие  на  необходимые  области  памяти  (для
загрузки можно использовать команду  LEA).  Регистр  SI  обычно  связан  с
регистром сегмента данных - DS:SI.  Регистр DI всегда связан  с  регистром
дополнительного сегмента - ES:DI.  Следовательно, команды MOVS, STOS, CMPS
и SCAS требуют инициализации регистра ES (обычно адресом в регистре DS).


     REP: ПРЕФИКС ПОВТОРЕНИЯ ЦЕПОЧЕЧНОЙ КОМАНДЫ
     ________________________________________________________________

     Несмотря на то, что цепочечные команды имеют отношение к одному байту
или одному слову, префикс REP обеспечивает  повторение  команды  несколько
раз.  Префикс  кодируется  непосредственно  перед  цепочечной    командой,
например, REP MOVSB.  Для использования префикса REP необходимо установить
начальное значение в регистре CX.  При  выполнении  цепочечной  команды  с
префиксом REP происходит уменьшение на 1 значения в регистре CX  до  нуля.
Таким образом, можно обрабатывать строки любой длины.
     Флаг направления определяет направление повторяющейся операции:

          - для направления слева направо необходимо с помощью команды CLD
     установить флаг DF в 0;
          - для направления справа налево необходимо с помощью команды STD
     установить флаг DF в 1.

     В следующем примере  выполняется  пересылка  20  байт  из  STRING1  в
STRING2. Предположим, что оба регистра DS и  ES  инициализированы  адресом
сегмента данных:

               STRING1   DB   20 DUP('*')
               STRING2   DB   20 DUP(' ')
                         ...
                         CLD                 ;Сброс флага DF
                         MOV  CX,20          ;Счетчик на 20 байт
                         LEA  DI,STRING2     ;Адрес области "куда"
                         LEA  SI,STRING1     ;Адрес области "откуда"
                         REP MOVSB           ;Переслать данные

     При  выполнении  команд  CMPS  и  SCAS  возможна  установка    флагов
состояния, так чтобы операция могла прекратиться сразу  после  обнаружения
необходимого условия.  Ниже приведены модификации префикса  REP  для  этих
целей:

REP -               повторять операцию, пока CX не равно 0;
REPZ или REPE -     повторять операцию, пока флаг ZF показывает "равно или
                    ноль". Прекратить операцию при флаге ZF,  указывающему
                    на не равно или не ноль или при CX равном 0;
REPNE или REPNZ -   повторять операцию,  пока флаг ZF показывает "не равно
                    или  не  ноль".  Прекратить  операцию  при  флаге  ZF,
                    указывающему на "равно или нуль" или при CX равным 0.

Для  процессоров  8086,  80286  и  80386,  обрабатывающих  слово  за  oдно
выполнение, использование цепочечных команд, где это возможно, приводит  к
повышению эффективности работы программы.


     MOVS: ПЕРЕСЫЛКА СТРОК
     ________________________________________________________________

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

Реклама