Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Средства BIOS

Функции DOS вывода на экран позволяют перенаправлять вывод в файл, но не позволяют вывести текст в любую позицию экрана и не позволяют изменить цвет текста. DOS предполагает, что для более тонкой работы с экраном программы должны использоваться видеофункции BIOS. BIOS (базовая система ввода-вывода) — это набор программ, расположенных в постоянной памяти компьютера, которые выполняют его загрузку сразу после включения и обеспечивают доступ к некоторым устройствам, в частности к видеоадаптеру. Все функции видеосервиса BIOS вызываются через прерывание 10h. Рассмотрим функции, которые могут быть полезны для вывода текстов на экран.

Выбор видеорежима

BIOS предоставляет возможность переключения экрана в различные текстовые и графические режимы. Режимы отличаются друг от друга разрешением (для графических) и количеством строк и столбцов (для текстовых), а также количеством возможных цветов.

INT 10h, АН = 00 — Установить видеорежим

Ввод: AL = номер режима в младших 7 битах
Вывод: Обычно никакого, но некоторые BIOS (Phoenix и AMI) помещают в AL 30h для текстовых режимов и 20h для графических

Вызов этой функции приводит к тому, что экран переводится в выбранный режим. Если старший бит AL не установлен в 1, экран очищается. Номера текстовых режимов — 0, 1, 2, 3 и 7. 0 и 1 — 16-цветные режимы 40x25 (с 25 строками по 40 символов в строке), 2 и 3 — 16-цветные режимы 80x25, 7 — монохромный режим 80x25. Мы не будем пока рассматривать графические режимы, хотя функции вывода текста на экран DOS и BIOS могут работать и в них. Существует еще много текстовых режимов с более высоким разрешением (80x43, 80x60, 132x50 и т.д.), но их номера для вызова через эту функцию различны для разных видеоадаптеров (например, режим 61h — 132x50 для Cirrus 5320 и 132x29 для Genoa 6400). Однако, если видеоадаптер поддерживает стандарт VESA BIOS Extention, в режимы с высоким разрешением можно переключаться, используя функцию 4Fh.

INT 10h, АН = 4Fh, AL = 02 — Установить SuperVGA-видеорежим

Ввод: ВХ = номер режима в младших 13 битах
Вывод: AL = 4Fh, если эта функция поддерживается АН = 0, если переключение произошло успешно АН = 1, если произошла ошибка

Если бит 15 регистра ВХ установлен в 1, видеопамять не очищается. Текстовые режимы, которые можно вызвать с использованием этой функции: 80x60 (режим 108h), 132x25 (109h), 132x43 (10Ah), 132x50 (10Bh), 132x60 (10Ch).

Видеорежим, используемый в DOS по умолчанию — текстовый режим 3.

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

 

INT 10h, АН = 02 — Установить положение курсора

Ввод: АН = 02 ВН = номер страницы DH = строка DL = столбец

С помощью этой функции можно установить курсор в любую позицию экрана, и дальнейший вывод текста будет происходить из этой позиции. Отсчет номера строки и столбца ведется от верхнего левого угла экрана (символ в левой верхней позиции имеет координаты 0, 0). Номера страниц 0 – 3 (для режимов 2 и 3)и 0 – 7 (для режимов 1 и 2) соответствуют области памяти, содержимое которой в данный момент отображается на экране. Можно вывести текст в неактивную в настоящий момент страницу, а затем переключиться на нее, чтобы изображение изменилось мгновенно.

INТ 10h, АН = 03 — Считать положение и размер курсора

Ввод: АН = 03 ВН = номер страницы
Вывод: DH, DL = строка и столбец текущей позиции курсора СН, CL = первая и последняя строки курсора

Возвращает текущее состояние курсора на выбранной странице (каждая страница использует собственный независимый курсор).

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

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

Атрибут символа:

Бит 7: символ мигает (по умолчанию) или фон яркого цвета (если его действие было переопределено видеофункцией 10h).

Биты 6 – 4: цвет фона.

Бит 3: символ яркого цвета (по умолчанию) или фон мигает (если его действие было переопределено видеофункцией 11h).

Биты 2 – 0: цвет символа.

Цвета кодируются в битах, как показано в таблице 18.

Таблица 18. Атрибуты символов

  Обычный цвет Яркий цвет
000b черный темно-серый
001b синий светло-синий
010b зеленый светло-зеленый
011b голубой светло-голубой
100b красный светло-красный
101b пурпурный светло-пурпурный
110b коричневый желтый
111b светло-серый белый

