Está en la página 1de 4

RECTANGULO MACRO XSUP,YSUP,A,L,COLOR

LOCAL INI,INI1,SEG1
PUSH AX
PUSH BX
PUSH CX
PUSH DX

MOV BX,A
ADD BX,XSUP
MOV AX,L
ADD AX,YSUP
MOV CX,YSUP
INI: MOV DX,XSUP
INI1:PIXEL COLOR
INC DX
CMP DX,BX
JNE INI1
SEG1:INC CX
CMP CX,AX
JNE INI
POP DX
POP CX
POP BX
POP AX
ENDM

CIRCULO MACRO RADIO,A,B,COLOR


LOCAL INI1,INI,SEGUIR1,SEGUIR2,SEGUIR,FIN
PUSH AX
PUSH BX
PUSH CX
PUSH DX

MOV AX,RADIO
MUL AX
MOV R2,AX ; R2 = RADIO AL CUADRADO
MOV CX,B ; CX = ORDENADA DEL CENTRO
INI1:
MOV DX,A ; DX = ABCISA DEL CENTRO
MOV BX,0 ; CONSTANTE INCREMENTAL (INICIA EN 0)
INI:

PUSH DX ; SALVAMOS VALORES DE REGISTROS


PUSH BX ; AL SALVAR BX, ESTOY SALVANDO K = DX-A
PUSH AX
PUSH CX
MOV AX,BX ; MUEVO EL VALOR DE BX EN AX, PARA REALIZAR LA MULTIPLICACION
MUL AX ; MULTIPLICO AX CON AX
MOV BX,AX ; EN EFECTO, BX ES IGUAL A AX^2 = BX^2
SUB CX,B ; CX SERIA Y-B
MOV CONFE,CX ; SALVAMOS LA DIFERENCIA DE CX CON B (Y-B)
MOV AX,CX ; MUEVO EL VALOR DE CX EN AX, PARA REALIZAR LA MULTIPLICACION
MUL AX ; MULTIPLICO AX CON AX
MOV CX,AX ; EN EFECTO, CX = (Y-B)^2
ADD BX,CX ; K^2+(Y-B)^2 ; OJO (K=DX-A)
CMP BX,R2 ; COMPARO K^2+(Y-B)^2 CON EL RADIO AL CUADRADO
POP CX ; REGRESO VALORES EN ORDEN INVERSO
POP AX
POP BX
POP DX
JG SEGUIR ; SI K^2+(Y-B)^2 ES MAYOR QUE R^2 , SIGNIFICA QUE:
; EL PUNTO ESTA FUERA DE LA FRONTERA
; SINO (MENOR O IGUAL) ESTARA EN O DENTRO DE LA FRONTERA
PUSH DX ; SALVO NUEVAMENTE DX *********************************
SUB DX,BX ; A DX LE RESTO K = BX = DX-A
PIXEL COLOR ; PIXEL EN LA POSICION (CX,DX-K)
MOV AX,CONFE ;

ADD AX,CONFE ; AX = AX+2(CONFE)


PUSH CX ; SALVAMOS CX
SUB CX,AX ;
PIXEL COLOR ; GRAFICO PIXEL EN POSICION (DX,CX-2CONFE)
POP CX ; RESTAURAMOS VALORES
POP DX

SEGUIR1:

PUSH DX ; SALVO NUEVAMENTE DX *********************************


ADD DX,BX ; SIMILAR AL ANTERIOR PERO LE ANADIMOS K

PIXEL COLOR ;
MOV AX,CONFE ;

ADD AX,CONFE ;
PUSH CX ;
SUB CX,AX
PIXEL COLOR ; GRAFICO PIXEL EN POSICION CX-2CONFE
POP CX
POP DX

SEGUIR2:

INC BX ; INCREMENTAMOS BX Y SALTAMOS A INI


JMP INI
SEGUIR: ; SEGUIR IMPLICA ANALISISAR EN LA SIGUIENTE COLUMNA
INC CX ; INCREMENTAMOS VALOR DE COLUMNA
MOV BX,B
ADD BX,RADIO
CMP CX,BX ; COMPARAMOS CX CON (RADIO+B)
JG FIN ; SI ES MAYOR SALTAMOS A X1 (CONTINUAMOS CON LAS SGTES
INSTRUCCIONES)
JMP INI1 ; SI ES MENOR O IGUAL, REGRESAMOS A INT1
FIN: POP DX
POP CX
POP BX
POP AX
ENDM

PIXEL MACRO COLOR


PUSH AX
PUSH BX

MOV AL,COLOR
MOV BH,00
MOV AH,0CH
INT 10H

POP BX
POP AX
ENDM

CUADRO MACRO FIL,COL,LADO,COLOR


LOCAL Q,A,CONT
PUSH AX
PUSH BX
;
;
MOV AX,FIL
MOV BX,COL
ADD AX,LADO
ADD BX,LADO

MOV CX,COL ; COLUMNA


Q:MOV DX,FIL ; FILA
A: PIXEL COLOR

CMP DX,AX
JE CONT
INC DX
JMP A
CONT:
INC CX

CMP CX,BX
JNE Q

POP AX
ENDM

DATOS SEGMENT
R2 DW ?
A DW ? ; ORIGEN CIRCUNFERENCIA
B DW ?
CONFE DW ?
RADIO DW ? ; RADIO DE LA CIRCUNFERENCIA

DATOS ENDS
CODIGO SEGMENT
ASSUME DS:DATOS, CS:CODIGO
INICIO:
MOV AX,DATOS
MOV DS,AX

MOV AX,12H
INT 10H
CIRCULO 50,120,120,1001B

CIRCULO 10,100,105,1111B
CIRCULO 10,100,140,1111B

CIRCULO 05,100,105,0000B
CIRCULO 05,100,140,0000B

RECTANGULO 120,70,50,100,1001B; es la I

MOV AH,07H
INT 21H

MOV AX,0H
INT 10H
MOV AH,4CH
INT 21H
CODIGO ENDS
END INICIO

También podría gustarte