Red de conocimiento informático - Conocimiento informático - Diseñar un círculo con punto fijo de inicio y parada de movimiento (lenguaje ensamblador)

Diseñar un círculo con punto fijo de inicio y parada de movimiento (lenguaje ensamblador)

El siguiente es un programa para un círculo:

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 )

EXTREMOS DE PILAS

SEGMENTO DE CÓDIGOS

ASUMAR CS: CÓDIGOS, DS: DATAS, SS: PILAS

INICIO:

MOV AX, DATAS

MOV DS, AX

MOV AX, 0A000H

MOV ES, AX

MOV AX , 0012H

INT 10H; Establecer modo de gráficos 640*480*16

MOV AL, 2

CALL SET_WRITE_MODE Establecer modo de escritura en Modo de escritura 2

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,

MOV AX, WORD PTR [RADIUS]

PUSH AX

LLAMADA CÍRCULO

MOV AH, 01H

INT 21H

MOV AX, 4C00H

INT 21H

MOV AH, 4CH

INT 21H

;****************** ***** *************************

Función de punto de dibujo en modo 640*480*16

;

; **********************************************

PIXEL PROC

PUSH BP

PUSH BX

PUSH CX

PUSH DS

MOV BP,SP

p>

MOV AX, 80

MOV BX, PALABRA PTR[BP 12];=Y

MUL BX; (DX:

MOV BX, AX;

MOV AX, PALABRA PTR[BP 14]; AXlt; --X

MOV CL, 8; |

DIV CL ;ALt;=Cociente(X/8),AHlt;=Remanente(X8) SP-gt;

MOV CL,AH ;CLlt;= AH | DS |lt;-BP

MOV AH, 0; | CX |lt;-BP

AÑADIR BX, AX(OFFSET)lt; /8 | caja |lt; -BP 4

MOV AL, 80H

MOV DX, 3CEH; >

SALIDA DX, AL; |

MOV DX, estructura de pila 3CFH

POP AX

SALIDA DX, AL

MOV AL, ES: [

MOV AX, WORD PTR[BP 10];=COLOR

MOV BYTE PTR ES: MOV ES: [BX], AL

POP DS

POP CX

POP BX

POP BP

RET 6

PÍXEL ENDP

;************************************< / p>

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

BORRAR 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 PALABRA PTR[BP-2], 0; BP-4], AX; = R SP-gt | =RADIO*(-2) | Y |lt;-BP-4

AÑADIR AX, 3;=3-2*RADIO

MOV PALABRA PTR[BP- 6], AX; P=3-2*RADIO | BP |lt;-BP

C0: MOV AX, PALABRA PTR[BP-2 ] ;AXlt;=X |lt;-BP 2

CMP AX, PALABRA PTR[BP-4] ;IF >

JL C00; | YC |.lt;-BP 6

JMP C3; estructura

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, PALABRA PTR[BP-6] ​​​​

MOV PALABRA PTR[BP-6], AX

JMP C2

C1: MOV AX, WORD 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 PTR DE PALABRA [BP-6], AX

DEC PTR DE PALABRA[BP-4]

C2: INC PTR DE PALABRA[BP-2]

JMP C0

p>

C3: MOV AX, WORD 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, PALABRA PTR[BP 10];

AÑADIR AX, PALABRA PTR[BP 6];

MOV WORD PTR[BP-2], AX; XC X

MOV AX, PALABRA PTR[BP 10]

SUB AX, PALABRA PTR[BP 6]

MOV WORD PTR[BP-4] ], XC-X

MOV AX, PALABRA PTR [BP 10]

AÑADIR PALABRA PTR

< | p>MOV PALABRA PTR[BP -6], XC Y |

MOV PALABRA PTR[BP 10];

MOV PALABRA PTR[BP-8], AX; AX, PALABRA PTR[BP 8] |lt -BP-12

AÑADIR PALABRA PTR; [BP 6];

X |lt;-BP-10

MOV PALABRA PTR[BP-10], AX YC X |XC-Y |lt;-BP-8

MOV AX, PALABRA; PTR[BP 8];

SUB AX, PALABRA PTR[BP 8]; YC Y |lt; BP 8] ; | BP 4] ;

MOV PALABRA PTR[BP-16],AX;

PUSH PALABRA[BP-14]; 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 PALABRA PTR[BP-6] ​​​​

PUSH PALABRA PTR[BP-12]

PUSH COLOR

LLAMADA PIXEL

PULSAR PALABRA PTR[BP-8]

PULSAR PALABRA PTR[BP-12]

PULSAR COLOR

LLAMADA PIXEL

MOV SP, BP

POP BP

RET 8

CIRCLE_POINT ENDP

;****************************** ***

;Función para configurar el modo de escritura

;****************************** ******

SET_ WRITE_MODE PROC CERCA

PUSH

AX

MOV DX, 3CEH

MOV AL, 5

SALIDA DX, AL

MOV DX, 3CFH

POP AX

SALIDA DX, AL

MOV DX, 3CEH

MOV AL, 8

SALIDA DX, AL

p>

MOV DX, 3CFH

MOV AL, 0FFH

SALIDA DX, AL

RET

SET_WRITE_MODE ENDP

p>

CÓDIGOS FINALES

Para lograr este tipo de movimiento circular, simplemente defina algunos puntos centrales con un programa de bucle y luego use un programa de retardo.