Выпуск 05
Вывод на экран, или фокусы видео.
Ну как предисловие, прошу у всех прощения за столь долгое отсутствие в сети, и ненаписание и незанятие рассылкой. С теперешнего времени, я постараюсь выпускать её раз в 2-3 недели (это в сентябре) а в декабре - чаще.
np: Linkin park - in the end
Мы имеем на данный момент 3 основных способа вывода текста и псевдографики на экран в текстовом режиме: 1 функции DOS 2 функции BIOS 3 работа с видеопамятью
1 Functions of DOS:
02h
mov AH,02h mov DL, код символа int 21h
выход: AL - код последнего записанного символа - т.е. равен DL, кроме случая, когда DL = 09h , символ Tab, тогда в AL возвращается 20h
07h - звуковой сигнал. 08h - курсор влево на одну позицию 09h - табуляция 0Ah - курсор на одну позицию вниз 0Dh - на начало текущей строки.
И другие функции. (см. справочник по дос функциям)
2 Functions of BIOS:
Биос позволяет нам не только выводить текст и псевдографику в любую точку экрана ( чего не могут дос ф-ии) но и управлять видеорежимом, положением курсора, цветом и атрибутами выводимого текста.
Выбор видеорежима. Они отличаются друг от друга разрешением для графических, и количеством символов (строк и столбцов) для текстовых режимов.
mov ah,00h mov al,номер режима в младших семи битах int 10h
если старший бит AL установлен в 0, то экран при этом очищается.
01.10.2006 0:12 АА, неуспел на прошлой неделе дописать рассылку, сегодня продолжу.
mov ah,09h mov bh,номер страницы mov al,аски код символа mov bl,атрибут символа mov cx,число повторений символа int 10h
Атрибуты смотри в приложении. Остальные биос функции смотри в справочнике.
3 Самое вкусное - Прямая работа с видеопамятью.
У нас имеется такая область оперативки, которая постоянно сканируется, и если в ней что-либо изменяется, то эти изменения немедленно отображаются на экране. Для текстового режима - это 0x0B800:0000 до 0x0B800:FFFF (0x0B8000 - 0x0C7FFF) Для текстового режима, информация содержится в таком виде: байт с кодом символа, байт с его атрибутом. Например по адресу 0x0B8000 лежит код символа находящегося в левом верхнем углу экрана, а по адресу 0x0B8001 лежит его атрибут.
Ниже - код двух тестовых функций GroSYS
Другие функции и т.д. смотри в архиве GroSYS.rar на сайте (http://ass3mbler.narod.ru/GroSYS.rar) или в аттаче.
; 40h ah=01 ; первая функция 40-го прерывания. ; передвигает экран вверх на сx строк ; когда сюда попадаем, cli уже включено.
ekr_up0: pusha push ebx push eax
test cx,cx jnz lkj mov cx,1 ; если сх равно нулю, то по умолчанию двигаем экран на 1 строку
lkj:
mov ebx,0x0B8000 SSS: mov ax,[ebx] mov [ebx-0x0a0],ax
add ebx,2 cmp ebx,0x0B9680 jl SSS
loop lkj pop eax pop ebx popa sti
iret
; ниже - верный способ вызвать ошибку, и перезап=грузить комп. используется для проверки кода.
; lgdt [gdtr1] ; ; gdtr1: ; dw 3*8-1 ; dd gdtr1+100 ;;
Удачи!! Skif_Q skif_q@mail.ru http://ass3mbler.narod.ru
|