Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_lectures.doc
Скачиваний:
36
Добавлен:
28.04.2019
Размер:
992.77 Кб
Скачать

Вывод на экран текста средствами bios

Много способов вывода текста на экран. Например, функция 09h DOS выводит текст до символа «$», или файл 40h, для которого длина выводимого сообщения. Однако возможности DOS весьма ограничены: DOS не имеет функций для изменения цвета выводимых символов и позиционирования курсора. Текст, выводимый DOS, это последовательность белых символов на черном экране.

Прерывание 10h BIOS позволяет использовать все возможности видеосистемы компьютера и обладает большой скоростью.

Использование памяти BIOS

Положение

Длина

Описание

40:10

Байт

Установленная аппаратура 1

40:11

«

« 2

40:12

«

Состояние _____________ после включения питания

40:13

Слово

Размер памяти

40:15

Слово

Резерв

40:17

Байт

Управление клавишей 1

40:18

«

« 2

40:1А

Слово

Указатель начала буфера клав. (голова)

40:1С

«

Указатель конца буфера клав. (хвост)

40:1Е

32 байта

Буфер клав.

40:49

Байт

Режим дисплея

40:4А

Слово

Число колонок

40:4С

Слово

Длина буфера регенерации в байтах

40:4Е

«

Адрес буфера регенерации

40:50

«

Позиция курсора на стр.1

40:52

«

« 2

40:54

«

« 3

40:56

«

« 4

40:58

«

« 5

40:5А

«

« 6

40:5С

«

« 7

40:5Е

«

« 8

40:60

«

Тип курсора

40:62

Байт

Текущая строка изображения

40:63

Слово

Базовый адрес видеоконтура

.

.

.

.

.

.

.

.

.

40:6С

Слово

Счетчик таймера

40:70

Байт

40:71

«

Сост.клав.Break

Режимы дисплея

Номер

Тип

Макс. цветов

Формат текста

Макс. Страниц

Нач. адрес

0

Т

16

40х25

8

В8000

1

Т

16

40х25

8

В8000

2

Т

16

80х25

4 8 8

В8000

3

Т

16

80х25

4 8 8

В8000

4

Г

4

320х200

40х25

1

В8000

5

Г

4

320х200

40х25

1

В8000

6

Г

2

640х200

80х25

1

В8000

7

Т

Моно

80х25

  1. 8

В0000

8

Г

16

160х200

20х25

1

В0000

9

Г

16

320х200

40х25

1

В0000

А

Г

4

640х200

80х25

1

В0000

D

Г

16

320х100

40х25

8

А0000

Е

Г

16

640х200

80х25

4

F

Г

Моно

640х350

80х25

2

10

Г

16

640х350

80х25

2

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

Информация флагов оборудования определяет какой из адресов буфера будет использовать видеопрограмма BIOS.

5 | 4 биты

40:10 01 - цв. 40х25

  1. - цв. 80х25

  2. – моно?

Для монохромных в ЕS загружается 0В000h, а для цветных ОВ800h – это позволяет остальным программам BIOS работать без информации о том, какой адаптер работает в системе. Все ссылки к буферу делаются ЕS.

В DOS практически нет для работы с цветным адаптером. Такие есть в BIOS. Все следующие функции запрашиваются посредством int 10h

Номер функции в АН Описание

00H

уст. видео режим

01H

уст. размер и форму курсора

02H

уст. позицию курсора

03H

читать позицию курсора

04H

читать световое перо

05H

выбрать активную страницу дисплея

06H

листать окно вверх (или очистить)

07H

листать окно вниз

08H

читать символ/атрибут

09H

писать символ/атрибут

0aH

писать символ

0bH

выбрать палитру/цвет бордюра

0cH

писать графическую точку

0dH

читать графическую точку

0eH

писать символ в режиме TTY

0fH

читать видео режим

10H

EGA уст. палитру

11H

EGA генератор символов

12H

EGA специальные функции

13H

писать строку (только AT + EGA )

Многие функции BIOS требуют задания атрибута выводимых символов. Атрибут символа занимает одна байта и определяет цвет символа и фона под ним, а также некоторые дополнительные характеристики изображения. Структура байта атрибутов

Код

Цвет

Биты 4-6 цвет фона под символом.

0

черный

Бит 7 – в зависимости от режима видеоодаптера

1

синий

Определяет либо яркость фона под данным символом

2

зеленый

(тогда фон принимает 16 цветов), либо мерцание сим-

3

бирюзовый

вола..

4

красный

Так, в режиме мерцания значения старшего полубайта

5

фиолетовый

атрибута 8h обозначает не серый фон, а черный при

6

коричневый

мерцающем символе. Сh- не розовый, а красный

7

белый

8

серый

9

голубой

А

салатовый

В

светло-бирюзовый

С

розовый

D

светло-фиолетовый

E

желтый

F

ярко-белый

; Очистим экран, наложив на него черно-белое окно

mov AH ,06h ; функция задания окна

mov Al, 0 ; режим создания (не прокрутка)

mov BH ,07h ; атребут всех символов в окне – ч/б

mov CH, 0 ; верхняя Y – коорд.

