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 была показана программа для пересылки девятибайтового