• Domingo 22 de Diciembre de 2024, 18:41

Autor Tema:  Manipulacion De Imagenes!"pcx"  (Leído 1349 veces)

Newbi3

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Manipulacion De Imagenes!"pcx"
« en: Miércoles 12 de Abril de 2006, 16:07 »
0
ESTE ES EL CODIGO EL CUAL HACE Q LA IMAGEN CORRA DE UN LADO PERO SI YO KIERO Q SE MUEVE PARA EL OTRO LADO XIALES N ENCUENTRO EL CORRIMIENTO O Q FUNCION SE LE MUEVE A  "ax"  TAMBIEN UTILIZA MACROS EL CUAL SE ENCUENTRA AL FINAL DE ESTE...

la imagen se mueve para estelado-------------->>>>>>>
yo quiero q se mueva para este otro <<<<---------


; ************************************************************
; MANIPULACION DE IMAGENES --> MACROS
; ************************************************************

; Definici¢n del tipo de estructura del archivo PCX
  TEncabezadoPCX STRUC
                      Manufacturer     DB ?
                      Version01        DB ?
                      Encoding         DB ?
                      BitsPerPixel     DB ?
                      XMin             DW ?
                      YMin             DW ?
                      XMax             DW ?
                      YMax             DW ?
                      HRes             DW ?
                      VRes             DW ?
                      Palette          DB 48 DUP ( ? )
                      Reserved         DB ?
                      ColourPlanes     DB ?
                      BytesPerLine     DW ?
                      PaletteType      DW ?
                      Filler           DB 58 DUP ( ? )

  TEncabezadoPCX ENDS


;
; ******* Secci¢n de definici¢n de macros *********
;
  INCLUDE macarch.asm
;
; ******************** Cuerpo del programa ************************
;

  .MODEL SMALL

; Definici¢n del segmento de la pila
  .STACK

; Definici¢n del segmento de datos
  .DATA
      ; Definici¢n de la paleta de colores
        Paleta DB 768 Dup (?)

      ; Variable para emular un ciclo (200)
        Cont DW ?

      ; Variable de suma para la formula de columnas
        Sum DW ?

      ; Definicion de la paleta temporal
        PaletaTemporal DB 768 DUP (0)

      ; Definici¢n de los datos del encabezado
        EncabezadoPCX TEncabezadoPCX ?

      ; Definicion de la bandera que controla el ciclo externo
        Bandera DB, 0
       
      ; Definici¢n de los datos asociados con la imagen
        Alto  DW ?
        Ancho DW ?
        Bytes DW ?
     
      ; Definici¢n de la variable asociada con el archivo
        ManejadorArchivo DW 0

      ; Definici¢n de la variable asociada con el buffer de lectura
        Buffer DB ?

      ; Definici¢n de la variable que contiene los bytes leidos en
      ; una operaci¢n de lectura
        BytesLeidos DW ?

      ; Definici¢n de la constante con el nombre del archivo
        NombreArchivo DB 'rhwin.PCX', 0

      ; Definici¢n de la constante para el modo de acceso al archivo
        ModoAcceso    Db 0            ; Acceso s¢lo de lectura

      ; Definici¢n de la variable que indica el n£mero de bits por pixel
        Bits Db ?

      ; Definici¢n de la variable que contiene las repeticiones de un patr¢n
        Repeticiones DB ?

      ; Definici¢n del mensaje de error con respecto al byte control de la paleta
        ErrorByteControl DB 'El primer byte de la paleta no es el de control', 0ah, 0dH, '$'

      ; Definici¢n del mensaje de error de cerrado del archivo
        MensajeErrorCerrado DB 'Existi¢ un error al cerrar el archivo', 0aH, 0dh, '$'

      ; Definici¢n del mensaje del error de lectura
        MensajeErrorLectura DB 'Existe un error en la operaci¢n de lectura', 0AH, 0DH, '$'
       
      ; Definici¢n del mensaje del error de apertura
        MensajeErrorApertura DB 'Existe un error en la operaci¢n de apertura', 0AH, 0DH, '$'

      ; Definici¢n del mensaje para el posicionamiento
        ErrorPosicionamiento DB 'Existi¢ un error de posicionamiento en el archivo', 0AH, 0DH, '$'
       
      ; Definici¢n de mensajes respecto al archivo PCX
        NoEsArchivoPCX           DB 'Este no es un archivo PCX', 0AH, 0DH, '$'
        NoEsVersion              DB 'La versi¢n no corresponde a un archivo para 256 colores', 0AH, 0DH, '$'
        BitsPerPixelIncorrectos  DB 'No existen los bits por pixel adecuados', 0AH, 0DH, '$'

      ; Definici¢n del salto de l¡nea
        SaltaLinea DB 0DH, 0AH, '$'

      ; Definici¢n del mensaje del alto
        MensajeAlto DB 'El alto es de $'

