1. Заголовок или название темы должно быть информативным 2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE] 3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора. 5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM! 6. Проверяйте программы перед тем, как выложить их на форум!!
Графика в Tasm, Как в графическом режиме рисовать?
----------------- Вот пример режим 320*200 16-милионов цветов
.MODEL SMALL .STACK 100H .DATA windows db 0 ;deskriptor step winodw
x dw 150;The first coordinate on X | y dw 100;The first coordinate on Y |Matrix of color from 0..20 on 20 x1 dw 170;the second coordinate for X | y1 dw 120;the second coordinate for Y |
xx dw 0;Coordinates for a conclusion of a point yy dw 0;
color dd 1h;color
deskr_buf dw 398;Quatity of points т/к/ есть разница 0 до 20 или 1 до 20 des_x db 20;descriptor X coord des_y db 20;-=-=-=-=-=
image_buf dd 126 dup(00fff1ffh),147 dup(000000ffh),126 dup(00ff0001h);Bufer for color
.CODE START: .386 mov ax,@data;Adjust the data on segment mov ds,ax;of the data ;------------------------------------------------ mov ax,4f02h;фунция VESA mov bx,10fh;режим 320*200 16-милионов цветов int 10h ;BIOS video interrupt ; mov ax,0a000h;video memory adress mov es,ax;init es for video memory lea di,image_buf;адрес картинки в регистр DI ;------------------------------------------------------------------ mov ax,[x] mov [xx],ax mov ax,[y] mov [yy],ax
new_pset: ; cmp [deskr_buf],0;сравнение на ноль кончился ли массив je end ;если кончислся то на конец программы jmp matrix;на вывод матрицы end: ; call Wait_Key;ждем клавиши call Exit;выходим matrix: ;
mov eax,[di];получаем цвет mov [color],eax;
call OutPixel;на вывод пикселя первый пиксель mov bx,[x1] cmp [xx],bx;сравниваем не кончилась ли координата ХХ je a_x ;если больше то на модификацию jmp no_ax;нет на вычеричивание по Х a_x: ; add di,4;меняем положение бегунка в буффере цвета mov ax,[x];востанавливаем координату Х mov [xx],ax;-=-=-= inc [yy];увеличиваем У dec [deskr_buf];уменьшаем дескриптор jmp Out_P no_ax: ; inc [xx];увеличиваем Х add di,4;меняем положение бегунка в буффере цвета dec [deskr_buf];уменьшаем дескриптор буффера
exit proc near mov ah,4ch; mov al,0; -EXIT to DOS; int 21h; exit endp;
OutPixel proc near call mov_w0;всегда начинаем вывод с нулевого окна mov ax,1280;1280 количество точек по X т/к/ цвет разме ;-щается в видео памяти в 32 расзрядах в 4 байтах mul yy ;умножаем на У jc corect;если переполнение то коректир ;============================================ shl xx,2 ;сдвиг влева корректир т/к/ 4 байта на цвет точки add ax,xx;конечный результат сумма adc dx,0 jc corect1;если переполнение то на корректировку cmp dx,1 je corect1 mov si,ax;теперь адресуем видео память ;на полученый результат out: mov ebx,color;цвет mov es:[si],ebx;ставим точку shr xx,2 ;так как мы изменили Х то возвращаем его взад jmp ex_t;выходим corect:
shl xx,2 ;сдвиг на 2 умножаем на 4 add ax,xx;в ax конечный результат adc dx,0 corect1: mov si,ax;в si ax cmp dx,2 je corect2 cmp dx,3 je corect2 not_cor:
call mov_w1;двигаем окно на 1 шаг jmp out ;на вывод точки corect2: cmp dx,3 jz corect3 call mov_w2 jmp out corect3: call mov_w3 jmp out ex_t: ret ;выход из процедуры вывода точки ;обратно в Брезенхейм OutPixel endp
mov_w0 proc near;movenay to window mov ah,4fh;in step zero mov al,05;62454 mov bh,0;--------- mov bl,0;--------- mov dx,0;переносим окно на один шаг int 10h mov windows,0 ret mov_w0 endp mov_w1 proc near mov ah,4fh; mov al,05;62454 mov bh,0;--------- mov bl,0;--------- mov dx,1;переносим окно на один шаг int 10h mov windows,1 ret mov_w1 endp mov_w2 proc near mov ah,4fh; mov al,05;62454 mov bh,0;--------- mov bl,0;--------- mov dx,2;переносим окно на один шаг int 10h mov windows,2 ret mov_w2 endp mov_w3 proc near mov ah,4fh; mov al,05;62454 mov bh,0;--------- mov bl,0;--------- mov dx,3;переносим окно на один шаг int 10h mov windows,3 ret mov_w3 endp
wait_key proc near mov ah,0 int 16h ret wait_key endp
END START
Сообщение отредактировано: volvo -
--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/