Punto en la pantalla (Versión optimizada)

Aplicación que utiliza gráficos. Define un punto en el centro de la pantalla. Permite desplazarlo mediante las teclas, 8,2,4 y 6.

Búsqueda de ejemplos en Ensamblador
;Autor Victor De la Rocha
;URL http://www.mis-algoritmos.com

READKEY MACRO           ;Equivalente de ReadKey en otros lenguajes
                MOV AH,07H      ;STDIN, direct input, no echo (Func 07/int 21h)
                INT 21h         ;Interrupt 21h DOS Funcions
        ENDM

GRAPH MACRO                     ;Inicia modo gráfico
                MOV AH,00H      ;Set video mode (Func 00/int 10h)
                MOV AL,12H      ;12h = 80x30 8x16 640x480 16/256k A000 VGA, ATI, VIP
                INT 10H         ;Interrupt 10h Video functions
        ENDM
       
FONDO MACRO COLOR       ;Define la paleta de colores
                MOV AH,0BH      ;Set colro palette (Func 0B/Int 10h)
                MOV BH,0H       ;
                MOV BL,COLOR;color 0-15
                INT 10H         ;Interrupt 10h Video functions
        ENDM
       
DOS MACRO                       ;Inicia/Regresa a modo MSDOS
                MOV AH,00H      ;Set video mode (Func 00/int 10h)
                MOV AL,03H      ;03h = 80x25 8x8 16 4 B800 CGA
                INT 10H         ;Interrupt 10h Video functions
        ENDM

PUNTO MACRO X,Y,COLOR ;Dibuja un punto en la pantalla (En modo gráfico)
                MOV AH,0CH              ;Write dos on screen (Func 0C/Int 10h)
                MOV AL,COLOR    ;color 0-15
                MOV BH,0                ;pagina (0 por default en esta aplicación)
                MOV CX,X                ;Columna
                MOV DX,Y                ;Fila
                INT 10H         ;Interrupt 10h Video functions
        ENDM

.MODEL SMALL
.STACK
.DATA
        X DW 320                ;Centro de la pantalla en X (Horizontalmente)
        Y DW 240                ;Centro de la pantalla en Y (Verticalmente)
.CODE
.STARTUP

        GRAPH                   ;Iniciamos modo gráfico

        OTRO:                  
        PUNTO X,Y,2             ;Dibujamos punto (La primera iteración es el centro de la pantalla)
        READKEY                 ;Esperamos se *apachurre* una tecla :P jeje
       
        CMP AL,56               ;Tecla 8 sube
                JE UP           ;Etiqueta que incrementa Y = Y + 1
        CMP AL,50               ;Tecla 2 baja
                JE DOWN         ;Etiqueta que decrementa Y = Y - 1
        CMP AL,54               ;Tecla 6 derecha
                JE RIGHT        ;Etiqueta que incrementa X = X + 1
        CMP AL,52               ;Tecla 4 izquierda
                JE LEFT         ;Etiqueta que decrementa X = X - 1
        CMP AL,27               ;ESC termina el programa
                JE SALIR        ;Etiqueta que va a donde se regresa a modo MSDOS, y termina el programa
                        JnE OTRO        ;Otra iteración o ciclo (Leemos otra tecla para mover punto)

        UP:                             ;Subimos punto
                PUNTO X,Y,0     ;Punto de color del fondo para ocultar posición anterior
                DEC Y           ;Decrementamos Y
                JMP OTRO        ;Etiqueta donde dibuja otro punto (con los nuevos valores)

        DOWN:                   ;Bajamos punto
                PUNTO X,Y,0     ;Punto de color del fondo para ocultar posición anterior
                INC Y           ;Incrementamos Y
                JMP OTRO        ;Etiqueta donde dibuja otro punto (con los nuevos valores)

        RIGHT:                  ;Desplazamos a la derecha el punto
                PUNTO X,Y,0     ;Punto de color del fondo para ocultar posición anterior
                INC X           ;Incrementamos X
                JMP OTRO        ;Etiqueta donde dibuja otro punto (con los nuevos valores)

        LEFT:                   ;Punto de color del fondo para ocultar posición anterior
                PUNTO X,Y,0 ;Desplazamos a la izquierda el punto
                DEC X           ;Decrementamos X
                JMP OTRO        ;Etiqueta donde dibuja otro punto (con los nuevos valores)

        SALIR:                  ;Etiqueta que representa el final de la aplicación.
        DOS                             ;Regresamos al modo ambiente MSDOS
                                        ;Termina ejecución de aplicación y devuelve el control al sistema operativo

.EXIT                          
END