INT 10H (INT 10H)

Перейти к навигации Перейти к поиску

INT 10h, INT 10H или INT 16 — инструкция на языке ассемблера для процессора архитектуры x86, генерирующая программное прерывание BIOS 10hex, 17-й вектор прерывания в архитектуре x86. BIOS, как правило, связывает с этим вектором обработчик прерывания в реальном режиме, предоставляющий видеосервис. Он включает установку видеорежима видеоадаптера, вывод символов и строк, графические примитивы (чтение и запись пикселей в графическом режиме).

Вызов INT 10h довольно медленный, поэтому многие программы получают доступ к видеоадаптеру напрямую, без BIOS. Установка видеорежима, производимая как правило единожды, может быть выполнена при помощи BIOS. Однако, отрисовка должна выполняться быстро, поэтому для этого лучше подходит прямой доступ к видеопамяти, чем вызов прерываний BIOS для каждого пикселя.

Список функций видеосервиса

[править | править код]
Функция Код функции Параметры Возвращаемое значение
Установка видеорежима AH=00h AL = номер режима AL = флаг видеорежима / байт режима CRT контроллера
Установить форму курсора текстового режима AH=01h CH = начальная строка, CL = конечная строка

Обычно знакоместо имеет 8 строк, 0-7. Тогда CX=0607h — обычный курсор-подчеркивание, CX=0007h — всё знакоместо. Если задан 5-й бит CH, то это обычно означает «Скрыть курсор». Поэтому CX=2607h — невидимый курсор.

Некоторые видеокарты имеют 16 строк на знакоместо, 00h-0Fh.

Некоторые видеокарты не используют 5-й бит CH. В таком случае, для скрытия следует задать CH > CL (например CX=0706h)

Установить позицию курсора AH=02h BH = страница, DH = строка, DL = столбец
Получить позицию и форму курсора AH=03h BH = страница AX = 0, CH = начальная строка формы курсора, CL = конечная строка формы курсора, DH = строка, DL = столбец
Получить позицию светового пера (Не работает на VGA системах) AH=04h AH = Статус (0=не активно, 1=активно), BX = пиксель X, CH = пиксель Y, CX = номер строки пикселя для режимов 0Fh-10h, DH = символ Y, DL = символ X
Задать активную страницу AH=05h AL = номер страницы
Прокрутка вверх AH=06h AL = число строк для прокрутки (0 = очистка, CH, CL, DH, DL используются), BH = атрибут цвета.

CH = номер верхней строки, CL = номер левого столбца, DH = номер нижней строки, DL = номер правого столбца

Прокрутка вниз AH=07h см. выше
Считать символ и атрибуты на позиции курсора AH=08h BH = страница AH = цвет, AL = символ
Записать символ и атрибуты на позиции курсора AH=09h AL = символ, BH = страница, BL = цвет, CX = сколько раз записать символ
Записать символ на позиции курсора AH=0Ah AL = символ, BH = страница, CX = сколько раз записать символ
Задать цвет фона/границы AH=0Bh, BH = 00h BL = Цвет фона/границы (граница только в текстовых режимах)
Задать палитру AH=0Bh, BH = 01h BL = ID палитры (имело смысл в CGA адаптерах, но более новые видеокарты поддерживают это во многих или всех графических режимах)
Задать пиксель AH=0Ch AL = цвет, BH = страница, CX = x, DX = y
Прочитать цвет пикселя AH=0Dh BH = страница, CX = x, DX = y AL = цвет
Консольный вывод символа AH=0Eh AL = символ, BH = страница, BL = цвет (только в графическом режиме)
Получить текущий видеорежим AH=0Fh AL = видеорежим, AH = число знаковых столбцов, BH = текущая страница
Вывести строку (EGA и выше) AH=13h AL = режим вывода, BH = страница, BL = цвет, CX = длина строки, DH = строка (на экране), DL = столбец, ES:BP = адрес