INT 10h, АН = 08 — Считать символ и атрибут символа в текущей позиции курсора

Ввод: АН = 08 ВН = номер страницы
Вывод: АН = атрибут символа AL = ASCII-код символа

INT 10h, АН = 09 — Вывести символ с заданным атрибутом на экран

Ввод: АН = 09 ВН = номер страницы AL = ASCII-код символа BL = атрибут символа СХ = число повторений символа

С помощью этой функции можно вывести на экран любой символ, включая даже символы CR и LF, которые обычно интерпретируются как конец строки. В графических режимах СХ не должен превышать число позиций, оставшееся до правого края экрана.

INT 10h, АН = 0Ah — Вывести символ с текущим атрибутом на экран

Ввод: АН = 0Ah ВН = номер страницы AL = ASCII-код символа СХ = число повторений символа

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

INT 10h, АН = 0Eh — Вывести символ в режиме телетайпа

Ввод: АН = 0Eh ВН = номер страницы AL = ASCII-код символа

Символы CR (0Dh), LF (0Ah), BEL (7) интерпретируются как управляющие символы. Если текст при записи выходит за пределы нижней строки, экран прокручивается вверх. В качестве атрибута используется атрибут символа, находившегося в этой позиции.

INT 10h, AH = 13h — Вывести строку символов с заданными атрибутами

Ввод: АН = 13h AL = режим вывода: бит 0 — переместить курсор в конец строки после вывода бит 1 — строка содержит не только символы, но также и атрибуты, так что каждый символ описывается двумя байтами: ASCII-код и атрибут биты 2 – 7 зарезервированы СХ = длина строки (только число символов) BL = атрибут, если строка содержит только символы DH,DL = строка и столбец, начиная с которых будет выводиться строки ES:BP = адрес начала строки в памяти

Функция 13h выводит на экран строку символов, интерпретируя управляющие символы CR (0Dh), LF (0Ah), BS (08) и BEL (07). Если строка подготовлена в формате символ,атрибут — гораздо быстрее просто скопировать ее в видеопамять, о чем рассказано в следующем разделе.

Воспользуемся теперь функциями BIOS, чтобы усовершенствовать программу DOSOUT1 и вывести на экран все 256 символов, включая даже символы перевода строки. Кроме того, для лучшей читаемости таблицы после каждого символа будет выводиться пробел.

; biosout.asm

; Выводит на экран все ASCII-символы без исключения

.model tiny

.code

org 100h; Начало СОМ-файла

start:

mov ax,0003h

int 10h; Видеорежим 3 (очистка экрана

mov dx,0; DH и DL будут использоваться

; для хранения положения курсора.

; Начальное положение - 0,0

mov si,256; SI будет счетчиком цикла

mov al,0; Первый символ - с кодом 00h

mov ah,9; Номер видеофункции "вывод символа с атрибутом"

mov cx,1; Выводится один символ за раз

mov bl,00011111b

;атрибут символа - белый на синем

cloop:

int 10h; Вывести символ на экран

push ax; Сохранить текущий символ и номер функции

mov ah,2; Номер видеофункции 2 -

; изменить положение курсора

inc dl; Увеличить текущий столбец на 1

int 10h; Переместить курсор

mov ax,0920h; АН = 09, AL = 20h (ASCII-код пробела)

int 10h; Вывести пробел

mov ah,2; Номер видеофункции 2

inc dl; Увеличить столбец на 1

int 10h; Переместить курсор

pop ax; Восстановить номер функции в ah

; и текущий символ в al

inc al; Увеличить AL на 1 - следующий символ

test al,0Fh; Если AL не кратен 16,

jnz continue_loop

; продолжить цикл,

push ax; иначе - сохранить номер функции

; и текущий символ

mov ah,2; Номер видеофункции 2

inc dh; Увеличить номер строки на 1

mov dl,0; Столбец = 0

int 10h; Установить курсор на начало следующей строки

pop ax; Восстановить номер видеофункции

; и текущий символ

continue_loop:

dec si; Уменьшить SI на 1,

; если он не стал нулем - продолжить

jnz cloop; CX используется внутри цикла,

; так что нельзя использовать команду LOOP

; для его организации

ret; Завершение СОМ-файла

end start

Так как функция 09 выводит символ в позиции курсора, но не перемещает сам курсор, это приходится делать каждый раз специально.

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

<== предыдущая лекция | следующая лекция ==>
Средства MS-DOS | Общие понятия. Лекция 7. Ввод с клавиатуры
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 372; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.039 сек.