1. Заголовок или название темы должно быть информативным 2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE] 3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора. 5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM! 6. Проверяйте программы перед тем, как выложить их на форум!!
кидаю пока что есть не все до конца раелизовано и оптимизированно -=-=
.MODEL small .STACK 100H .DATA
E dw 0 ; дескриптор отклонения если Е>=0 то у+1 и х+1 ; если Е<0 то Х+1, а У остается неизменным windows db 0 ; декриптор перемещений окна xx dw 10 ; координаты для алгоритма Брезехейма yy dw 1 ; начальые x dw 0 ; для расчета под ока и y dw 0 ; вывода на экран color dd 0ffffffffh ; цвет x2 dw 19 ; конец y2 dw 199 ; линии Px dw 0 ; прирост по X Py dw 0 ; прирост по Y i dw 0 ; кол-во цикла т.е. длина линии
;PxPy dw 0 ; сверка на прирост
.CODE START: .386 ; подключаем функции 386 процессора 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 mov ax,@data ; segm data adress mov ds,ax ; init DS for seg memory data
;---------------------------------------------------- mov ax,x2 ; вычисляем прирост sub ax,[xx] ; для mov [Px],ax ; X mov ax,[y2] ; прирост для sub ax,[yy] ; Y
;--=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=- mov [Py],ax ; загоняем прирост в регистры mov ax,[Py] ; сравниваем на большесть числа не знаковые ; cmp ax,0 ; проверка на отрицательный прирост ; jl BresRUp1 ; jmp dal2 ;BresRUp1: ; mov bx,[Px] ; ; cmp bx,0 ; проверка на отрицательный прирост ; jl BresLUp1 ; ;dal2: mov bx,[Px] ; cmp bx,0 ; проверка на отрицательный прирост jl BresLD1 jmp dal1 BresLD1: ; cmp ax,bx ; сравниваем на большесть числа не знаковые ; ja BrLD_N ; если больше то на новый алгоритм ; jmp dal ; если нет то на обычный ;BrLD_N:
call invert mov ax,[Px] ; тут именно в этих местах может быть небольшой BUG ; на правильность отклонения линии не надо путать формулу ; первоначалього дескриптора mov [i],ax ; mov ax,[Py] ; Вычислеам дескриптор отклонения по shl ax,1 ; формуле sub ax,[Px] ; E=2*Py-Px mov [E],ax ; mov cx,[i] ; количество пикселей call BresLD ; movenay to algoritm Paint Line Procedure
dal1:
cmp ax,bx ; сравниваем на большесть числа не знаковые ja BrRD_N ; если больше то на новый алгоритм jmp dal ; если нет то на обычный BrRD_N:
mov ax,[Py] ; то длина линии будет получаться из mov [i],ax ; Py mov ax,[Px] ; Вычисляем дескриптор отклонения по shl ax,1 ; формуле sub ax,[Py] ; E=2*Px-Py mov [E],ax ; call BresRDN ; movenay to algoritm Paint Line Procedure
;----------------------------- BresLD proc near ; влево вниз
mov cx,[i] brezen2: cmp [E],0 ; Если Е jge deskrip_on2 ; больше или ранво 0 то jump jmp deskrip_off2 ; меньше 0 то jump deskrip_on2: ; dec [xx] ; увеличиваем на +1 inc [yy] ; увеличиваем на +1 mov ax,[Py] ; далее модифицируем дескриптор отклонения mov bx,[Px] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) add [E],ax ; jmp Ou_Pix2 ; выводим пиксел
deskrip_off2: ; dec [xx] ; увеличиваем только Х+1 а У отстается еизмеым
shl [Py],1 ; модифицируем дескриптор взависимости от старого mov ax,[e] ; по формуле add ax,[Py] ; E=E+2*Py mov [E],ax ; sar [Py],1 ; восстанавливаем Py обратно jmp Ou_Pix2 ; выводим пиксел ret_o2: ; loop brezen2 ; конец цикла jmp exits ; выход из программы Ou_Pix2: ; mov ax,[xx] ; модифицируем координаты mov [x],ax ; для вывода на экран mov bx,[yy] ; mov [y],bx ;
call OutPixel ; выводим пиксел jmp ret_o2 ; обратно на Брезехейм
BresLD endp
;BresLDN proc near ;BresLDN endp ; ;BresLUp proc near ; влево вверх ; ret ;BresLUp endp ; ;BresRUp proc near ; вправо вверх ; ret ;BresRUp endp
BresRD proc near ; вправо вниз brezen: cmp [E],0 ; если Е jge deskrip_on ; больше или равно 0 то jump jmp deskrip_off ; меньше 0 то jump deskrip_on: ; inc [xx] ; меньше 0 то jump inc [yy] ; меньше 0 то jump mov ax,[Py] ; далее модифицируем дескриптор отклонения mov bx,[Px] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) add [E],ax ; jmp Ou_Pix ;по формуле
deskrip_off: ; inc [xx] ; увеличиваем только Х+1 а У отстается неизменным
shl [Py],1 ; модифицируем дескриптор взависимости от старого mov ax,[e] ; по формуле add ax,[Py] ; E=E+2*Py mov [E],ax ; sar [Py],1 ; востаавливаем Py обрато jmp Ou_Pix ; выводим пиксел ret_o: ; loop brezen ; конец цикла jmp exits ; выход из программы Ou_Pix: ; mov ax,[xx] ; модифицируем координаты mov [x],ax ; для вывода на экран mov bx,[yy] ; mov [y],bx ;
call OutPixel ; выводим пиксел jmp ret_o ; обратно на Брезехейм
BresRD endp ;------------------------------------------------------------ ;--- дополительный алгоритм преобразования линии на Px<Py --- ;------------------------------------------------------------
BresRDN proc near ; вправо вниз при Py>Px mov cx,[i] brezen1: cmp [E],0 ; если Е jg deskrip_on1 ; больше или равно 0 то jump jmp deskrip_off1 ; меньше 0 то jump deskrip_on1: ; inc [xx] ; увеличиваем на +1 inc [yy] ; увеличиваем на +1 mov ax,[Px] ; далее модифицируем дескриптор отклонения mov bx,[Py] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) немного модифицируем формулу ; в связи с новым алгоритмом add [E],ax ; jmp Ou_Pix1 ; выводим пиксел deskrip_off1: ; inc [yy] ; тут наоборот y координаты прирост больше shl [Px],1 ; модифицируем дескриптор взависимости от старого mov ax,[E] ; по формуле add ax,[Px] ; E=E+2*Px mov [E],ax ; sar [Px],1 ; востанавливаем Pх обратно jmp Ou_Pix1 ; выводим пиксел ret_o1: ; loop brezen1 ; конец цикла jmp exits ; выход из программы Ou_Pix1: ; mov ax,[xx] ; модифицируем коордиаты mov [x],ax ; для вывода на экран mov bx,[yy] ; для алгоритма вывода точки mov [y],bx ;
call OutPixel ; выводим пиксел jmp ret_o1 ; обратно на Брезехейм
BresRDN endp
;-------------------------------------------------------- OutPixel proc near ; mov ax,1280 ; 1280 количество точек по X mul y ; умножаем на У jc corect ; если переполнение то корректируем ;============================================ shl x,2 ; сдвиг влево корректир. т.к. 4 байта на точку add ax,x ; конечный результат сумма adc dx,0 jc corect1 ; если переполнение то на корректировку cmp dx,1 je corect1 mov si,ax ; теперь адресуем видео память ; на полученый результат out:
mov ebx,color ; цвет mov es:[si],ebx ; ставим точку shr x,2 ; так как мы изменили Х то возвращаем его назад jmp ex_t ; выходим corect:
shl x,2 ; сдвиг на 2 уможаем на 4 add ax,x ; в 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 ah,4ch ;| mov al,0 ;| -EXIT to DOS; int 21h ;|
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
invert proc near mov ax,[Px] not ax add ax,01h mov [Px],ax ret invert endp
END START
--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/
ето поака сырой из сырцов -=-= прямо вода капает но вроде работает -=-= на VESA 16 mil 320 * 200
--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/
.MODEL small .STACK 100H .DATA E dw 0 ; дескриптор отклонения если Е>=0 то у+1 и х+1 ; если Е<0 то Х+1, У остается неизменным windows db 0 ; декриптор перемещения окна xx dw 1 ; кординаты для алгоритма Брезенхейма yy dw 1 ; начальные x dw 1 ; для расчета под окна и y dw 0 ; вывода на экран color dd 0000ff000h ; цвет(ярко зеленый) x2 dw 319 ; конец y2 dw 199 ; линии Px dw 0 ; прирост по Х Py dw 0 ; прирост по У i dw 0 ; кол-во цикла т.е. длина линии
.CODE START: .386 ; подключаем функции 386 процессора 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 mov ax,@data ; segm data adress mov ds,ax ; init DS for seg memory data ;----------------------------------------------------
mov ax,x2 ; вычисляем прирост sub ax,[xx] ; для mov [Px],ax ; Х mov ax,[y2] ; прирост для sub ax,[yy] ; У mov [Py],ax ; загоняем прирост в регистры ;---------------------------------------------------
cmp bx,0 ; проверка на отрицательный прирост jl BresLD1 ; если меньше чем ноль 0 то переход на др. алгоритм ;-------------------------------------
cmp ax,0 jl BresRUp1 jmp dalll BresRUp1: call invertPy cmp ax,bx ja RUp_N1 jmp No_RUp_N1 RUp_N1: call DDLineYC call BresRUp_N No_RUp_N1: call DDLineXC call BresRUp ; movenay to algoritm Paint Line Procedure dalll: jmp dal1 ; если нет то на обычный RD BresLD1: ;==============================================================
cmp ax,0 ; т.к. теперь оба отрицательные jl BresLUp1 ; jmp No_BresLUp ; BresLUp1: call InvertPy ; инвертируем оба call Invert ; значения прироста cmp ax,bx ; на большесть ja New_BresLUp ; jmp off_N_BrLUp ; New_BresLUp: ; call DDLineYC call BresLUp_N ; ; off_N_BrLUp: ; call DDLineXC call BresLUp ; No_BresLUp: call invert ; убираем отрицательный знак cmp ax,bx ; сравниваем на большесть числа не знаковые ;================================================================ ja BrLD1_N ; если больше то на новый алгоритм jmp dal12 ; если нет то на обычный BrLD BrLD1_N: call DDLineYC call BresLD_N dal12: call DDLineXC call BresLD ; movenay to algoritm Paint Line Procedure dal1: cmp ax,bx ; сравниваем на большесть числа не знаковые ja BrRD_N ; если больше то на новый алгоритм jmp dal ; если нет то на обычный BrRD_N: call DDLineYC call BresRDN ; movenay to algoritm Paint Line Procedure dal: call DDLineXC call BresRD ;------------------------------------------------------------------
BresLD proc near ; влево вниз mov cx,[i] brezen2: cmp [E],0 ; если Е jge deskrip_on2 ; больше или равно 0 то jump jmp deskrip_off2 ; меньше 0 то jump deskrip_on2: ; dec [xx] ; уменьшаем на -1 inc [yy] ; увеличиваем на +1 mov ax,[Py] ; далее модифицируем дескриптор отклонения mov bx,[Px] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) add [E],ax ; jmp Ou_Pix2 ; выводим пиксел deskrip_off2: ; dec [xx] ; увеличиваем только Х+1, У отстается неизменным shl [Py],1 ; модифицируем дескриптор в зависимости от старого mov ax,[e] ; по формуле add ax,[Py] ; E=E+2*Py mov [E],ax ; sar [Py],1 ; восстанавливаем Py обратно jmp Ou_Pix2 ; выводим пиксел ret_o2: ; loop brezen2 ; конец цикла jmp exits ; выход из программы Ou_Pix2: ; call OutPixelCoo call OutPixel ; выводим пиксел jmp ret_o2 ; обратно на Брезенхейм BresLD endp ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- BresLD_N proc near mov cx,[i] brezen_LD_n: cmp [E],0 ; если Е jg deskrip_ld_n ; больше или равно 0 то jump jmp deskrip_ld_off ; меньше 0 то jump deskrip_ld_n: ; dec [xx] ; увеличиваем на +1 inc [yy] ; увеличиваем на +1 mov ax,[Px] ; далее модифицируем дескриптор отклонения mov bx,[Py] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) немного модифицируем формулу ; в связи с новым алгоритмом add [E],ax ; jmp Ou_Pix_ld ; выводим пиксел deskrip_ld_off: ; inc [yy] ; тут наоборот y координаты прирост больше shl [Px],1 ; модифицируем дескриптор в зависимости от старого mov ax,[E] ; по формуле add ax,[Px] ; E=E+2*Px mov [E],ax ; sar [Px],1 ; восстанавливаем Pх обратно jmp Ou_Pix_ld ; выводим пиксел ret_o_ld: ; loop brezen_ld_n ; конец цикла jmp exits ; выход из программы Ou_Pix_ld: ; call OutPixelCoo; call OutPixel ; выводим пиксел jmp ret_o_ld ; обратно на Брезенхейм BresLD_N endp
;================================================================= BresLUp proc near ; влево вверх brezenLUp: cmp [E],0 ; если Е jge deskrip_onLUp ; больше или равно 0 то jump jmp deskrip_offLUp ; меньше 0 то jump deskrip_onLUp: ; dec [xx] ; увеличиваем на +1 dec [yy] ; уменьшаем на -1; mov ax,[Py] ; далее модифицируем дескриптор отклонения mov bx,[Px] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) add [E],ax ; jmp Ou_PixLUp ; выводим пиксел deskrip_offLUp: ; dec [xx] ; увеличиваем только Х+1 У отстается неизменным shl [Py],1 ; модифицируем дескриптор взависимости от старого mov ax,[e] ; по формуле add ax,[Py] ; E=E+2*Py mov [E],ax ; sar [Py],1 ; востанавливаем Py обратно jmp Ou_PixLUp ; выводим пиксел ret_oLUp: ; loop brezenLUp ; конец цикла jmp exits ; выход из программы
Ou_PixLUp: ; call OutPixelCoo call OutPixel ; выводим пиксел jmp ret_oLUp ; обратно на Брезенхейм BresLUp endp ; ; ;=========================================== ;=========================================== BresLUp_N proc near mov cx,[i] brezenLUp_N: cmp [E],0 ; если Е jg deskrip_on_LUp_N ; больше или равно 0 то jump jmp deskrip_off_LUp_N ; меньше 0 то jump deskrip_on_LUp_N: ; dec [xx] ; увеличиваем на +1 dec [yy] ; уменьшаем на +1 mov ax,[Px] ; далее модифицируем дескриптор отклонения mov bx,[Py] ; взависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) немного модифицируем формулу ; в связи с новым алгоритмом add [E],ax ; jmp Ou_Pix_LUp_N ; выводим пиксел deskrip_off_LUp_N: ; dec [yy] ; тут наоборот y координаты прирост больше shl [Px],1 ; модифицируем дескриптор в зависимости от старого mov ax,[E] ; по формуле add ax,[Px] ; E=E+2*Px mov [E],ax ; sar [Px],1 ; востанавливаем Pх обратно jmp Ou_Pix_LUp_N ; выводим пиксел ret_o_LUp_N: ; loop brezenLUp_N ; конец цикла jmp exits ; выход из программы Ou_Pix_LUp_N: ; ; mov ax,[xx] ; модифицируем координаты ; mov [x],ax ; для вывода на экран ; mov bx,[yy] ; для алгоритма вывода точки ; mov [y],bx ; call OutPixelCoo; call OutPixel ; выводим пиксел jmp ret_o_LUp_N ; обратно на Брезенхейм BresLUp_N endp ; ;=========================================
;========================================= BresRUp proc near ; вправо вверх
brezenRUp: cmp [E],0 ; если Е jge deskrip_onRUp ; больше или равно 0 то jump jmp deskrip_offRUp ; меньше 0 то jump deskrip_onRUp: ; inc [xx] ; увеличиваем на +1 dec [yy] ; уменьшаем на -1 mov ax,[Py] ; далее модифицируем дескриптор отклонения mov bx,[Px] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) add [E],ax ; jmp Ou_PixRUp ; выводим пиксел deskrip_offRUp: ; inc [xx] ; увеличиваем только Х+1, У отстается неизменным shl [Py],1 ; модифицируем дескриптор в зависимости от старого mov ax,[e] ; по формуле add ax,[Py] ; E=E+2*Py mov [E],ax ; sar [Py],1 ; востанавливаем Py обратно jmp Ou_PixRUp ; выводим пиксел ret_oRUp: ; loop brezenRUp ; конец цикла jmp exits ; выход из программы Ou_PixRUp: ; Call OutPixelCoo; Call OutPixel ;выводим пиксел
jmp ret_oRUp ; обратно на Брезенхейм BresRUp endp ;==========================================================
BresRUp_N proc near ;вправо вверх mov cx,[i] brezenRUp_N: cmp [E],0 ;если Е jg deskrip_on_RUp_N ; больше или равно 0 то jump jmp deskrip_off_RUp_N ; меньше 0 то jump deskrip_on_RUp_N: ; inc [xx] ; увеличиваем на +1 dec [yy] ; уменьшаем на +1 mov ax,[Px] ; далее модифицируем дескриптор отклонения mov bx,[Py] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) немного модифицируем формулу ; в связи с новым алгоритмом add [E],ax ; jmp Ou_Pix_RUp_N ; выводим пиксел deskrip_off_RUp_N: ; dec [yy] ; тут наоборот y координаты прирост больше shl [Px],1 ; модифицируем дескриптор в зависимости от старого mov ax,[E] ; по формуле add ax,[Px] ; E=E+2*Px mov [E],ax ; sar [Px],1 ; востанавливаем Pх обратно jmp Ou_Pix_RUp_N ; выводим пиксел ret_o_RUp_N: ; loop brezenRUp_N ; конец цикл jmp exits ; выход из программы Ou_Pix_RUp_N: ; call OutPixelCoo; call OutPixel ; выводим пиксел jmp ret_o_RUp_N ; обратно на Брезенхейм BresRUp_N endp ;=============================================
BresRD proc near ; вправо вниз brezen: cmp [E],0 ; если Е jge deskrip_on ; больше или равно 0 то jump jmp deskrip_off ; меньше 0 то jump deskrip_on: ; inc [xx] ; увеличиваем на +1 inc [yy] ; увеличиваем на +1 mov ax,[Py] ; далее модифицируем дескриптор отклонения mov bx,[Px] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) add [E],ax ; jmp Ou_Pix ; выводим пиксел deskrip_off: ; inc [xx] ; увеличиваем только Х+1, У отстается неизменным shl [Py],1 ; модифицируем дескриптор в зависимости от старого mov ax,[e] ; по формуле add ax,[Py] ; E=E+2*Py mov [E],ax ; sar [Py],1 ; востанавливаем Py обратно jmp Ou_Pix ; выводим пиксел ret_o: ; loop brezen ; конец цикл jmp exits ; выход из программы Ou_Pix: ; call OutPixelCoo; call OutPixel ; выводим пиксел jmp ret_o ; обратно на Брезенхейм
BresRD endp ;------------------------------------------------------------ ;---дополнительный алгоритм преобразования линии на Px<Py---- ;------------------------------------------------------------
BresRDN proc near ; вправо вниз при Py>Px mov cx,[i] brezen1: cmp [E],0 ; если Е jg deskrip_on1 ; больше или равно 0 то jump jmp deskrip_off1 ; меньше 0 то jump deskrip_on1: ; inc [xx] ; увеличиваем на +1 inc [yy] ; увеличиваем на +1 mov ax,[Px] ; далее модифицируем дескриптор отклонения mov bx,[Py] ; в зависимости от старого sub ax,bx ; по формуле shl ax,1 ; E=E+2*(Py-Px) немного модифицируем формулу ; в связи с новым алгоритмом add [E],ax ; jmp Ou_Pix1 ; выводим пиксел deskrip_off1: ; inc [yy] ; тут наоборот y координаты прирост больше shl [Px],1 ; модифицируем дескриптор в зависимости от старого mov ax,[E] ; по формуле add ax,[Px] ; E=E+2*Px mov [E],ax ; sar [Px],1 ; востанавливаем Pх обратно jmp Ou_Pix1 ; выводим пиксел ret_o1: ; loop brezen1 ; конец цикла jmp exits ; выход из программы Ou_Pix1: ; call OutPixelCoo ; call OutPixel ; выводим пиксел jmp ret_o1 ; обратно на Брезенхейм
BresRDN endp
;-------------------------------------------------------- OutPixel proc near ; call mov_w0 mov ax,1280 ; 1280 количество точек по X mul y ; умножаем на У jc corect ; если переполнение то корректировать ;============================================ shl x,2 ; сдвиг влево корректир. т.к. 4 байта на точку add ax,x ; конечный результат сумма adc dx,0 jc corect1 ; если переполнение то на корректировку cmp dx,1 je corect1 mov si,ax ; теперь адресуем видео память ; на полученый результат out: mov ebx,color ; цвет mov es:[si],ebx ; ставим точку shr x,2 ; так как мы изменили Х то возвращаем его назад jmp ex_t ; выходим corect:
shl x,2 ; сдвиг на 2 умножаем на 4 add ax,x ; в 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
exits: mov ah,0 ;ждем клавишу int 16h ;Interrupt
mov ah,4ch ;| mov al,0 ;| -EXIT to DOS; int 21h ;|
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
invert proc near mov bx,[Px] not bx add bx,01h mov [Px],bx ret invert endp
invertPy proc near mov ax,[Py] not ax add ax,01h mov [Py],ax ret invertPy endp ;-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-= DDLineYC proc near mov ax,[Py] ; то длинна линии будет получаться из mov [i],ax ; Py mov ax,[Px] ; Вычисляем дескриптор отклонения по shl ax,1 ; формуле sub ax,[Py] ; E=2*Px-Py mov [E],ax ; ret DDLineYC endp ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
DDLineXC proc near mov ax,[Px] ; тут именно в этих местах может быть небольшой BUG ; на правильность отклонения линии не надо путать формулу ; первоначального дескриптора отклонения линии mov [i],ax ; mov ax,[Py] ; Вычислеам дескриптор отклонения по shl ax,1 ; формуле sub ax,[Px] ; E=2*Py-Px mov [E],ax ; mov cx,[i] ; количество пикселей в линии ret DDLineXC endp
OutPixelCoo proc near mov ax,[xx] ; модифицируем координаты mov [x],ax ; для вывода на экран mov bx,[yy] ; mov [y],bx ; ret OutPixelCoo endp
END START
--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/
ню вот вроде додедал:D -=-=-=- кто ни-будь станте БетаТестером если не лень буду благодарен -=-=-= :D :D -=-=-=-=- Эх никто и ничего и не сказал вот оглядываю свои творения когдато сидел парился с этими окнами ностальгия блин -=-=-=-=-=-=-=-=-
--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/