Вывод символов на экран в текстовом режиме 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вывод символов на экран в текстовом режиме



Установка/ проверка режима дисплея. 1. Для установки режима дисплея можно воспользоваться функцией BIOS 0 h (помещается в регистр AH) прерывания 10 h. При этом регистр AL должен содержать номер режима (см. табл. 2.6): если седьмой бит регистра AL равен 0, то экран очищается, в противном случае, содержимое экрана не меняется.

Таблица 2.6

Примеры некоторых режимов дисплея

Режим дисплея Разрешение X на Y Количество цветов Тип Поддерживаемые графические карты
0 40x25 2 текстовый CGA,PCjr,EGA,MCGA,VGA
1 40x25 16 текстовый CGA,PCjr,EGA,MCGA,VGA
2 80x25 2 текстовый CGA,PCjr,EGA,MCGA,VGA
3 80x25 16 текстовый CGA,PCjr,EGA,MCGA,VGA
4 320x200 4 графический CGA,PCjr,EGA,MCGA,VGA
5 320x200 4 (серый) графический CGA,PCjr,EGA,MCGA,VGA
6 640x200 2 графический CGA,PCjr,EGA,MCGA,VGA
7 80x25 2 текстовый MDA, EGA, VGA
8 160x200 16 графический PCjr,
9 320x200 16 графический PCjr,
10 640x200 4 графический PCjr,
13 320x200 16 графический EGA, VGA
14 640x200 16 графический EGA, VGA
15 640x350 2 графический EGA, VGA
16 640x350 16 графический EGA, VGA
17 640x480 2 графический MCGA, VGA
18 640x480 16 графический VGA
19 320x200 256 графический MCGA,VGA
20 640x400 16 графический Tecmar VGA/AD только

 

2. Для определения текущего режима дисплея используется функция 0 Fh прерывания 10 h (возможности BIOS). Прерывание возвращает номер режима в AL, номер текущей страницы экрана – в BH, число символов в строке – в AH.

Вывод на экран одного символа. Все процедуры для вывода символа на экран BIOS и DOS помещают символ в текущую позицию курсора.

1. Использование BIOS. Вывод символа с атрибутами осуществляется функцией 9 hAH) прерывания 10 h. При этом в регистр AL помещается код выводимого символа, в CX – число повторений символа, в BH – номер дисплейной страницы (обычно 0 – текущая страница), в BL – атрибуты символа. Значения цветов атрибута даны в табл. 2.7. Для вывода одного символа содержимое регистра CX должно быть равно 1.

Таблица 2.7.

Набор кодов цвета

Код Цепочка битов Цвет
0 0000 Чёрный
1 0001 Синий
2 0010 Зелёный
3 0011 Циан
4 0100 Красный
5 0101 Магента
6 0110 Коричневый
7 0111 Белый
8 1000 Серый
9 1001 Ярко-синий
10 1010 Ярко-зелёный
11 1011 Яркий циан
12 1100 Розовый
13 1101 Яркая магента
14 1110 Жёлтый
15 1111 Ярко-белый

В байте атрибутов за цвет символов отвечают первые 4 бита. Биты 0 – 2 отвечают за комбинацию цветов, бит 3 включает высокую интенсивность цвета выводимого символа. Последующие 3 бита позволяют задать цвет фона: биты 4 – 6 так же как и биты цвета символа, дают 8 возможных комбинаций цветов. Когда включается бит высокой интенсивности, то добавляются ещё 8 цветов. При обычных обстоятельствах бит 7 включает и выключает мигание символа; если бит 7 отвечает также за высокую интенсивность, то это позволяет получить 16 цветов и для фона.

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

2. Использование BIOS. Действие функции 0 AhAH) прерывания 10 h аналогично рассмотренной выше, за исключением того, что символ выводится на экран с текущим значением атрибута.

3. Использование ОС MS DOS. Функции 2 h и 6 h прерывания 21 h позволяют вывести один символ на экран без атрибутов (белые символы на чёрном фоне). Однако при выводе нескольких символов в цикле они автоматически сдвигают курсор на одну позицию вправо.