; Definici¢n del segmento de c¢digo
  .CODE
       
;
; ************ Definici¢n del programa principal ****************
;

  ProgramaPrincipal PROC NEAR
     ; Asignaci¢n de los valores iniciales a SS, SP y DS
       .STARTUP

     ; Apertura del archivo PCX
       MAbreArchivo <OFFSET NombreArchivo>, ModoAcceso, <OFFSET MensajeErrorApertura>, ManejadorArchivo

     ; Lectura del encabezado
       MLeeArchivo ManejadorArchivo, 128, <OFFSET EncabezadoPCX>, <OFFSET MensajeErrorLectura>, BytesLeidos

     ; Validaci¢n del fabricante en el encabezado
       CMP EncabezadoPCX.Manufacturer, 0AH
       JE ValidaVersion

     ; Impresi¢n del mensaje de error
       MOV DX, OFFSET NoEsArchivoPCX
       MOV AH, 09
       INT 21H

     ; Detenci¢n de la ejecuci¢n del programa
       .EXIT

     ; Validaci¢n de la versi¢n del paintbrush
       ValidaVersion:
       CMP EncabezadoPCX.Version01, 5
       JE CalculaBitsPerPixel

          ; Impresi¢n del mensaje de error
            MOV DX, Offset NoEsVersion
            MOV AH, 09
            INT 21H

          ; Detenci¢n de la ejecuci¢n del programa
            .EXIT

     ; C lculo de los bits por pixel
       CalculaBitsPerPixel:
       CMP EncabezadoPCX.BitsPerPixel, 1
           JNE AsignaBitsPerPixel
           MOV AL, EncabezadoPCX.ColourPlanes
           MOV Bits, AL
           JMP SHORT ValidaBitsPorPixel
       AsignaBitsPerPixel:
           MOV AL, EncabezadoPCX.BitsPerPixel
           MOV Bits, AL

     ; Validaci¢n de los bits por pixel
       ValidaBitsPorPixel:
       CMP Bits, 8
       JE CalculoAltoImagen
          ; Impresi¢n del mensaje de error
            MOV DX, OFFSET BitsPerPixelIncorrectos
            MOV AH, 09
            INT 21H

          ; Detenci¢n de la ejecuci¢n del programa
            .EXIT
       
     ; C lculo del alto de la imagen
       CalculoAltoImagen:
       MOV AX, EncabezadoPCX.YMax
       SUB AX, EncabezadoPCX.YMin
       ADD AX, 1
       MOV Alto, AX


     ; C lculo del valor de los bytes por l¡nea
       MOV AX, EncabezadoPCX.BytesPerLine
       MOV Bytes, AX

     ; ***** Localizaci¢n de la paleta de colores ******
       ; Posicionamiento del apuntador al final del archivo
         LocalizacionPaleta:
         MOV CX, 0
         MOV DX, 0                  ; Distancia a mover en bytes
         MOV AL, 02                 ; A partir del final del archivo
         MOV BX, ManejadorArchivo
         MOV AH, 42H                ; Funci¢n de posicionamiento
         INT 21H

       ; Validaci¢n del error de posicionamiento
         JNC GeneraDesplazamiento
         MOV BL, AL
         MOV DX, Offset ErrorPosicionamiento
         MOV AH, 09
         INT 21H

       ; Impresi¢n del n£mero del error
         MOV DL, BL
         ADD DL, 30H
         MOV AH, 02
         INT 21H

       ; Detenci¢n de la ejecuci¢n del programa
         .EXIT

       ; Generaci¢n de la posici¢n del inicio de la etiqueta
         GeneraDesplazamiento:
         SUB AX, 769
         SBB DX, 0

       ; Posicionamiento al inicio de la paleta de colores
         MOV CX, DX
         MOV DX, AX
         MOV AL, 00                ; A partir del inicio del archivo
         MOV BX, ManejadorArchivo
         MOV AH, 42H
         INT 21H

       ; Validaci¢n del error de posicionamiento
         JNC LecturaByteControl
         MOV BL, AL
         MOV DX, OFFSET ErrorPosicionamiento
         MOV AH, 09
         INT 21H

       ; Impresi¢n del n£mero del error
         MOV DL, BL
         ADD DL, 30H
         MOV AH, 02
         INT 21H

       ; Detenci¢n de la ejecuci¢n del programa
         .EXIT

       ; Lectura del byte de control
         LecturaByteControl:
         MLeeArchivo ManejadorArchivo, 1, <OFFSET buffer>, <OFFSET MensajeErrorLectura>, BytesLeidos

       ; Validaci¢n del byte de control
         CMP Buffer, 0CH
         JE LecturaPaleta

       ; Impresi¢n del comentario de error
         MOV DX, OFFSET ErrorByteControl
         MOV AH, 09
         INT 21H

       ; Detenci¢n de la ejecuci¢n del programa
         .EXIT

       ; Lectura de la paleta
         LecturaPaleta:
         MLeeArchivo ManejadorArchivo, 768, <OFFSET Paleta>, <OFFSET MensajeErrorLectura>, BytesLeidos

       ; Adecuaci¢n del contenido de la paleta
         AjustaPaleta:
         MOV SI, 0
         IniciaAjustePaleta:
           CMP SI, 768
           JUMPS
           JE  EstableceModo
           NOJUMPS
               SHR Byte PTR Paleta[SI],1
               SHR Byte PTR Paleta[SI],1
               INC SI
           JMP SHORT IniciaAjustePaleta

       ; Establecimiento del modo VGA19
         EstableceModo:
         MOV AL, 13H
         MOV AH, 00
         INT 10H
