Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Программирование видеоадаптеров.

© Александр Фролов, Григорий Фролов
Том 21, М.: Диалог-МИФИ, 1993.

[Назад] [Содеожание] [Дальше]

Запись символа с атрибутами в текущей позиции курсора - функция 09h

Функция позволяет записать один или несколько одинаковых символов в текущей позиции курсора. Запись может происходить как в активную, так и в неактивные страницы видеопамяти. После выполнения операции записи положение курсора не изменяется. Управляющие символы, такие как возврат каретки и перевод строки, не действуют и записываются в видеопамять, как обычные символы. Данная функция работает как в текстовых, так и в графических режимах.

На входе:

AH

09h

 

AL

ASCII-код записываемого символа

 

BH

Номер страницы видеопамяти или цвет пикселов фона (для графического режима номер 13h)

 

BL

Атрибут символов (для текстового режима) или цвет пикселов символа (для графического режима);

 

CX

Количество записываемых символов

На выходе:

 

Не используются

Если бит D7 регистра BL содержит единицу, то записываемый символ накладывается на текущее содержимое экрана по логике булевой операции ИСКЛЮЧАЮЩЕЕ ИЛИ. Естественно, за исключением режима номер 13h, в котором все биты регистра BL используются для задания цвета пикселов символа.

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

Листинг 5.1. Файл BIOSFUN.ASM


TITLE   BIOS_FUNCTION

.MODEL  small

DOSSEG

.STACK  100h

.DATA
	message	DB	"INT 10h", 0
	video_page	DB	2

.CODE
.STARTUP

	; Выбираем режим 3 видеоадаптера
	xor	ah,ah
	mov	al,3
	int	10h

	; Изменяем форму курсора
	mov	ah,1
	mov	ch,0	; начало курсора - линия 0
	mov	cl,7	; конец курсора - линия 7
	int	10h

	; Выбираем активную страницу видеопамяти
	mov	ah,5
	mov	al,video_page	; выбираем страницу video_page
	int	10h

	mov	ah,6
	mov	al,0
	mov	bh,0ffh
	mov	cl,10
	mov	ch,5
	mov	dl,30
	mov	dh,15
	int	10h

	; Устанавливаем координаты курсора
	mov	ah,2
	mov	bh,video_page	; выбираем страницу video_page
	mov	dh,12		; строка 12
	mov	dl,20		; колонка 20
	int	10h

	; Отображаем на активной странице экрана строку message
	mov	si,OFFSET message
	call	WriteString

.EXIT	0


; Процедура WriteString выводит на экран строку, имеющую
; смещение si в сегменте ds
WriteString	PROC

	; Определяем текущую активную страницу экрана
	mov	ah,0Fh
	int	10h	; номер активной страницы в регистре bh

	; Получаем в dx координаты курсора
	mov	ah,3
	int	10h

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

next_char:

	mov	ah,9
	lodsb
	cmp	al,0	; находим конец строки

	; Если достигнут конец строки оканчиваем процедуру
	je	exit_proc

	; Для отображаемых символов используем атрибут 7
	; символы строки выводятся без повтора
	mov	bl,7	;
	mov	cx,1	;
	int	10h

	; Перемещаем курсор в следующую позицию строки
	mov	ah,2
	inc	dl
	int	10h

	jmp	next_char

exit_proc:

	ret

WriteString	ENDP

END
[Назад] [Содеожание] [Дальше]