Тема 4.3 Вывод на экран в текстовом режиме
Для реализации данных возможностей программа должна использовать видеофункции BIOS. BIOS (Basic Input/Output System — базовая система ввода-вывода) — это набор программ, расположенных в постоянной памяти компьютера, которые выполняют его загрузку сразу после включения и обеспечивают доступ к некоторым устройствам, в частности к видеоадаптеру. Все функции видеосервиса BIOS вызываются через прерывание 10h. Рассмотрим функции, которые могут быть полезны для вывода текстов на экран. Выбор видеорежима. BIOS предоставляет возможность переключения экрана в различные текстовые и графические режимы. Режимы отличаются друг от друга разрешением (для графических) и количеством строк и столбцов (для текстовых), а также количеством возможных цветов. АН = 00 — Установить видеорежим Вызов этой функции приводит к тому, что экран переводится в выбранный режим. Если старший бит AL установлен в 0, то экран не очищается. Номера текстовых режимов — 0, 1, 2, 3 и 7. Режимы отличаются между собой количеством строк и столбцов, а также количеством видеостраниц. Отметим, что данная функция позволяет переводить и в графические режимы. Но работу в графических режимах рассмотрим позднее. По умолчанию стоит 3-й текстовый режим. Установить положение курсора С помощью этой функции можно установить курсор в любую позицию экрана, и дальнейший вывод текста будет происходить из этой позиции. Отсчет номера строки и столбца ведется от верхнего левого угла экрана (символ в левой верхней позиции имеет координаты 0, 0). Номера страниц 0 – 3 (для режимов 2 и 3)и 0 – 7 (для режимов 1 и 2) соответствуют области памяти, содержимое которой в данный момент отображается на экране. Можно вывести текст в неактивную в настоящий момент страницу, а затем переключиться на нее, чтобы изображение изменилось мгновенно.
Считать положение и размер курсора Возвращает текущее состояние курсора на выбранной странице (каждая страница использует собственный независимый курсор). Вывод символов на экран Каждый символ на экране описывается двумя байтами — ASCII-кодом символа и байтом атрибута, указывающим цвет символа и фона, а также является ли символ мигающим. Каждый бит атрибута символа имеет свое назначение: Цвета кодируются следующим способом (первое значение для обычного цвета, второе — для яркого): 000b — черный (темно-серый), 001b — синий (светло-синий), 010b — зеленый (светло-зеленый), 011b — голубой (светло-голубой), 100b — красный (светло-красный), 101b — пурпурный (светло-пурпурный), 110b — коричневый (желтый), 111b — светло-серый (белый). Обратите внимание на то, что цвета соответствуют шкале RGB. Считать символ и атрибут символа в текущей позиции курсора Ввод: АН = 08 Вывести символ с заданным атрибутом на экран С помощью этой функции можно вывести на экран любой символ, включая даже символы CR и LF, которые обычно интерпретируются как конец строки. В графических режимах СХ не должен превышать число позиций, оставшееся до правого края экрана.
Вывести символ с текущим атрибутом на экран, т. е. с атрибутом символа, находящегося ранее в этой позиции. Вывести символ в режиме телетайпа Вывести строку символов с заданными атрибутами бит 0 — переместить курсор в конец строки после вывода Задания Задание. 4. 1. Создайте com-файл (или файлы), в котором должны использоваться все указанные функции. Задание. 4. 2. Нарисуйте «разноцветную рожицу» — глаза в виде ноликов, рот из тире и т. д. Задание. 4. 3. Используя функции BIOS выведите все 256 символов таблицы ASCII по 16 символов в каждой строке. org 100h; Начало СОМ-файла start: mov ax, 0003h int 10h; Видеорежим 3 (очистка экрана ; и установка курсора в 0, 0) 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 Обратим внимание на то, что управляющие символы тоже выведены.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|