pe14_col.asm 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 1 / 3 ;=========================================================================== ;=========================================================================== ; PROGRAMA : pe14_col.asm ; FUNCION : Imprime un texto utilizando colores. ; REALIZADO POR : Prof. Juan Juárez Fuentes ; COMPILADOR EN EL QUE SE EJECUTO: TASM 5.0 ; FECHA : 20091111175644 ;=========================================================================== ;=========================================================================== ; 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 ;----------------------------------------------------------------------- November 13, 2012 Crimson Editor pe14_col.asm 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 2 / 3 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) November 13, 2012 Crimson Editor pe14_col.asm 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 3 / 3 RET ; Retornar COLOR ENDP ; Fin del procedimiento COLOR ;---------------------------------------------------------------------; Definici¢n del procedimiento COLOCA, que sit£a 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 ;=========================================================================== ;=========================================================================== ;=========================================================================== November 13, 2012 Crimson Editor