Вывод на экран DOS (Текстовый режим 80x25)

Модератор: push0ret

Ответить
Аватара пользователя
push0ret
Набирающий обороты
Сообщения: 23
Зарегистрирован: Вс дек 29, 2024 2:48 pm
Благодарил (а): 12 раз
Поблагодарили: 22 раза

Вывод на экран DOS (Текстовый режим 80x25)

Сообщение push0ret »

Hello, world!

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

Видеопамять проецируется в оперативную, поэтому обращение к ней осуществляется также с помощью адресации. Сегментный адрес текстовой видеопамяти B800. В данном режиме работы видеоадаптер поддерживает 8 видеостраниц, адреса видеостраниц в текстовом режиме 80х25:

Страница 0 - B800:0000 Страница 1 - B800:1000
Страница 2 - B800:2000 Страница 3 - B800:3000
Страница 4 - B800:3000 Страница 5 - B800:5000
Страница 6 - B800:4000 Страница 7 - B800:7000

Исключение составляют видеоадаптеры EGA, которые имеют 64КБ видеопамяти, в этом случае поддерживается 4 видеостраницы. Одна из видеостраниц является активной, то есть содержимое области памяти активной страницы мы видим на экране. К каждой странице видеоэкрана можно обратиться с помощью функций BIOS, с помощью адресации, а также с помощью управляющих регистров контроллера ЭЛТ.

Для кодирования каждого знакоместа (символа) экрана используется 2 байта, первый байт - ASCII код символа, а второй байт - атрибут символа. Атрибуты определяют цвет символа, цвет фона, интенсивность цвета. Приведу формат байта атрибута:

D2-D0 Цвет символа.
D3 Интенсивность символа.
D6-D4 Цвет фона символа.
D7 Мигание символа или интенсивность фона символа.

Код цвета в__________Стандартный цвет________Цвет с повышенной
байте атрибутов______________________________интенсивностью

000__________________черный__________________серый
001__________________синий___________________светло-синий
010__________________зеленый_________________светло-зеленый
011__________________морской волны___________голубой
100__________________красный_________________светло-красный
101__________________фиолетовый______________малиновый
110__________________коричневый______________желтый
111__________________белый___________________ярко-белый

Давайте выведем на экран всю таблицу ASCII символами в цвете морской волны на коричневом фоне:

Код: Выделить всё

.model	tiny
.286
code	segment
org	100h

start:

;get text videomemory address in ES:BX

push 0B800h
pop es

mov cx, 256d		;size of ASCII table
mov ah, 01100011b	;attribute 

display:

mov word ptr es:[bx], ax
add bx, 2d
inc al
loop display

mov ah, 1d
int 21h

push 0
ret

code	ends
end	start
Результат работы программы:
ascii_on_screen.PNG
ascii_on_screen.PNG (93.35 КБ) 43 просмотра
Была использована версия компилятора MASM 6.11 в контексте операционной системы MS DOS 6.22!

Спасибо за внимание!
С уважением, push0ret!
Ответить

Вернуться в «Системное программирование»