lunes, 3 de abril de 2017

Programa#7

; PROGRAMA : pe14_col
; FUNCION : imprime un texto con las letras de colores
; 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
---------------------------------------------------------------------------------

; 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





0 comentarios:

Publicar un comentario