УПРАВЛЕНИЕ ВЫВОДОМ ТЕКСТОВОЙ ИНФОРМАЦИИ НА ЭКРАН
1. Цель работы
Целью настоящей работы является изучение возможностей базовой системы ввода-вывода при выводе текстовой информации на экран монитора.
2. Теоретическая часть
Видеосистема компьютера включает в себя ряд аппаратных и программных средств, позволяющих получать на экране монитора текстовые и графические изображения.
К аппаратным средствам можно отнести сам видеомонитор – цветную электронно-лучевую трубку со схемами питания и управления, а также видеоконтроллер или видеоадаптер – электронную плату, обеспечивающую вывод на экран, а также программное управление видеосистемой.
В текстовом режиме изображение обычно состоит из 25 строк по 80 символов в строке, хотя имеется возможность увеличивать число строк до 40 за счет уменьшения высоты отображаемых символов.
Система выделяет участок памяти для Области видеоадаптера или буфера. В текстовом режиме область видеоадаптера занимает 4 Кбайт, 2 Кбайта из которых предназначены для хранения символов, и еще 2 Кбайта – для атрибутов каждого символа, например, инвертирования, мигания, повышенной яркости или подчеркивания. Область видеоадаптера разбита на «страницы» экрана, пронумерованные от 0 до 7. Поскольку таблицы, описывающие форму символов, загружаются в память программно, имеется возможность работать с символами любой конфигурации. Обычно используется стандартная кодовая таблица символов, содержащая знаки английского и русского алфавитов, знаки препинания, специальные машинные знаки, символы псевдографики и некоторые математические символы.
Программные средства управления экраном включают в себя видеодрайвер BIOS, к которому можно обратиться из прикладной программы с помощью прерывания INT 10h, и который обеспечивает нижний уровень управления (вывод символов, работа с курсором, переключение режимов видеоадаптера и т.д.), а также функции DOS, активизируемые с помощью прерывания INT 21h и предоставляющие более высокий уровень сервиса в текстовом режиме.
Для установки графического режима или возврата в текстовой режим используется прерывание BIOS INT 10h, как это показано в двух следующих примерах:
MOV AH,00 ;Режим MOV AH,00 ;Режим
MOV AL,03 ;Цвет+текст MOV AL,04 ;Графика среднего
INT 10h INT 10h ; разрешения
2.1. Текстовой (алфавитно-цифровой) режим
Текстовой режим предназначен для обычных вычислений с выводом букв и цифр на экран. Этот режим одинаков для черно-белых и цветных мониторов, за исключением того, что цветные мониторы не поддерживают атрибут подчеркивания. Текстовой режим обеспечивает работу с полным набором ASCII кодов (256 символов) для всех мониторов. Каждый символ на экране может отображаться в одном из 16 цветов на одном из восьми цветов фона.
Бордюр экрана может иметь также один из 16 цветов.
Тремя основными цветами являются красный, зеленый и синий. Их можно комбинировать друг с другом для получения восьми цветов, включая черный и белый. Используя два уровня яркости для каждого цвета, получим всего 16 цветов:
I R G B I R G B
Черный 0 0 0 0 Серый 1 0 0 0
Синий 0 0 0 1 Ярко-синий 1 0 0 1
Зеленый 0 0 1 0 Ярко-зеленый 1 0 1 0
Голубой 0 0 1 1 Ярко-голубой 1 0 1 1
Красный 0 1 0 0 Ярко-красный 1 1 0 0
Сиреневый 0 1 0 1 Ярко-сиреневый 1 1 0 1
Коричневый 0 1 1 0 Желтый 1 1 1 0
Белый 0 1 1 1 Ярко-белый 1 1 1 1
Таким образом, любые символы могут быть отображены на экране в одном из 16 цветов. Фон любого символа может иметь один из первых восьми цветов. Если фон и текст имеют один и тот же цвет, то текст получается невидимым. Используя байт-атрибут, можно получить также мигающие символы. В приведенной ниже таблице атрибут BL означает мигание, RGB – соответственно красный, зеленый и синий цвета, I - выделение яркостью:
фон текст
Атрибут: BL R G B I R G B
Номера битов: 7 6 5 4 3 2 1 0
Мигание и выделение яркостью относятся к тексту. Ниже приведены некоторые типичные значения атрибутов:
Текст по фону Бит: 7 6 5 4 3 2 1 0
BL R G B I R G B Шест.
Черный по черному 0 0 0 0 0 0 0 0 00
Синий по черному 0 0 0 0 0 0 0 1 01
Красный по синему 0 0 0 1 0 1 0 0 14
Голубой по зеленому 0 0 1 0 0 0 1 1 23
Светло-сиреневый по белому 0 1 1 1 1 1 0 1 7D
Серый по зеленому, мигание 1 0 1 0 1 0 0 0 AB
Байт-атрибут используется аналогично показанному для чернобелого монитора. Тип монитора можно определить из программы с помощью команды INT 11h. Для черно-белого монитора код 07 устанавливает нормальный атрибут. Для цветных мониторов можно использовать любую из цветовых комбинаций. Цвет на экране, сохраняется до тех пор, пока другая команда не изменит его. Для установки цвета можно использовать в команде INT 10h функции АН = 06, АН = 07 и АН = 09. Например, для вывода пяти мигающих звездочек светло-зеленым цветом на сиреневом фоне возможна следующая программа:
MOV AH,09 ;Функция вывода на экран
MOV AL,'*' ;Выводимый символ
MOV ВН,00 ;Страница 0
MOV BL,0DAh ;Атрибут цвета
MOV СХ,05 ;Число повторений
INT 10h ;вызвать BIOS
2.2. Вывод на экран средствами BIOS
Средства вывода на экран реализуются драйвером BIOS, программное обращение к которому осуществляется с помощью прерывания 10h. При работе в текстовом режиме обычно используются следующие функции драйвера:
02h - установить позицию курсора;
03h - прочитать позицию курсора;
05h - установить видеостраницу;
06h - прокрутить вверх экран;
07h - прокрутить вниз экран;
08h - прочитать символ и атрибут в позиции курсора;
09h - вывести символ и атрибут в позицию курсора;
0Ah - вывести символ в позицию курсора;
0Eh - вывести символ в режиме телетайпа;
10h, подфункция 10h - переключить бит мерцание/яркость;
13h - вывести строку в режиме телетайпа.
2.2.1. Установка позиции курсора
AH = 02. Эта функция устанавливает курсор в любую позицию на экране в соответствии с координатами строки и столбца. Номер страницы обычно равен 0, но может иметь значение от 0 до 3 при 80 столбцах на экране:
MOV AH,02 ; Установить положение курсора
MOV BH,00 ; Страница 0
MOV DH, строка ; Номер строки
MOV DL, столбец ; Номер столбца
INT 10h ; Вызвать BIOS
2.2.2. Чтение текущей позиции курсора
AH = 03. Прикладная программа может определить положение курсора на экране (строку и столбец) следующим образом:
MOV AH,03 ; Определить положение курсора
MOV BH,00 ; Страница 0
INT 10h ; Вызвать BIOS
После возврата из прерывания регистр DH будет содержать номер стоки, а регистр DL - номер столбца.
2.2.3. Выбор активной страницы
AH = 05. В текстовом режиме с форматом экрана 80х25 устанавливается до 4 страниц (от 0 до 3), а для формата 40х25 – до 8 страниц (от 0 до 7):
MOV AH,05h ; Установить активную страницу
MOV AL,страница ; Номер страницы
INT 10h ; Вызвать BIOS
2.3.4. Прокрутка экрана вверх
AH = 06. С помощью этой функции в заданном месте экрана создаются цветные прямоугольные окна заданного размера. Если в созданные ранее окна выведен какой-либо текст, то с помощью этой функции его можно прокручивать вверх. При этом верхние строки уходят с экрана, а чистые строки вводятся снизу. Для прокрутки любого количества строк необходимо установить соответствующее значение в регистре AL. Регистр BH содержит атрибут для символов.
Значения в регистрах CX и DX определяют координаты левого верхнего и правого нижнего углов сдвигаемого окна соответственно.
Следующие команды выполняют прокрутку всего экрана на одну строку:
MOV AH,06h ; Прокрутить экран вверх
MOV AL,01 ; На одну строку
MOV BH,07 ; Атрибут нормальный: черно-белый
MOV CH,00 ; Номер строки левого верхнего угла
MOV CL,00 ; Номер столбца левого верхнего угла
MOV DH,18h ; Номер строки нижнего правого угла
MOV DL,4Fh ; Номер столбца нижнего правого угла
INT 10h ; Вызов BIOS
2.2.5. Прокрутка экрана вниз
AH = 07. Для текстового режима прокрутка экрана вниз означает удаление нижних строк и вставку чистых строк сверху. Регистр AH должен содержать 07, значения остальных регистров аналогичны функции 06 для прокрутки вверх.
2.2.6. Чтение символа и атрибута в текущей позиции курсора
Для чтения символа и байта-атрибута из видеопамяти используются следующие команды:
MOV AH,08 ; Запрос на чтение символа и атрибута
MOV BH,00 ; Страница 0
INT 10h ; Вызвать BIOS
Данная функция возвращает в регистре AL значение символа, а в регистре AH – его атрибут.
2.2.7. Вывод символа и атрибута в текущую позицию курсора
AH = 09h. Для вывода на экран символов с их атрибутами можно воспользоваться следующими командами:
MOV AH,09h ; Функция вывода
MOV AL,символ ; Выводимый символ
MOV BH,страница ; Номер страницы
MOV BL,атрибут ; Атрибут
MOV CX,повторение ; Число повторений
INT 10h ; Вызвать BIOS
В регистр AL должен быть помещен выводимый символ. Значение в регистре CX определяет число повторений символа на экране. Вывод на экран последовательности различных символов требует организации цикла. Кроме того, при выводе каждого символа необходимо дополнительно передвигать курсор в следующий столбец.
2.2.8. Вывод символа в текущую позицию курсора
AH = 0Ah. Эта функция аналогична функции 09, с той лишь разницей, что функция 0A не устанавливает атрибут.
MOV AH,0Ah ; Функция вывода
MOV AL,символ ; Выводимый символ
MOV BH,страница ; Номер страницы
MOV CX,повторение ; Число повторений
INT 10h ; Вызвать BIOS
2.2.9. Вывод в режиме телетайпа
AH = 0E. Для выполнения этой функции необходимо установить в регистре AH шестнадцатиричное значение 0E, в регистр AL поместить выводимый символ и номер страницы – в регистр BH. Данная функция автоматически передвигает курсор, переводит символы на следующую строку, выполняет прокрутку экрана и сохраняет текущие атрибуты.
2.2.10. Выделение мерцанием и яркостью
AH = 10h. Подфункция 03h этой функции, в отличии от описанных выше функций вывода символов на экран, воздействует сразу на весь экран, влияя на отображение тех символов, у которых установлен старший бит атрибута фона. Функция позволяет либо приписать этот бит яркости фона, давая тем самым возможность выводить на экран 16 цветов фона, либо назначить его атрибуту мерцания символа. В последнем случае цвет фона может принимать только 8 значений.
MOV AH,10h ; Функция
MOV AL,03h ; Подфункция мерцание-яркость
MOV BL,0 ; 0 - яркость, 1 - мерцание
INT 10h ; Вызов BIOS
2.2.11. Вывод символьной строки
AH = 13h. Данная функция позволяет выводить на экран символьные строки с установкой атрибутов и перемещением курсора:
MOV AH,13h ; Функция вывода
MOV AL,сервис ; 0, 1, 2 или 3
MOV BH,страница ;
LEA BP,адрес ; Адрес строки в ES:BP
MOV CX,длина ; Длина строки
MOV DX,экран ; Координаты на экране
INT 10h ; Вызов BIOS
Значения в регистре AL указывают:
0 - использовать атрибут и не перемещать курсор
1 - использовать атрибут и переместить курсор
2 - вывести символ, затем атрибут и не перемещать курсор
3 - вывести символ, затем атрибут и переместить курсор
2.2.12. Вывод символьной строки средствами DOS
Вывод текста на экран средствами DOS требует определения текстового сообщения в области данных, установки в регистре АН значения 09 (вызов функции DOS) и указания команды DOS INT 21Н. В процессе выполнения операции конец сообщения определяется по ограничителю ($), как показано ниже:
NAMSTUD DB ’Имя студента’,’$’
.
.
MOV АН,09 ;3апрос вывода на экран
LEA DX,NAMSTUD ;3агрузка адреса сообщения
INT 21H ;Вызов DOS
Знак ограничителя '$' можно кодировать непосредственно после символьной строки, как показано в примере, внутри строки 'Имя покупателя?$' или в следующем операторе DB '$'. Используя данную операцию, нельзя вывести на экран символ доллара "$", Кроме того, если знак доллара будет отсутствовать в конце строки, то на экран будут выводиться все последующие символы, пока знак "$" не встретится в памяти.
Команда LEA загружает адрес области NAMSTUD в регистр DX для передачи в DOS адреса выводимой информации. Адрес поля NAMSTUD, загружаемый в DX по команде LEA, является относительным, поэтому для вычисления абсолютного адреса данных DOS складывает значения регистров DS и DX (DS:DX).
2.2.13. Вывод символов таблицы ASCII
Большая часть из 256 символов ASCII имеют символьное представление и могут быть выведены на экран. Некоторые значения, например, 00H и FFH, не соответствуют никаким выводимым символам и представляются на экране как пробел, хотя пробел имеет в ASCII особый код – 20Н. Ниже приведена программа, которая выводит на экран все символы ASCII-таблицы.
TITLE A08DISAS (СОМ) Вывод набора символов ASCII
.MODEL SMALL
.CODE
ORG 100H
BEGIN: JMP SHORT A10MAIN
ASCHAR DB 00, '$'
; Главная процедура:
.286
A10MAIN PROC NEAR
CALL B10SCREEN ;Очистка экрана
CALL C10CURSOR ;Установка курсора
CALL D10DISPLY ;Вывод символов
MOV AX,4C00H ;Завершение работы
INT 21H
A10MAIN ENDP
; Очистка экрана и установка атрибутов:
BIOSCREEN PROC NEAR
PUSH A ;Сохранение значений регистров
MOV AX,0600H ;Прокрутка целого экрана
MOV BH,07 ;Атрибуты: белый шрифт на черном фоне
MOV CX,0000 ;Верхний левый угол
MOV DX,184FH ;Нижний правый угол
INT 10Н ;Вызов обработчика прерывания
POP A ;Восстановление значений регистров
RET ;Возврат к точке вызова
BIOSCREEN ENDP
; Установка курсора в ячейку 08,00:
C10CURSOR PROC NEAR
PUSHA ;Сохранение значений регистров
MOV АН,02Н ;Запрос на установку курсора
MOV ВН,00 ;Страница 0
MOV DX,0800H ;Строка 8, столбец 0
INT 10Н ;Вызов обработчика прерывания
POPA ;Восстановление значений регистров
RET ;Возврат к точке вызова
C10CURSOR ENDP
; Вывод символов ASCII 00Н - FFH, кроме символов от 08Н до 0DH:
D10DISPLY PROC
PUSHA ;Сохранение значений регистров
MOV СХ,256 ;Подготовить 256 повторений
LEA DX,ASCHAR ;Указать адрес ASCHAR
D20: CMP ASCHAR,08Н ;Код символа меньше 08Н?
JB D30 ;Да, вывести
CMP ASCHAR, 0DH ;Код символа меньше или равен 0DH?
JBE D40 ;Да, пропустить
D30: MOV АН,09Н ;Вывод ASCII-символа
INT 21Н
D40: INC ASCHAR ;Перейти к следующему символу
LOOP D20 ;Уменьшить значение в СХ,
;повторить, если не ноль
POPA ;Восстановление значений регистров
RET ;Возврат к точке вызова
D10DISPLY ENDP
END BEGIN
3. Порядок выполнения работы
3.1. С помощью отладчика DEBUG создать и выполнить ассемблерную программу, которая устанавливает сиреневый фон всего экрана и задает в центре экрана красное окно меньшего размера.
3.2. Доработайте программу по пункту 3.1, чтобы вывести в центр окна свою фамилию и инициалы.
3.3. Оттранслируйте, скомпонуйте и выполните программу по пункту 3.2.
3.4. Оттранслировать программу, приведенную в разделе 2.2.13, скомпоновать ее и преобразовать в файл типа .СОМ для выполнения.
4. Требования к отчету
Отчет по лабораторной работе должен содержать:
а) титульный лист;
б) условие задания;
в) текст программ на языке Ассемблера;
г) ответы на контрольные вопросы.
5. Контрольные вопросы
1. Сколько цветов можно обеспечить для фона и для текста на стандартном цветном графическом адаптере (CGA) в текстовом режиме?
2. Напишите байты-атрибуты в двоичном формате для: а) ярко-голубого на сиреневом; б) желтого на коричневом; в) серого на красном с миганием.
3. Напишите команды для вывода пяти символов карточной масти "бубны" в текстовом режиме ярко-зеленым цветом на сиреневом фоне.
4. Определите данные и напишите команды, необходимые для вывода на экран функцией 9Н прерывания INT 21H сообщения “What is the current date (mm/dd/yy)?. После вывода на экран сообщения должен подаваться звуковой сигнал.
ЛАБОРАТОРНАЯ РАБОТА № 3
|