¡El lenguaje ensamblador realiza la programación de transformación gráfica!
SEGMENTO DE DATOS
COLOR DW 02
BKCOLOR DW 15
X DW 280,
Y DW 240 ,
RADIUS DW 150
EXTREMOS DE DATOS
SEGMENTO DE PILAS
DW 100 DUP(0)
PILAS FINALIZA
SEGMENTO DE CÓDIGOS
ASUME CS:CODES,DS:DATAS,SS:STACKS
INICIO:
MOV AX,DATAS
MOV DS,AX
MOV AX,0A000H
MOV ES,AX
MOV AX,0012H
INT 10H ;Establece el modo de gráficos 640*480*16
MOV AL,2
CALL SET_WRITE_MODE ;Establece el modo de escritura en modo de escritura 2
nuevamente: p>
MOV AX,BKCOLOR
CALL CLEAR ;Borrar el fondo a blanco
MOV AX,WORD PTR [X]
PUSH AX / p>
MOV AX,WORD PTR [Y]
PUSH AX
MOV AX,WORD PTR [RADIO]
PUSH AX
CALL CIRCLE
MOV AH,0
INT 16H
cmp al,0dh ; presione Enter para salir
jz exit
cmp ah,2eh;Tecla 'C o c'
jnz skip
inc color
skip:
jmp otra vez
salir:
mov ah,4ch
int 21h
salir:
MOV HACHA,4C00H
INT 21H
;****************************** *************
;Función de dibujo de puntos en modo 640*480*16
;*********** ****** *******************************
PROCESO DE PÍXELES
PUSH BP
PUSH BX
PUSH CX
PUSH DS
MOV BP,SP
MOV AX,80
PUSH DS
p>
MOV BX,WORD PTR[BP+12] ;BX<=Y
MUL BX ; (DX:AX)<=80*Y
MOV BX, AX
MOV AX,WORD PTR[BP+14] ;AX<--X
MOV CL,8 ; |
DIV CL ;AL <=Cociente (X/8),AH<=Remanente (X%8) SP-> | MOV CL,AH ;CL<=AH | DS |<-BP
MOV AH,0 |<-BP+2
AÑADIR BX,AX ;BX(DESPLAZAMIENTO) )<
=80*Y+X/8 | BX |<-BP+4
MOV AL,80H ;<-BP+6
SHR AL,CL ;AL( MÁSCARA)<=(80H>>CL) |Remitente|<-BP+8
PUSH AX ; |<-BP+10
MOV DX,3CEH ; Y |<-BP+12
MOV AL,8 | X |<-BP+14
SALIDA
MOV DX ; ,3CFH; estructura de pila PIXEL
POP AX
OUT DX,AL
MOV AL,ES:[BX]
MOV AX ,WORD PTR[BP+10] ;AX<=COLOR
MOV BYTE PTR ES:[BX],AL
POP DS
POP CX p> p>
POP BX
POP BP
RET 6
PIXEL ENDP
;****** ** **********************
;Función borrar pantalla
;******* ***********************
BORRAR PROC CERCA
MOV BX,0
CLR1: MOV ES:[BX],AL
INC BX
CMP BX,9600H;80*480
JNB CLR2
JMP CLR1
CLR2: RET
CLEAR ENDP
;****************** *********************
;Función de dibujo de círculos implementada por el algoritmo de Bresenham
;****** *********************************
CÍRCULO PROC CERCA
PUSH BP
MOV BP,SP
SUB SP,6
MOV WORD PTR[BP-2],0 ;X<=0 | p> p>
MOV PALABRA PTR[BP+4]
MOV PALABRA PTR[BP-4],AX ;Y<=R SP-> | >
MOV AX,0FFFEH ; | P |<-BP-6
IMUL WORD PTR[BP+4] ;AX<=RADIUS*(-2) Y |<-BP-4 p>
AÑADIR AX,3 ;AX<=3-2*RADIUS |<-BP
C0: MOV AX,WORD PTR[BP-2] ;AX< =X |Dirección del remitente|<-BP+2
CMP AX, WORD PTR[BP-4] ;IF X JL C00 ; | XC |<-BP+8 C0 0: PUSH WORD PTR[BP+8]; estructura de pila CIRCLE PUSH WORD PTR[BP+6] PUSH WORD PTR[BP-2] PUSH WORD PTR[BP-4] LLAMADA CIRCLE_POINT CMP WORD PTR[BP-6],0 JGE C1 MOV AX,4 MUL WORD PTR[BP-2] AÑADIR AX,6 AÑADIR AX,WORD PTR[BP-6] MOV PALABRA PTR[BP-6],AX JMP C2 C1: MOV AX,PALABRA PTR[BP-2] SUB AX,WORD PTR[BP-4] MOV BX,4 IMUL BX AÑADIR AX,10 AÑADIR AX, PALABRA PTR[BP-6] MOV PALABRA PTR[BP-6],AX DEC PALABRA PTR[BP-4] C2: INC PALABRA PTR[BP-2] JMP C0 C3: MOV AX,PALABRA PTR[BP-2] CMP AX, WORD PTR[BP -4] JNE C4 PUSH WORD PTR[BP+8] PUSH WORD PTR[BP+6] PUSH WORD PTR[BP-2] PUSH WORD PTR[BP-4] LLAMADA CIRCLE_POINT C4: MOV SP,BP p> POP BP RET 6 CIRCLE ENDP CIRCLE_POINT PROC NEAR PUSH BP MOV BP, SP SUB SP,16 MOV AX,WORD PTR[BP+10] AÑADIR AX,WORD PTR[BP+6] ] ; p> MOV PALABRA PTR[BP-2],AX ;XC+X MOV AX,PALABRA PTR[BP+10] SUB AX,PALABRA PTR[ BP+6] MOV PALABRA PTR[BP-4],AX ;XC-X MOV AX,PALABRA PTR[BP+ 10] ; | AÑADIR PALABRA PTR[BP+4] PALABRA MOV[BP-6],XC+Y | p> MOV HACHA,PALABRA PTR[BP+10] ;<-BP-16 < | /p> MOV PALABRA PTR [BP-8],AX ;XC-Y |<-BP-14 MOV PALABRA PTR[BP+8] ; p> AÑADIR HACHA, PALABRA PTR[BP+6] ; YC+X |<-BP-10 MOV PALABRA PTR[BP-10],AX ;YC+X | XC-Y |<-BP-8 MOV AX,PALABRA PTR[BP+8] ; BP+6] | XC-X |<-BP-4 MOV PALABRA PTR[BP-12],AX ; <-BP AÑADIR AX,WORD PTR[BP+4] |Dirección de retorno|<-BP+2 MOV WORD PTR[BP-14],AX ;YC+ Y | Y |<-BP+4 MOV AX, PALABRA PTR[BP+8] ; |<-BP+8 MOV PALABRA PTR[BP-16],AX ;YC-Y XC |<-BP+10 PUSH PALABRA PTR[BP-2] ; | | PUSH WORD PTR[BP-14] ; CIRCLE_POINT estructura de pila PUSH COLOR LLAMADA PIXEL PUSH WORD PTR [BP-4] PUSH WORD PTR[BP-14] PUSH COLOR LLAMADA PIXEL PUSH WORD PTR[BP -2] PUSH WORD PTR[BP-16] PUSH COLOR LLAMADA PIXEL PUSH WORD PTR[BP-4 ] PUSH WORD PTR[BP-16] PUSH COLOR LLAMADA PIXEL PUSH WORD PTR[BP-6] PUSH WORD PTR[BP-10] PUSH COLOR LLAMADA PIXEL PUSH WORD PTR[BP-8] PUSH WORD PTR[BP-10] PUSH COLOR LLAMADA PIXEL PUSH WORD PTR[BP-6] PUSH WORD PTR[BP-12] PUSH COLOR LLAMADA PIXEL PUSH WORD PTR[BP-8] PUSH WORD PTR[BP-12] PUSH COLOR LLAMADA PIXEL LLAMADA PIXEL PUSH WORD PTR[ BP-12] p> MOV SP,BP POP BP RET 8 CIRCLE_POINT ENDP ;** **** **************************** ;Función para configurar el modo de escritura ;*** ******************************* SET_WRITE_MODE PROC NEAR PUSH AX MOV DX,3CEH MOV AL,5 OUT DX,AL MOV DX ,3CFH p> POP AX SALIDA DX,AL MOV DX,3CEH MOV AL,8 SALIDA DX, AL MOV DX,3CFH MOV AL,0FFH OUT DX,AL RET SET_WRITE_MODE ENDP CÓDIGOS FINALES fin inicio