И для одной, и для другой функции справедливо: в AH помещается номер функции, в DL – код символа (кроме значения 0 FFh для функции 6 h). При этом функция 2 h распознаёт «Ctrl + Break» («Ctrl + C»), а 6 h – нет.

Эти функции интерпретируют некоторые управляющие символы.

Следует отметить, что если вывод на экран символов по их ASCII - коду трудностей не составляет, то для вывода чисел необходимо их преобразование. Проще всего вывести на экран числа в диапазоне от 0 до 9: надо просто к ASCII -коду символа прибавить значение 30 h и воспользоваться одной из указанных выше функций вывода. Для чисел большей размерности можно воспользоваться алгоритмом выделения отдельных цифр, к которым применить приведённые выше преобразования.

Вывод на экран строки символов .Использование ОС MS DOS. Функция 9 h прерывания 21 h выводит строку. Пара DS:DX должна указывать на первый символ строки. Строка должна заканчиваться символом '$' (символ '$' не входит в выводимую строку). Строка может быть любой длины. Функция не переводит автоматически курсор на начало следующей строки после завершения вывода. Чтобы это выполнялось, надо добавить в конец строки символы до символа '$': CR (0DH, «возврат каретки») и LF (0AH, «перевод строки»). Данная функция обрабатывает сочетание клавиш «Ctrl + Break» («Ctrl + C»). Также эта функция интерпретирует ряд управляющих символов.

Очистка экрана. Существует несколько способов очистки экрана.

1. Очистить экран целиком можно путём изменения видеорежима экрана с помощью функции 0 h прерывания 10 h. Данный метод удобно использовать в начале программы, когда требуется установка режима работы видеоадаптера.

2. Можно использовать функции сдвига экрана 6 h и 7 h прерывания 10 h для полной или частичной очистки экрана.

Функция 6 h (пересылается в AH) позволяет определить на экране окно, в котором возможно прокрутить определённое число строк вверх. При этом верхние строки исчезают, а снизу добавляются пустые строки.

Функция 7 h (пересылается в AH) позволяет определить на экране окно, в котором возможно прокрутить определённое число строк вниз. При этом нижние строки исчезают, а сверху добавляются пустые строки.

Число строк, на которое надо сдвинуть экран вверх или вниз, помещается в регистр AL. При AL = 0 экран очищается. Координаты левого верхнего угла окна помещаются в регистр CX (CH – строка, CL – столбец), координаты правого нижнего угла – в регистр DX (DH – строка, DL – столбец).

Управление курсором

Курсор служит двум целям: 1) является указателем места на экране для вывода информации, 2) обеспечивает видимую точку отсчёта на экране для пользователя программы. Если видеоадаптер поддерживает работу с несколькими дисплейными страницами, то каждая страница имеет свой собственный курсор. Информация о курсоре хранится в двухбайтовой переменной: младший байт содержит номер столбца (начиная с 0), старший байт – номер строки (начиная с 0). Абсолютные координаты курсора могут меняться в пределах 25 строк и 80 (иногда 40) столбцов. При этом координаты 0,0 определяют левый верхний угол экрана.

Установка/ чтение позиции курсора. 1. Функция 2 h (пересылается в AH) прерывания 10 h устанавливает курсор, относящийся к указанной дисплейной странице, в абсолютную позицию, которая будет являться начальной для последующего вывода информации. Страницы нумеруются, начиная с 0 (0 – текущая дисплейная страница). При этом в регистр DH помещается позиция курсора по строке, в регистр DL – позиция курсора по столбцу, а в BH – номер дисплейной страницы. После обработки прерывания курсор меняет своё положение на экране, если установка курсора относится к текущей активной дисплейной странице.

Если необходимо сдвинуть курсор относительно его текущей позиции, то для этих целей можно использовать ту же функцию.

