Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > вывод изображения


Автор: iff 18.11.2009, 17:43
ОС: DOS/Windows
Компилятор: TASM 5.0

Суть проблемы:
Я пишу программу для вывода графического файла (640 на 480), придуманного мною формата на экран.
В программе исползовал такую структуру:
Код

mov cx, 01h
a10: mov dx, 01h
a20:
mov ah, 0ch                 ;Рисуем точечку
mov al, bufer ;В переменной bufer находится значение цвета
int 10h

add dx, 01h
cmp dx, 1e1h
jne a20

add cx, 01h
cmp cx, 280h
jne a10

Из кода программы видно, что она представляет собой 2 вложенных один в другой цикла.
Всё работает. Но уж очень медленно. Как сделать побыстрей? У меня есть на этот счёт идея: нужно взять из оперативной памяти достаточно большой кусок данных и поместить его в определённое место в видеопамяти, но как это сделать... А каков ваш способ?

Автор: iff 18.11.2009, 19:02
Никто не знает?

Автор: iff 18.11.2009, 22:27
Попробовал сделать так:
Код

mov ax, 0a000h  ;Область видеобуфера
mov es, ax
mov di, 00h         ;Смещение 0

mov ax, 023h      ;Цвет пикселей 023h
mov es:[di], ax    ;Вывод

Результат есть. Если поставить значение цвета ffff, то выведется линия из белых токек, если поставить 00, то точек не будет видно (чёрный цвет), ну а если поставить значение цвета ee24, то отнють не появятся разноцветные пиксели. А появится пунктир (то черная точка, то белая) Создалось такое впечатление что этот графический режим черно-белый. Но ведь это не так. В чём ошибка?
Для справки: используется графический режим 12h

Автор: 111u3 19.11.2009, 03:52
iff, прочитай внимательно про то прерывание которое ты используешь, может увидишь свою ошибку

Автор: Mikl_ 19.11.2009, 04:28
iff, 
вывод графики на экран по-точечно будет очень медленным, обычно выводят данные куском в буфер видеопамяти, начиная с адреса 0A000:0000h до 0AFFF:FFFFh предварительно установив нужный режим 12h, 13h, режимы VESA (если нужно разрешение экрана больше чем 320х200 и более 256 цветов), предварительно устанавливают палитру или выводят в режиме True color -- более подробно смотри в гугле например "вывод BMP на экран". Здесь тоже были примеры в разделе "Asm для DOS/Windows" smile 

Автор: iff 19.11.2009, 19:19
111u3, Код представленный в моём первом посте работает (это вроде как значит отсутствие ошибок). Т.е. проблема не втом, что программа не работает, а в том, что, как уже сказал Mikl_, в слишком медленной работе этих прерываний.

Автор: 111u3 19.11.2009, 20:37
iff, я имел ввиду то что ты обращаешся не так и не то пишешь в видеопамять когда напрямую к ней обращаешся.

Автор: iff 19.11.2009, 21:03
А как надо?

Автор: 111u3 20.11.2009, 17:14
Как надо тебе учебник по ассемблеру скажет, я не ходячий справочник чтобы помнить все наизусть, да и лениво это. Ты лучше побольше кода приведи, а еще лучше весь тогда как ошибку исправить покажу. может быть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)