;-------------------------------------------------------------------------
       
       ; ****** Configuraci¢n de la paleta **********
         ConfiguraPaletaVGA:
         MOV AX, DS
         MOV ES, AX
         MOV AX, 1012H
         MOV BX, 0
         MOV CX, 256
         MOV DX, OFFSET Paleta
         INT 10H
                                         

       ; Posicionamiento del apuntador del archivo al inicio de la imagen
         PosicionaInicioImagen:
         MOV CX, 0
         MOV DX, 128                ; Distancia a mover en bytes
         MOV AL, 0                  ; A partir del final del archivo
         MOV BX, ManejadorArchivo
         MOV AH, 42H                ; Funci¢n de posicionamiento
         INT 21H

       ; Validaci¢n del error de posicionamiento
         JNC ImprimeContenidoImagen
         MOV BL, AL
         MOV DX, OFFSET ErrorPosicionamiento
         MOV AH, 09
         INT 21H

       ; ***** Impresi¢n del contenido de la imagen *****
         ImprimeContenidoImagen:

           ; Asignaci¢n del valor al registro ES
             MOV AX, 0A000H
             MOV ES, AX

           ; Inicializaci¢n del contador de l¡neas
             MOV CX, 0

           ; Inicializaci¢n del valor de SI
             MOV SI, 0

           ; Ciclo de impresi¢n de la l¡neas de la imagen
             InicioCicloImpresionLineas:
                ; Verificaci¢n del valor del contador de l¡neas
                  CMP CX, Alto
                  JUMPS
                  JE EsperaPulsacionCaracter
                  NOJUMPS

             
                ; Inicializaci¢n de DI
                  SUB DI, DI

                ; Preservaci¢n del registro SI
                  PUSH SI

                ; Inicializaci¢n de las posiciones de la memoria de video
                  IniciaCicloMemVideo:
                     ; Validaci¢n del valor del contador
                       CMP DI, Bytes
                       JUMPS
                       JE AsignaValoresContadores
                       NOJUMPS

                     ; Asignaci¢n del valor a la memoria de video
                       MOV BYTE PTR ES:[SI],0

                     ; Incremento de SI y DI
                       INC SI
                       INC DI
                  JMP SHORT IniciaCicloMemVideo

                ; Asignaci¢n de los valores a los contadores
                  AsignaValoresContadores:
                    SUB DI, DI
                    POP SI

                ; Lectura de los datos de la l¡nea
                  InicioCicloLinea:
                     
                     ; Lectura de un byte de la l¡nea en el archivo
                       MLeeArchivo ManejadorArchivo, 1, <OFFSET buffer>, <OFFSET MensajeErrorLectura>, BytesLeidos

                     ; Verificaci¢n del tipo de byte leido
                       MOV AL, buffer
                       MOV AH, 0
                       AND AX, 00C0H
                       CMP AX, 00C0H
                       JUMPS
                       JNE AlmacenaLiteral
                       NOJUMPS

                     ; Obtenci¢n de los bytes de repetici¢n
                       AND Buffer, 00111111B
                       MOV AL, buffer
                       MOV Repeticiones, AL

                     ; Lectura del byte a repetir
                       MLeeArchivo ManejadorArchivo, 1, <OFFSET buffer>, <OFFSET MensajeErrorLectura>, BytesLeidos
                       
                     ; Asignaci¢n del valor del caracter a AL
                       MOV AL, Buffer

                     ; Repetici¢n del caracter de datos
                       InicioCicloRepeticiones:
                         CMP Repeticiones, 0
                         JUMPS
                         JE ComparaDI
                         NOJUMPS

                            ; Guardado del caracter de repetici¢n de la memoria de video
                              MOV ES:[SI], AL

                            ; Incremento de SI
                              INC SI

                            ; Incremento de DI
                              INC DI

                            ; Decremento de las repeticiones
                              DEC Repeticiones

                        JMP SHORT InicioCicloRepeticiones

                     ; Almacenamiento del valor de la literal
                       AlmacenaLiteral:
                         MOV AL, Buffer
                         MOV ES:[SI], AL
                         INC SI
                         INC DI

                     ; Validaci¢n del contenido de DI
                       ComparaDI:
                          CMP DI, Bytes
                          JUMPS
                          JNE InicioCicloLinea
                          NOJUMPS

                ; Incremento del valor de SI
                  MOV AX, 320
                  SUB AX, DI
                  ADD SI, AX

                ; Incremento del valor de CX
                  INC CX

                ; Salto al inicio del ciclo de la l¡neas
                  JMP InicioCicloImpresionLineas

         
 EsperaPulsacionCaracter:
        ; Inicializacion del contador de lineas
             MOV sum,0
             MOV BX,0
             SUB SI,SI
             SUB DI,DI
 Corrimiento:
    CMP Sum,319
    JE Salir
             
        ; Asignacion de direccion base a Es
             MOV Ax,Ds
             PUSH Ax

             MOV AX,0A000h
             MOV ES,AX
             MOV DI,64000

        ; Inicio direccion fuente
             MOV AX,0A000h
             MOV DS,Ax
             MOV SI,63999
        ; Inidicar un rrecorrido ascendente
             STD
        ; Indicacion standar
             MOV CX,32000
        ; Corrimiento
             REP MOVSW
             POP AX
             MOV DS,AX
             CLD
             MOV AX,319
             MOV BX,0;1
             MUL BX
             MOV DI,AX
             MOV AX,0
             MOV CX,160
             REP STOSW
             INC Sum
           ;Borrado del priemer pixel  
             MOV SI,320
             MOV AL,0
             MOV DS: [SI],AL
    JMP Corrimiento

 Salir:
  ; Establecimiento del modo VGA 3
    MOV AX, 0003
    INT 10H
 
  ; Cerrado del archivo
    MCierraArchivo  ManejadorArchivo, <OFFSET MensajeErrorCerrado>
     
  ; Terminaci¢n de la ejecuci¢n del programa
    .EXIT

