ADMINISTRACION DE BASE DE DATOS

jueves, 4 de abril de 2019

COLOR DE PANTALLA Y TEXTO: CAMBIAR CON ENSAMBLADOR

En esta entrada, veremos lo basico para poder modificar el fondo de la consola de video de ensamblador, asi como el color del texto de cualquier mensaje que enviemos a ella.

Primeramente, debemos saber un poco sobre la interrupcion que usaremos para ello:


Interrupción 10h: Nos permite invocar servicios de video de la ROM BIOS, manipulando algunas de sus funciones.

Los servicios que nos permiten hacer este tipo de cambio de colores son:

  • 02h: nos permite controlar la posicion de nuestro cursor en la pantalla. Los registros BH,DH y DL son los que usaremos para indicar la posicion en donde debe estar el cursor.
  • 06h:Permite inicializar la ventana de video o desplazar su contenido. En este servicio el registro CX indica el pixel donde va a comenzar a cambiar el color y el registro DX indica donde terminara.
Como siguiente punto, debemos saber como es que se representan los colores dentro de emulador.


Cada uno de estos colores al momento de ingresarlos al emulador, podemos representarlo por su parte hexadecimal o binaria:

Los primeros 4 numeros  representan el color que sera para el color de letra, los siguientes 3 representan el color del fondo , el ultimo bit solo es un indicador, si esta en 1 el texto completo en pantalla estara parpadeando.
01011110

0: indicador que nos hara que el texto parpade o no
101: Color de fondo de la pantalla
1110: color del texto en la pantalla.


CR EQU 13
LF EQU 10
TECLADO_8 EQU 8
IMPRIMIR_9 EQU 9
FIN_4C00H EQU 4C00H
DOS_21H EQU 21H
BIOS_10H EQU 10H
TAB EQU 09H
BELL EQU 07H
 
DATOS SEGMENT
    RENGLON DB 0
    COLUMNA DB 0
    MENSAJE DB CR,LF,'POSICION (X,Y), DEL MENSAJE: Hola mundo'
            DB 'DESPUES DE BORRAR PANTALLA',CR,LF,'$'
        DATOS ENDS
        PILA SEGMENT STACK
            DW 100 DUP('0')
        PILA ENDS
 
        CODIGO SEGMENT
            CLSP PROC FAR
            ASSUME CS:CODIGO,DS:DATOS,SS:PILA
             
             
            MOV AX,DATOS
            MOV DS,AX
            LEA DX,MENSAJE
            CALL LIMPIA_PANTALLA
            CALL POSICIONA_CURSOR
            MOV AH,IMPRIMIR_9
            INT DOS_21H
            MOV AX,FIN_4C00H
            INT DOS_21H
             
            CLSP ENDP
             
            LIMPIA_PANTALLA PROC NEAR
            MOV AX,0600H
            MOV BH,01011110b ;color que se modifico
            MOV CX,000H
            MOV DX,484FH
            INT BIOS_10H
            RET
            LIMPIA_PANTALLA ENDP
             
            POSICIONA_CURSOR PROC NEAR
            MOV AH,02 ;Posicion del cursor
            MOV BH,00 ;Pagina en 0,es decir que usara esa pantalla y no otra
            MOV DH,RENGLON ; coordenadas de la pagina por renglon
            MOV DL,COLUMNA ;coordenadas de la pagina por columna
            INT BIOS_10H
            RET
            POSICIONA_CURSOR ENDP
             
        CODIGO ENDS
        END CLSP

lunes, 1 de abril de 2019

PROGRAMAS EN TURBO ASSEMBLER

ALGUNAS DE LAS DEFINICIONES DE ESTAS INSTRUCCIONES QUE UTILIZAREMOS SON LAS SIGUIENTEs:

Las dos primeras sentencias funcionales del programa (sin tomar en cuenta los comentarios que inician con “;”) permiten definir dos constantes: CR y LF. Estas constantes no generan código objeto alguno, ya que indican al compilador que cuando encuentren en el código dichas constantes o símbolos, sustituya dichos símbolos por el valor indicado.

CR EQU 13 
LF EQU 0AH 


EJEMPLO 1:

Código que imprime el mensaje "HOLA MUNDO"


CR EQU 13
LF EQU 0Ah

DATOS SEGMENT
    MENSAJE DB CR, LF, 'HOLA MUNDO', CR, LF, '$'
DATOS ENDS

PILA SEGMENT STACK
    DB 64 DUP('PILA')
PILA ENDS

CODIGO SEGMENT
    HM PROC FAR
    ASSUME CS: CODIGO, DS:DATOS, SS:PILA
    
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, MENSAJE
    
    MOV AH, 9
    INT 21H
    
    MOV AX, 4C00H
    INT 21H
    
    HM ENDP
    
CODIGO ENDS
END HM



EJEMPLO 2:

Código que imprime "EL USO DE DOS CONSTANTES"


CR EQU 13
LF EQU 10
IMPRIMIR EQU 9
FIN EQU 4C00H
DOS EQU 21H

DATOS SEGMENT
    TEXTO DB 'EJEMPLO DEL USO DE CONSTANTES', CR, LF, '$'
    

    
DATOS ENDS

PILA SEGMENT STACK
    DB 64 DUP ('PILA')
PILA ENDS

CODIGO SEGMENT
    ASSUME CS:CODIGO, DS:DATOS, SS:PILA
    INICIO: MOV AX, DATOS
        MOV DS, AX
        MOV DX, OFFSET TEXTO
        MOV AH, IMPRIMIR
        INT DOS
        MOV AX, FIN
        INT DOS
    
    CODIGO ENDS
    END INICIO




EJEMPLO 3:

Código que imprime "HOLA MUNDO" mediante una función


CR EQU 13
LF EQU 10

DATOS SEGMENT
    MENSAJE DB, CR, LF, 'HOLA MUNDO', CR, LF, '$'

DATOS ENDS
PILA SEGMENT STACK
    DB 64 DUP ('PILA')
PILA ENDS


CODIGO SEGMENT
    HMF PROC FAR
    ASSUME CS:CODIGO, DS:DATOS, SS:PILA
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, MENSAJE
    
    CALL ESCRIBE
    MOV AX, 4C00H
    INT 21H
    
    HMF ENDP
    
    ESCRIBE PROC
            MOV AH, 9
            INT 21H
            RET
            ESCRIBE ENDP
            
        CODIGO ENDS
        END HMF




EJEMPLO 4:

Código que imprime datos personales 



CR EQU 13
LF EQU 10

DATOS SEGMENT
    LINEA1 DB CR, LF, 'ROCIO MAHE ALVAREZ', CR, LF, '$'
    LINEA2 DB 'TECNOLOGICO DE MATAMOROS', CR, LF, '$'
    LINEA3 DB 'ING. SISTEMAS COMPUTACIONALES', CR, LF, '$'
    LINEA4 DB 'SOLTERA ;-;', CR, LF, '$'
    
DATOS ENDS

PILA SEGMENT STACK
    DB 64 DUP('PILA')

PILA ENDS

CODIGO SEGMENT
    LN PROC FAR
    
    ASSUME CS:CODIGO, DS:DATOS, SS:PILA
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, LINEA1
    CALL ESCRIBE
    LEA DX, LINEA2
    CALL ESCRIBE
    LEA DX, LINEA3
    CALL ESCRIBE
    MOV AX, 4C00H
    INT 21H
    
    LN ENDP
    
    ESCRIBE PROC
    MOV AH, 9
    INT 21H
    RET
    ESCRIBE ENDP

CODIGO ENDS
END LN