2. Для получения текущей позиции курсора необходимо в регистр AH поместить функцию 3 h, в BH – номер дисплейной страницы и вызвать прерывание 10 h. После обработки прерывания в регистре DH будет находиться положение курсора по строке, в регистре DL – положение курсора по столбцу.

Включение/ отключение курсора. Ассемблерные программы оставляют курсор включённым до тех пор, пока не указано обратное. ОС не предоставляет специальных средств отключения курсора, но это легко сделать с помощью функции 2 h прерывания 10 h, поместив за пределы экрана, например, в первую позицию 26 – ой строки (координаты DL = 0, DH = 25). Соответственно, чтобы сделать его снова видимым, надо вернуть курсор в пределы экрана текущей активной страницы.

Вывод точечной графики

Существуют различные видеоадаптеры:

1) монохромный MDA – Monochrome Display Adapter;

2) цветной графический адаптер CGA – Color Graphics Adapter;

3) усовершенствованный графический адаптер EGA - Enhanced Graphics Adapter;

4) видеографическая матрица VGA - Video Graphics Array.

Они по-разному работают с цветом и графикой. Адаптеры EGA, VGA поддерживает работу в монохромном и CGA-совместимом режимах. Более того, эти режимы поддерживаются как на монохромных, так и на цветных мониторах. Обращения к функциям BIOS (прерывание 10 h) совместимы между различными типами IBM – адаптеров (и совместимых с IBM). Оригинальные программы, позволяющие использовать особенности каждого типа видеоадаптеров, связаны с применением других прерываний и регистров портов адаптеров, и являются достаточно сложными. Поэтому операции, связанные с выводом точечной графики, рассмотрим на примере функций прерывания 10 h.

Изображение на экране растрового дисплея формируется посредством группы горизонтальных строк, называемых растром. Каждая точка (пиксель) цветного экрана состоит из трёх цветных точек: красной, зелёной, синей (RGB – Red Green Blue).

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

Установка цвета фона. Функция 0 Bh (пересылается в AH) прерывания 10 h позволяет установить цвет фона. Для этого в регистр BH записывается 0, в регистр BL – номер цвета от 0 до 15 (см. табл. 2.7).

Вывод точки на экран. Функция 0 Ch (пересылается в AH) прерывания 10 h устанавливает на экране точку. В регистр CX необходимо поместить координату по строке (по горизонтали), в DX – координату по столбцу (по вертикали). Они отсчитываются от 0. Код цвета помещается в регистр AL. При отсутствии ошибок на экране формируется точка указанного цвета в указанной позиции.

Чтение точки с экрана. Функция 0 Dh (пересылается в AH) прерывания 10 h позволяет прочитать точку для определения её цвета. В регистр CX необходимо поместить координату по строке (по горизонтали), в DX – координату по столбцу (по вертикали). После обработки прерывания цвет указанной точки возвращается в регистре AL.

Управление таймером

Все IBM PC для согласования импульсов от микросхемы системных часов используют микросхему таймера 8253 (или 8254). Число циклов системных часов преобразуется в один импульс, а последовательность импульсов подсчитывается для определения времени или импульсы могут быть посланы на громкоговоритель компьютера для генерации звука определённой частоты. Данная микросхема имеет три независимых канала (0, 1, 2), каждый из которых может программироваться. Доступ к каналам осуществляется через порты 40 h, 41 h, 42 h соответственно.

Канал 0 используется системными часами времени суток. Он устанавливается BIOS при старте таким образом, что выдаёт импульсы приблизительно 18,2 раза в секунду. Каждый импульс инициирует прерывание таймера, что увеличивает показание счётчика. Число 0 соответствует полуночи 12:00; когда счётчик достигает значения, эквивалентного 24 часам, он сбрасывается в 0. Другое значение времени в течение суток определяется делением показателя счётчика на 18,2 для каждой секунды.

Канал 1 управляет обновлением памяти, поэтому его лучше не трогать.

Канал 2 связан с громкоговорителем компьютера, и он производит простые прямоугольные импульсы для генерации звука.



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 247; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.146.37.35 (0.02 с.)