Категории каталога

Программинг [38]
Программинг, уроки, формулы, туториалы
Dark Basic [31]
Помощь начинающим в Dark Basic (Статьи,учебники,книги)
Blitz 3d [7]
Статьи и уроки по Blitz 3d
C/C++ [8]
Статьи по C/C++
Delphi [12]
книги, уроки, статьи, программирование в Delphi
Game Maker [12]
Статьи, помощь для программистов игроделов на Game Maker
Ассемблер (Assembler) [5]
Стати по Ассемблеру для начинающих и продвинутых программистов
ВЕБ-ПРОГРАММИРОВАНИЕ [5]
Уроки и статьи по ВЕБ-программированию
Scirra Construct [0]

Форма входа

Приветствую Вас Гость!

Логин:
Пароль:

Поиск

Друзья сайта



    Случайное фото

    Статистика

    Онлайн всего: 4
    Гостей: 4
    Пользователей: 0

Поддержите наш проект

WebMoney:
R309699065243
U292079291240
Z373355457648

Счётчики


Rambler's Top100

Наш опрос

Какой раздел сайта вас больше всего привлёк?
Всего ответов: 114

Статистика

$COUNTERdiv>

Каталог статей

Главная » Статьи » Программинг » Ассемблер (Assembler)

Рисование графики используя INT 10h

Операционная система: MS-DOS 3+      
Среда:
Borland TASM (Assembler)


Введение

Для работы с графическим адаптером, в BIOS используется прерывание INT 10h. Оно позволяет
устанавливать графические режимы работы, выводить символы и графику. В данной статье будет описано
использование INT 10h для рисования графики.

Выбор графического режима
Функция 0 (ah=0) прерывания INT 10h устанавливает видео режим, который был указан в регистре AL.
В этой таблице приведены значения только для графических режимов, текстовые будут описаны в другой
статье.

Графические режимы

Режим Разрешение Количество цветов
06h 640x200 2
0Dh 320x200 16
0Eh 640x200 16
0Fh 640x350 2
10h 640x350 16
11h 640x480 2
12h 640x480 16
13h 320x200 256
6Ah * 800x600 16

* Режим 6Ah утвержден VESA, но его поддерживают не все видео адаптеры

Существуют также дополнительные режимы, которые используются для SVGA и XGA адаптеров. Они
устанавливаются вызовом VESA BIOS Extension (AX=4F02h INT 10h).


Рисование точки

Для рисования точки необходимо вызвать функцию 0Ch прерывания INT 10h. Цвет помещается в AL,
видеостраница в BH, координатаY в DX, а координатаX в CX. Следующая процедура рисует точку с
цветом 1, в X=50 и Y=20.

mov ah,0Ch ; функция рисования точки
mov al,1 ; цвет точки
mov bh,0 ; видео страница
mov cx,50 ; координата X
mov dx,20 ; координата Y
int 10h ; вызов прерывания BIOS

Функция 0Ch исполняется очень медленно, особенно при рисовании множества точек. Настоящие
графические программы (такие как игры) записывают непосредственно в видеопамять, после того, как
они рассчитали цвет и расположение точки. Но в нашем случае INT 10h является промежуточным шагом
на пути к настоящему программированию графики. Вы можете прочесть о прямом выводе графики
в видео режиме 13h (320x200x256) в этой статье.


Пример программы

Эта программа переключается в графический режим, рисует длинную линию, используя функцию 0Сh,
затем ожидает нажатия клавиши и возвращается в прежний режим. Если вы запустите этот пример из
DOS окна под Windows, то при переключении графического режима, ваше окно перейдет в полно
экранный режим. Когда программа закончит свое выполнение, нажмите ALT+ENTER для перехода в
оконный режим.

.model small 
.stack 100h
.386

Mode_6 = 6 ; 640 X 200, 2 colors
Mode_13 = 0Dh ; 320 X 200, 16 colors
Mode_14 = 0Eh ; 640 X 200, 16 colors
Mode_15 = 0Fh ; 640 X 350, 2 colors
Mode_16 = 10h ; 640 X 350, 16 colors
Mode_17 = 11h ; 640 X 480, 2 colors
Mode_18 = 12h ; 640 X 480, 16 colors
Mode_19 = 13h ; 320 X 200, 256 colors
Mode_6A = 6Ah ; 800 X 600, 16 colors

.data
saveMode db ; Сохранить текущий видео режим
currentX dw 100 ; координата X
currentY dw 100 ; координата Y
color db 1 ; номер цвета

; В 2 цветном режиме 1 = белый, в 16 цветном 1 = синий

.code

main proc
mov ax,@data
mov ds,ax

; Получить текущий видео режим

mov ah,0Fh
int 10h
mov saveMode,al

; Переключиться в графический режим

mov ah,0 ; установка видео режима
mov al,Mode_17 ; номер режима
int 10h

; Рисование прямой линии

LineLength = 100

mov dx,currentY
mov cx,LineLength ; счетчик цикла

L1:
push cx
mov ah,0Ch ; рисование точки
mov al,color ; цвет точки
mov bh,0 ; видео страница
mov cx,currentX
int 10h
inc currentX
;inc color ; используйте для разноцветной линии
pop cx

loop L1

; Ожидаем нажатия клавиши

mov ah,0
int 16h

; Возврат в прежний видео режим

mov ah,0 ; установить видео режим
mov al,saveMode ; сохраненный видео режим
int 10h

; Выход из программы

mov ax,4c00h
int 21h

main endp

end main

Заключение

Исходный код данного примера для Turbo Assembler можно скачать здесь.

источник: sizov.boom.ru

Категория: Ассемблер (Assembler) | Добавил: quadrathell (08.11.2008)
Просмотров: 21737 | Рейтинг: 4.5/11 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]