ProgramaPrincipal ENDP

END ProgramaPrincipal
-----------------------------------------------------FIN DELPROGRAMA
INICIO DE LA MACRO-------------------------------------------------

; Definici¢n de la macro que abre un archivo existente
; DS             = Segmento de NombreArchivo.
; DX             = Offset de NombreArchivo
; AH             = 3D ( Funci¢n de apertura del archivo )
; AL             = ModoAcceso
; NombreArchivo  = Nombre del archivo y debe terminar con nulo.

MAbreArchivo MACRO NombreArchivo, ModoAcceso, MensajeError, ManejadorArchivo
       LOCAL @@AperturaExitosa

     ; Preservaci¢n de los registros AX y DX
       PUSH AX
       PUSH CX
       PUSH DX

     ; Asignaci¢n del modo de acceso a AL
       MOV al, ModoAcceso

     ; Asignaci¢n del valor a la funci¢n a AH
       MOV ah, 3dH

     ; Asignaci¢n del offset a DX del offset de NombreArchivo
       MOV DX, NombreArchivo

     ; Solicitud del servicio proporcionado por la interrupci¢n 21H
       INT 21H

     ; Verificaci¢n del ‚xito de la solicitud del servicio
       JNC SHORT @@AperturaExitosa

     ; Guardado del valor generado por la interrupci¢n 21H
       MOV cx, ax

     ; Impresi¢n del salto del error cometido en la apertura
       MOV dx, MensajeError
       MOV ah, 09
       INT 21h

     ; Impresi¢n del n£mero de error
       Mov DL, CL
       Add DL, 30H
       Mov AH, 02
       Int 21H

     ; Detenci¢n de la ejecuci¢n del programa.
       .exit

