Red de conocimiento informático - Conocimiento sistemático - ¡El lenguaje ensamblador realiza la programación de transformación gráfica!

¡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:

MOV AX,BKCOLOR

CALL CLEAR ;Borrar el fondo a blanco

MOV AX,WORD PTR [X]

PUSH AX

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>

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>

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

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

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

p>

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