Diseñar un círculo con punto fijo de inicio y parada de movimiento (lenguaje ensamblador)
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
************ ************************* p>
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 p>
CIRCLE ENDP
CIRCLE_POINT PROC NEAR
PUSH BP
MOV BP, SP
SUB SP, 16 p>
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] p>
PUSH COLOR
LLAMADA PIXEL
PUSH WORD PTR[BP-4]
PUSH WORD PTR[BP-16]
PUSH COLOR
LLAMADA PIXEL
PUSH WORD PTR[BP-6] p>
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>
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.