martes, 4 de abril de 2017

Programa #7

;================================================================
 ; PROGRAMA : pe14_col
 ; FUNCION : imprime un texto con las letras de colores
  ; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
  ; FECHA : Mi?rcoles 30 marzo 2017
;================================================================

 ; DECLARACION DE CONSTANTES

CR EQU 13 ; Constante CR (Retorno de carro) En decimal o
 LF EQU 10 ; Constante LF (Salto de l?nea) en hex es igual
 BIOS EQU 10H ; Definicion de constantes o simbolos
 DOS EQU 21H
 TEXTO EQU 3
 FIN EQU 4C00H

 ; DECLARACION DEL SEGMENTO DE DATOS

 DATOS SEGMENT                                                   ; Inicio del segmento de datos

     TITULO DB 'ENSAMBLADOR'                          ; Texto a imprimir
 COLORES
 DB 01001110B ; Atributo de 'E' los numeros binarios se pueden convertir a hexa
 DB 01101111B ; Atributo de 'N' siendo dos digitos hexa el primero representa el
 DB 00110001B ; Atributo de 'S' fondo y el segundo el texto.
 DB 01011100B ; Atributo de 'A'
 DB 00110001B ; Atributo de 'M'
 DB 01011111B ; Atributo de 'B'
 DB 01101011B ; Atributo de 'L'
 DB 01011100B ; Atributo de 'A'
 DB 01101111B ; Atributo de 'D'
 DB 01001110B ; Atributo de 'O'
 DB 00110001B ; Atributo de 'R'

 DATOS ENDS ; Fin del segmento de datos

 ; DECLARACION DEL SEGMENTO DE PILA

PILA SEGMENT STACK                                         ; Inicio del segmento de pila

    DB 64 DUP('PILA')                                               ; Asignar espacio
   
    PILA ENDS                                                           ; Fin del segmento de pila

    ;====================================
 ; DECLARACION DEL SEGMENTO DE CODIGO
 ;=====================================

 CODIGO SEGMENT                                                ; Inicio del segmento de código

 pe14_col PROC FAR                                                  ; Inicio procedimiento pe14_col

 ASSUME CS:CODIGO,DS:DATOS,SS:PILA           ; Indicar segmentos
 MOV AX,DATOS                                                       ; Inicializar correctamente el
 MOV DS,AX                                                               ; registro de datos
 MOV AX,TEXTO                                                       ; Establecer modo de texto 80x25 16 colores
 INT BIOS                                                                     ; Interrupción BIOS pantalla (10H)
 MOV CX,11                                                                 ; Bucle (11 caracteres)
 XOR SI,SI                                                                     ; Contador de caracteres (SI=0)

 BUCLE:
 PUSH CX                                                                      ; Guardar CX (contador de bucle) en pila
 MOV DX,SI                                                                   ; DX=SI (DX=contador)
 ADD DX,35                                                                    ; Columna=35+contador
 MOV DH,12                                                                   ; Establecer fila (12)
 CALL COLOCA                                                             ; Colocar el cursor
 MOV AL,[SI+OFFSET TITULO]                                  ; Obtener caracter
 MOV BL,[SI+OFFSET COLORES]                               ; Obtener atributo
 CALL COLOR                                                                 ; Imprimir caracter y atributo
 POP CX                                                                             ; Recuperar CX (contador de bucle)
 INC SI                                                                                ; Incrementar contador o puntero
 LOOPNZ BUCLE                                                              ; Repetir bucle mientras CX no sea 0

 MOV AH,8                                                                         ; Esperar tecla
 INT DOS                                                                             ; Interrupcion servicios del DOS (21H)
 XOR DX,DX                                                                       ; Situar cursor en 0,0 (DH=0 y DL=0)
 CALL COLOCA                                                                 ; Interrupcion servicios del DOS (21H)
 MOV AX,FIN                                                                      ; Fin del programa
 INT DOS                                                                              ; Interrupcion servicios del DOS (21H)
 pe14_col ENDP                                                                    ; Fin del procedimiento pe14_col

  ;----------------------------------------------------------------------
 ; Definicion del procedimiento COLOR, que imprime un caracter en color
 ; Pasar en AL el codigo del caracter, y en BL el atributo
 ;----------------------------------------------------------------------
 COLOR PROC                                                        ; Principio del procedimiento COLOR
 MOV AH,9                                                              ; Servicio que escribe caracter y atrib
 XOR BH,BH                                                            ; Numero de pagina de video (BH=0)
 INT BIOS                                                                 ; Interrupcion BIOS pantalla (10H)

 RET ; Retornar
 COLOR ENDP                                                          ; Fin del procedimiento COLOR
 ;----------------------------------------------------------------------
 ; Definici?n del procedimiento COLOCA, que situa el cursor en la pantalla
 ; Pasar en DH la fila y en DL la columna
 ;----------------------------------------------------------------------
 COLOCA PROC                                                      ; Principio del procedimiento COLOCA
 MOV AH,2                                                               ; Servicio que coloca el cursor
 XOR BX,BX                                                             ; Numero de pagina de video (BH=0)
 INT BIOS                                                                  ; Interrupcion BIOS pantalla (10H)
 RET                                                                            ; Retornar
 COLOCA ENDP                                                        ; Final del procedimiento COLOCA

 CODIGO ENDS                                                         ; Fin del segmento de codigo

 END pe14_col                                                             ; Fin del codigo e indicar direccion comienzo


No hay comentarios:

Publicar un comentario