@@AperturaExitosa:      
     
     ; Asignaci¢n del valor al manejador del archivo
       MOV ManejadorArchivo, AX

     ; Restauraci¢n de los valores de los registros
       POP DX
       POP CX
       POP AX

ENDM


; Definici¢n de la macro que lee el contenido de un archivo

MLeeArchivo MACRO ManejadorArchivo, NumBytesLeer, Buffer, MensajeError, BytesLeidos
    LOCAL LecturaExitosa

  ; Preservaci¢n de los valores de los registros de prop¢sito general
    PUSH ax
    PUSH cx
    PUSH dx

  ; Asignaci¢n del valor a AH
    MOV ah, 3FH            ; Funci¢n 3F de lectura del archivo
    MOV al, 00             ; Ajuste del valor de AL

  ; Asignaci¢n del valor al registro BX
    MOV bx, ManejadorArchivo

  ; Asignaci¢n del valor al registro CX
    MOV cx, NumBytesLeer

  ; Asignaci¢n del valor al registro DX
    MOV dx, Buffer

  ; Emisi¢n de la interrupci¢n
    INT 21H

  ; Verificaci¢n del valor de la funci¢n
    JNC LecturaExitosa

  ; Guardado temporal del valor de AX
    MOV cx, ax

  ; Impresi¢n del salto de l¡nea
    MOV dx, MensajeError
    MOV ah, 09
    INT 21h

  ; Impresi¢n del n£mero de error
    Mov DL, CL
    Add DL, 30H
    Mov AH, 02
    Int 21H

  ; Detenci¢n de la ejecuci¢n del programa.
    .exit

LecturaExitosa:

   ; Asignaci¢n del valor al n£mero de bytes leidos
     MOV BytesLeidos, AX

   ; Restauraci¢n de los valores de los registros
     POP dx
     POP cx
     POP ax

ENDM

; Definici¢n de la macro que cierra un archivo.

MCierraArchivo MACRO ManejadorArchivo, MensajeError
     LOCAL CerradoExitoso

   ; Preservaci¢n de los valores de los registros
     PUSH ax
     PUSH cx
     PUSH dx

   ; Asignaci¢n del valor al registro AH
     MOV ah, 3EH

   ; Ajuste del valor de AL
     MOV al, 00

   ; Asignaci¢n del valor al registro BX
     MOV bx, ManejadorArchivo

   ; Emisi¢n de la interrupci¢n 21H
     INT 21H

   ; Verificaci¢n del valor de la funci¢n
     JNC CerradoExitoso

   ; Guardado temporal del valor de AX
     MOV cx, ax

   ; Impresi¢n del salto de l¡nea
     MOV dx, MensajeError
     MOV ah, 09
     INT 21h

   ; Impresi¢n del n£mero de error
     Mov DL, CL
     Add DL, 30H
     Mov AH, 02
     Int 21H

   ; Detenci¢n de la ejecuci¢n del programa.
     .exit

CerradoExitoso:

   ; Restauraci¢n de los valores de los registros
     POP dx
     POP cx
     POP ax

ENDM

;definicion de la macro que detiene la imagen
ConfiguraPaleta Macro Paleta, Byteinicial,NumeroBytes
    LOCAL IniciaConfiguracion,TerminaConfiguracion

      ;; Preservacion de los registros utilizados
    Push AX
    Push DX
    Push SI
      ;; Inicializacion del Contador
    XOR SI,SI
      ;; Espera del refrace vertical
    WaitSync
      ;; Configuracion del Puerto 3c8h
    Mov DX,3c8h
    Mov AL,ByteINicial
    Out DX,AL
      ;; ESpecificacion del Puerto 3c9h
    INC DX

      ;; Modificacion del contenido de la paleta de colores
    IniciaConfiguracion:
          CMP SI,NumeroBytes
          JE TerminaConfiguracion
       ;; Extracion del Valor de la paleta temporal
          Mov AL,&Paleta&[SI]
       ;; Configuracion del registro equivalente de la paleta del Hardware
          Out DX,AL
       ;; Incremento de Contador
          INC SI
       ;; Regreso al inicio del ciclo
          Jmp Short IniciaConfiguracion
    TerminaConfiguracion:
       ;; Restauracio de los registros
          POP SI
          POP DX
          POP AX
