; PROGRAMA : pt14_col
; FUNCION : imprime un texto con las letras de colores que parpadean
; REALIZADO POR :Jose Juan Muñiz Hernandez
-------------------------------------------------------------------------------------------------------------------------------
; 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
BIOS_10H EQU 10H
------------------------------------------------------------
; DECLARACION DEL SEGMENTO DE DATOS
----------------------------------------------------------------
DATOS SEGMENT ; Inicio del segmento de datos
TITULO DB 'JOSE_JUAN_MUÑIZ' ; Texto a imprimir
COLORES DB 11001110B ; Atributo de 'J' los numeros binarios se pueden convertir a hexa
DB 11001111B ; Atributo de 'O' siendo dos digitos hexa el primero representa el
DB 11000001B ; Atributo de 'S'fondo y el segundo el texto.
DB 11001100B ; Atributo de 'E'
DB 11000001B ; Atributo de '_'
DB 11001111B ; Atributo de 'J'
DB 11001011B ; Atributo de 'U'
DB 00101100B ; Atributo de 'A'
DB 00101111B ; Atributo de 'N'
DB 00101110B ; Atributo de '_'
DB 00100001B ; Atributo de 'M'
DB 00101111B ; Atributo de 'U'
DB 00100001B ; Atributo de 'Ñ'
DB 00101100B ; Atributo de 'I'
DB 00100001B ; Atributo de 'Z'
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
pt14_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,22 ; Bucle (22 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)
pt14_col ENDP ; Fin del procedimiento pt14_col----------------------------------------------------------------------
; Definicion del procedimiento COLOR, que imprime un caracter en color
; Pasar en AL el codigo del caracter, y en BL el atributo----------------------------------------------------------------------
; 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
----------------------------------------------------------------------
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
; 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 pt14_col ; Fin del codigo e indicar direccion comienzo
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 pt14_col ; Fin del codigo e indicar direccion comienzo
0 comentarios:
Publicar un comentario