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 ta mail.ru http://ass3mbler.narod.ru