Рекламный блок
Тема № 5 Использование функций BIOS для работы с видеоадаптерами
Страница 3
5.4 Встроенный ассемблер TurboPascal
Другим способом вызова прерываний является использование встроенного ассемблера интегрированной среды разработчика Borland (Turbo) Pascal.
Для включения команд ассемблера в мнемонической форме в текст Pascal-программ есть удобное средство:
Asm
оператор 1 {здесь допустимо использовать практически все
* команды Turbo Assembler и Macro Assembler}
*
*
оператор n
end;
Использование мнемоник для математического сопроцессора возможно только при включенной опции {$N+}, если сопроцессора нет {$N+,E+}. При использовании команд процессора Intel 80x286 должна быть включена опция {$G+}. Комментарии между asm и end записывается в нотации Pascal, а не в нотации Assembler.
Зарезервированными словами между asm и end являются следующие: AH, AL, AND, AX, BH, BL, BP, BX, BYTE, CH, CL, CS, CX, DH, DI, DL, DS, DWORD, DX, ES, FAR, HIGH, LOW, MOD, NEAR, NOT, OFFSET, OR, PTR, QWORD, SEG, SHL, SHR, SI, SP, SS, ST, TBYTE, TYPE, WORD, XOR.
Если в программе используется идентификатор с одним из перечисленных выше имён, и он должен использоваться между asm и end, то для придания зарезервированному имени другого смысла необходимо перед ним поставить знак "&" (амперсант).
Var
Offset : Integer;
Asm
Mov CH, & Offset
end;
Метки между asm и end должны начинаться с символа @. Это локальные метки и область их действия только между asm и end.
На использование регистров между asm и end накладываются общие для Pascal ограничения. Регистры DS, SP, SS, BP должны сохраняться, остальные регистры можно модифицировать. Для написания ассемблерной процедуры или функции полностью внутри интегрированной среды необходимо у описателя процедуры или функции поставить зарезервированное слово Assembler.
Function Primer: Byte: Assembler;
Asm
*
*
end;
5.4.1 Использование прерывания 10
Функция 00H устанавливает видеорежим. Работает на следующих видеоадаптерах: MDA, CGA, PCjr, EGA, MCGA, VGA. Выбирает текущий видеорежим и активный видеоконтроллер. Для вызова нужно установить значение регистра и затем использовать процедуру вызова прерывания
Intr ($10,R), где R - регистр.
Вызов:
AH := 00H
AL := <режим>
Возвращаемое значение - 0.
Режим 02H = 80 символов x 25 строк, 16 цветов | текстовый режим |
Режим 4H - графический: 320x200x4. Режим 6H: 640x200x2 Режим 0FH: 640x350x21 Режим 10H: 640x350x16 Режим 12H: 640x480x16 Режим 13H: 320x200x256 | графические |
Функция 01H устанавливает размер курсора. Выбирает начальные и конечные строки развёртки для аппаратного мигающего курсора в текстовом режиме.
Вызов:
AH = 01H
CH биты 0-4 - номер начальной строки развёртки для курсора
CL биты 0-4 - номер конечной строки развёртки для курсора
Возвращаемое значение отсутствует.
Функция 02H - перемещение курсора. Позиционирует курсор, использует тестовые координаты.
AH = 02H
BH = страница
DH = строка (у - координата)
DL = столбец (х - координата)
Возвращаемое значение отсутствует.
Функция 03H - получить текущую позицию курсора.
Вызов:
AH = 03H
BH = страница
Возвращаемое значение:
DH = строка (x - координата)
DL = столбец (y - координата)
CH = начало строки развёртки курсора
CL = конец строки развёртки курсора
Функция 05H - установить страницу дисплея.
AH = 05H
AL = страница {может быть от 0 до 7}
Функция 0AH - вывести символ на экран в текущую позицию курсора. Символ наследует атрибуты того символа, который ранее находился в этой позиции.
Вызов:
AH = 0AH
AL = символ
BH = страница
BL = цвет (PCjr)
CX = число символов
Возвращаемое значение отсутствует.
Функция 0CH - вывести графически пиксел. Рисует на дисплее точку в указанных графических координатах.
Вызов:
AH = 0CH
AL = значение пиксела
BH = страница
CX = столбец (x - координата)
DX = строка (y - координата)
Работает только на графических картах.
Возвращаемое значение отсутствует.
Функция 0DH - прочитать графический пиксел.
Вызов:
AH = 0DH
BH = страница
CX = столбец (x - координата)
DX = строка (y - координата)
Возвращаемое значение:
AL = цвет этого пиксела
Функция 0FH - получить текущий текстовый режим. Возвращает установленный в данный момент режим активного видеоадаптера.
Вызов:
AH = 0FH
Возвращаемые значения:
AH = количество столбцов символов на экране
AL = видеорежим
BH = страница
Функция 10H - подфункция 01H - установить цвет границы экрана.
Вызов:
AH = 10H
AL = 01H
BH = значение цвета
Работает на EGA и VGA. Возвращаемое значение отсутствует.