Отправляет email-рассылки с помощью сервиса Sendsay

Ассемблер для начинающих.

  Все выпуски  

Ассемблер для начинающих. Выпуск 5


Assembler for newbies in Low level Programming
Ассемблер для новичков в низкоуровневом программировании.

Выпуск 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

В избранное