sEnd EQU 0 sLine EQU 1 sVLine EQU 2 sElipse EQU 3 sRectangle EQU 4 sFill EQU 5 ;secuencias: ;00 - [end ] ;01 - [line ] x0 y0 x1 y1 ;02 - [vline ] y0 y1 x ;03 - [elipse ] xc yc a b ;04 - [rectangle] x0 y0 x1 y1 ;05 - [fill ] color_index x0 y0 ;>=06 - [ end] secuencia PROC ; esi -> secuencia, edi -> textura @cmdLoop: lodsb ;ins xor ecx,ecx xor ebx,ebx @line: cmp al,1 jne @vline ;line PROC ;AL=X0, AH=Y0, BL=X1, BH=Y1, ECX=Color RGB lodsb ;x0 mov dl,al lodsb ;y0 mov ah,al lodsb ;x1 mov bl,al lodsb ;y1 mov bh,al mov al,dl call line jmp @cmdLoop @vline: cmp al,2 ;vline PROC ;BL=X , BH=Y0, CH=Y1, EAX=Color RGB jne @elipse lodsb ;y0 mov bh,al lodsb ;y1 mov ch,al lodsb ;x mov bl,al xor eax,eax call vline jmp @cmdLoop @elipse: cmp al,3 ;elipse PROC ;bl=XC, bh=YC, ah=A, al=B, ecx=Color jne @rectangle lodsb ;xc mov bl,al lodsb ;yc mov bh,al lodsb ;a mov ah,al lodsb ;b call elipse jmp @cmdLoop @rectangle: ;rectangle PROC ;bl=X0, bh=y0, cl=X1, ch=Y1 EAX=color cmp al,4 jne @fill lodsb ;x0 mov bl,al lodsb ;y0 mov bh,al lodsb ;x1 mov cl,al lodsb ;y1 mov ch,al mov eax,00ffffffh call rectangle jmp @cmdLoop @fill: cmp al,5 ;fill PROC ;bl=x bh=y ecx=color edx=fondo jne @endSec lodsb movzx ebx,al lea ebx,[colortab+ebx*4] mov eax,[ebx] mov ecx,eax ;color en ECX mov edx,00ffffffh lodsb ;x0 mov bl,al lodsb ;y0 mov bh,al call fill jmp @cmdLoop @endSec: ret secuencia ENDP ;void line(int x0, int y0, int x1, int y1, int c) { ; line PROC ;AL=X0, AH=Y0, BL=X1, BH=Y1, NEGRA ; //dibuja una linea ; //siempre debe ser x0Y0 shl ebx,2 ;EBX*4 <- posicion inicial xor eax,eax @LoopVline: mov [ebx+edi],eax add ebx,256*4 dec edx jnz @LoopVline ret vline ENDP ;} ;void elipse(int xc, int yc, int a, int b,int c) { elipse PROC ;bl=XC, bh=YC, ah=A, al=B, NEGRA ; //dibuja una elipse (sin rotacion, semiejes y listo) ; //xc,yc centro ; //a semieje x ; //b semieje y ; //c color ; register float i; ; register int temp; tmp_a EQU tmpx1 tmp_b EQU tmpx0 tmp_prop EQU tmpy0 fldz movzx edx,ah mov small tmp_a,edx fisub small tmp_a ;st(0)=-a movzx edx,al mov small tmp_b,edx fild small tmp_b ;st(0)=b/a fidiv small tmp_a fstp small tmp_prop ;tmp_prop=st(0) pop xor eax,eax @LoopElipse: ; for (i=-a;i