; 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