mov CL, O ; левая Х – коорд.

mov DH, 24 ; нижняя Y – коорд.

mov DI, 79 ; правая Х – коорд.

Int 10h ; прер. BIOS.

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

mow AH ,06h ; функция задания окна

mov Al, 0 ; режим создания (не прокрутки)

mov BH, 1Eh ; атрибут желтый по синему

mov CH,5 ; верхняя Y – коорд.

mov CI,40 ; левая Х – коорд.

mov DH, 9 ; нижняя Y – коорд.

mov DI, 75 ; правая Х – коорд.

Int 10h ; прер. BIOS

; Позиционируем курсор

mov AH, 02h ; функция позиционирования

mov BH,0 ; видеостраница

mov DH,7 ; строка

mov DL, 45 ; столбец

Int 10h

; Строку символов в окно без задания атрибутов (т.е. с атрибутами окна)

mov CX, len1 ; длина строки

mov BX,offset mes1 ; адрес строки символа

mov AH,Oeh ; функция выбора одного символа

metka: mov Al, [Bx] ; символ в Al

Int 10h ; сдвиг по строке

Loop metka

; Строка вне окна, задевая атрибуты символов

mov AH, 13h ; функция вывода строки

mov AL,0 ; режим (атрибут в В2)

mov BH,0 ; видеостраница

mov BL,04h ; атрибут всех символов

mov CX, len2 ; длина строки

mov DH,16 ; начало позиции - строка

mov DL,25 ; начало позиции - столбец

push DS ; настройка ЕS на наш сегм.

pop ES ; данные

mov, BP offset mes2 ; ES:BP – выв. стр.

Int 10h

; Позицируем курсор в начало посл. строки экрана

mov AH, 02h ; функция позиционирования

mov BH,O ; видеостраница

mov DH,24 ; строка

mov DL,0 ; столбец

Int 10h

mes1 DB 16,’Cтрока, выведенная в окно’,17

len1 = $-mes1

mes2 DB 22,22,22,’Строка, выведенная вне окна’,22,22,22

len2 =$-mes2

Функция 06h в заданном месте экрана создает цветное окно. Если в созданные ранее окна выведен какой-либо текст, то c помощью этой функции этот текст прокручивается вверх (функция 07h прокручивает вниз). В Аl – число прокручиваемых строк. При этом текст, уход и край окна пропадает, а из-под противоположного края появляются пустые строки с заданными атрибутами. Для заполнения строк используются подсоединенные функции BIOS.

Функция 02h – позиционирование курсора – место положения номер строки (0 – 24) и номер столбца (0…79). Восемь независимых курсоров – на каждую видеостраницу. Функция 02h – позиционирует курсор на любую страницу независимо, какая страница является активной.

Для вывода на экран символов и символов строк используется функция 09h, OАh, OEh и 13h.

Функция ОЕh – фильтрует упр. коды 07h (звук), 08h (возврат каретки на шаг), 10 (перевод строки) и 13 (возврат строки) – выполняя соответствующие им действия после вывода каждого символа курсор перемещается на следующую позицию, что дает возможность выводить в цикл целые строки. Атрибут, однако установить нельзя – символ приобретает атрибут той позиции, куда выводится.

Функция 13h – вывод строк с указанием атрибутов как каждого символа в отдельности, так и всей строки. Четыре варианта выполняются в зависимости от Al. В режиме Al = 0 и 1 – атрибут символа указывается сразу для всей строки.

В режиме 0 – курсор не смещается в процессе

В режиме 1 – смещается на длину строки

В решении (2) и (3) атрибуты символов включаются в выводимую строку, в которой чередуются коды атрибутов и символов. Решение (2) отличается от (3) тем, что в 2 курсор не смещается, а в 3 смещается.

В DХ- координаты начала вывода строки

В СХ- длина

ES:BP- адрес вывода строки

Коды 17h,08h,0Ah,0Dh- как управляющие

с трока вокно

строка вне окна

code_seg segment

assume cs:code_seg, ds:code_seg, ss:code_seg

org 100h

start:

jmp begin

line DB 2

column DB 10

sym DB 01h

;

begin:

; mov AH,25h ;функция заполнения вектора прерывания

; mov AL,65h ; номер вектора

; mov DX,offset new_65h ;смещение обработчика

; int 21h

;

xor AX,AX

mov ES,AX

mov BX,65h

shl BX,2

mov ES:[BX],offset new_65h

mov ES:[BX+2],DS

;

mov AL,0 ;режим создания окна

gogo:

int 65h

mov AH,02h

mov BH,0

mov DH,line

mov DL,column

int 10h

mov AH,0Ah

mov AL,sym

mov BH,0

mov CX,60

int 10h

;

inc sym

mov AL,line

cmp AL,24

je follo

inc line

follo:

mov AH,08h

int 21h

;

mov AL,1 ;режим прокрутки

;

jmp gogo

;

new_65h proc near

mov AH,06h

; mov AL,1

mov BH,1Bh

mov cx,0

mov DH,24

mov DL,79

int 10h

iret

;

new_65h endp

code_seg ends

end strart

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]