lunes, 3 de abril de 2017

Programa#8

 ; 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
----------------------------------------------------------------------

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 pt14_col                  ; Fin del codigo e indicar direccion comienzo





0 comentarios:

Publicar un comentario