ENDM


;Definicion de la Macro Waitsync
 Waitsync Macro
     LOCAL WaitVr1,WaitVr2
       ;; Cuerpo de la Macro
     MOV DX,3dah

     WaitVr1:
     IN AL,DX
     TEST AL,8
     JNE WaitVr1

     WaitVr2:
     IN AL,DX
     TEST AL,8
     JE WaitVr2
ENDM


; Macro para pintar un pixel determinado en una columna,renglon
PintaPixel MACRO Renglon, Columna, Color
     ;; Preservacion de los registros
   Push Ax
   Push Bx
   Push Dx
   Push Es

     ;; Calculo del offset
   Mov Ax, Renglon
   Mov Cl, 6
   Shl Ax, Cl
   Mov Bx, Ax
   Shl Bx, 1
   Shl Bx, 1
   Add Bx, Ax
   Add Bx, Columna

     ;; Pintar el pixel del color seleccionado
   Mov Ax, 0A000h
   Mov Es, Ax
   Mov Al, Color
   Mov Es:[Bx], Al

     ;; Restauracion de los registros
   Pop Es
   Pop Dx
   Pop Bx
   Pop Ax
EndM


; Macro que genera un numero aleatorio
Aleatorio Macro A, C, M, XN, XN1
      Local
    ;;Preservacion de los registros
      Push Ax
      Push Bx
      Push Cx
      Push Dx

    ;;Obtencion del producto
      Mov Ax, A
      Mov Bx, XN
      Mul Bx
    ;;Adicion del termino C
      Add Ax, C
      AdC Dx, 0
    ;;Obtencion del residuo con respecto a M
      Mov Bx, M
      Div Bx    ; residuo queda en dx y el cociente en Ax
    ;;Asignacion del residuo a XN1
      Mov XN1, Dx
    ;;restauracion de los registros utilizados
      Pop Dx
      Pop Cx
      Pop Bx
      Pop Ax
EndM



;Definicion de una macro que imprime una matriz en la memoria de video

IMPRIMEMATRIZ MACRO NUMRENSPRITE,NUMCOLSPRITE,RENGLONA,COLUMNAA,RENGLON,COLUMNA,OFFSETSPRITE
     LOCAL InicioCiclorenglones,SalidaCicloRenglones,InicioCicloColumnas,SalidaCicloColumnas

   ; Preservacion de los valores de los registros
     Push ax
     Push bx
     Push cx
     Push dx
   ; Inicializacion del renglon
     MOV RENGLON,0

   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
   Waitsync
     ; Simula el ciclo de renglones
       InicioCicloRenglones:
      MOV CL,NUMRENSPRITE
       SUB CL,1
       CMP CL,RENGLON
     JL SalidaCicloRenglones
       ;Inicializacion del valor de la columna del sprite
   MOV COLUMNA,0
       ;Simulacion ciclo columnas
     InicioCicloColumnas:
   MOV CH,NUMCOLSPRITE
   SUB CH,1
   CMP CH,COLUMNA
   JL SalidaCicloColumnas
      MOV AX,0A000H
      MOV ES,AX
      MOV AX,RENGLONA
      ADD AL,RENGLON
      ADC AH,0
      MOV DX,320
      MUL DX
      ADD AX,COLUMNAA
      ADD AL,COLUMNA
      ADC AH,0
      MOV BX,AX
      MOV AX,NUMCOLSPRITE
      MUL RENGLON
      ADD AL,COLUMNA
      ADC AH,0
      ADD AX,OFFSETSPRITE
      MOV SI,AX
      MOV AL,[SI]
      MOV BYTE PTR ES:[BX],AL
   INC COLUMNA
     JMP InicioCicloColumnas
    SalidaCicloColumnas:
    inc renglon
     JMP InicioCicloRenglones
    SalidaCicloRenglones:

     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync
     Waitsync


    ;Restauracion de los registros de proposito general
     Pop dx
     Pop cx
     Pop bx
     Pop ax
ENDM