jueves, 3 de mayo de 2018

Agenda en Python


Se utilizó la herramienta wxGlade y WxPython, como anteriormente lo mostramos en este blog.


Pasos
1.-Ejecutamos wxGlade. Seleccionamos la clase base wxFrame .Y le damos el nombre que se quiera al frame.



2-.Agregamos un Panel para ingresar los widgets y añadimos un BoxSizer en donde se configura en dos espacios en orientación horizontal.



3.-Agregamos  en las opciones de widgets un calendario y en widget seleccionamos el dia en que queremos que inicie la seman > en este caso seria el lunes.


4.-Agregamos en espacio de Texto donde podemos agregar un espacio donde escribir de acuerdo al dia y modificamos el espacio de trabajo a un tamaño de 250x300 para que crubriera mejor el programa.

5.-Por ultimo guardamos el programa y generamos el código en Aplicación>propiedades> Generar código y nos muestra en que lenguaje queremos ejecutarlo en este caso sería Python.. y listo nuestro programa abre de manera exitosa.





lunes, 23 de abril de 2018

Convertir un numero a ascii con macro emu8086 (ejemplo)

Primero debemos de hacer el macro en un bloc de notas y colocamos en una carpeta destinada en la siguiente direccion:

Direccion: C:\EMU8086\inc


-Codigo-

    inicializa MACRO
mov ax,data
mov ds, ax
mov cx,6
mov di, offset max
mov si,offset a
ENDM


 Ahora si empezamos con el codigo en emu

-Codigo-
INCLUDE mac.TXT

.model small
.stack

.data
a db 12,5,34,85,10,25
max db 0
numero db '12$'
diez db 10
msg1 db 'numero mas grande de la pila=$'
msg2 db 10,13,'caracter ascii=$'

.code
INICIO:
inicializa 

comparar:
    mov al,[si]
    mov bl,[di]
    cmp bl,al
    jnb incrementa
    mov [di], al
 
incrementa:
    inc si
    loop comparar
    ;convertir el numero a cadenta intToString
    mov al, max
    mov ah,0
    div diez
    add ah, '0'
    mov numero[1], ah
    add al, '0'
    mov numero[0], al
    ;desplegar el mensaje
    mov dx, offset msg1
    mov ah, 09h
    int 21h
    mov dx, offset numero
    mov ah, 09h
    int 21h
    mov dx, offset msg2
    mov ah, 09h
    int 21h
    mov dl,[di]
    mov ah, 02h
    int 21h
    mov ah, 4ch
    int 21h
end inicio
end



martes, 17 de abril de 2018

Ejemplo de macro

TITLE Cadena que solicita una cadena y una posicion para mostrarla

gotoxy macro fila,col ;declaracion de macro gotoxy parametros:fila,col
mov ah,02h   ;complemento interrupcion 10h modo video colocacion cursor
mov dh,fila  ;coordenada x para colocacion de cursor dh
mov dl,col   ;coordenada y para colocacion de cursor dl
mov bh,0h 
int 10h      ;interrupcion de video
endm   ;fin de macro

pantalla macro que  ;declaracion de macro pantalla parametro que
mov ah,02h       ;complemento interrupcion 21h
mov dl,que   ;que es el caracter capturado
int 21h      ;interrupcion DOS
endm  ;fin de macro

imprime macro eztryng  ;declaracion de macro con parametro eztryng
mov dx,offset eztryng  ;coloca mensajes en dx
mov ah,9               ;complemento para la interrupcion 21h para impresion de txto
int 21h                ;interrupcion DOS
endm                   ;fin de macro

.data    ;variables
mensaje DB "INGRESE UN CARACTER: ",13,10,"$"
mensaje2 DB "INGRESE X del 0 al 9: ",13,10,"$"
mensaje3 DB "INGRESE Y del 0 al 9: ",13,10,"$"
caracter DB 40
varx DB ?
vary DB ?
vtext db 100 dup('$')

.code

startup:
mov ax,@data  ;asignacion de datos ax
mov ds,ax     ;asignacion de datos al segmento de datos

imprime mensaje ;llama macro imprime con el parametro 'mensaje'
mov si,00h      ;limpia el apuntador SI


 leer:          ;declaracion de metodo leer 
 mov ax,0000    ;limpia ax
 mov ah,01h     ;complemento para interrupcion 21h captura
 int 21h        ;interrupcion DOS
 mov caracter[si],al ;guarda el dato capturado en variable caracter
 inc si         ;incrementa apuntador si
 cmp al,0dh     ;compara si la ultima tecla presionada fue Intro
 ja coordenadas ;si cumple brinca a coordenadas
 jb leer        ;sino cumple vuelve a ejecutar leer

coordenadas:    ;declaracion de metodo coordenadas
mov dx,offset caracter ;coloca en dx el caracter ingresado
mov ah,0ah             ;complemento de interrupcion 21h lee cadena de texto por teclado
int 21h                ;interrupcion DOS
imprime caracter       ;llama macro imprime con parametro caracter
imprime mensaje2       ;llama macro imprime con parametro mensaje2
mov ah,01h             ;complemento de interrupcion 21h Eco de un caracter
int 21h                ;interrupcion DOS
sub al,30h             ;resta 30h para convertir al valor numerico
mov bl,al              ;mueve al a bl
mov varx,al            ;guarda al en varx (coordenada x)
imprime mensaje3       ;//////////////se repite/////////
mov ah,01h
int 21h
sub al,30h
mov bl,al
mov vary,al            ;////////////////////////
mov ax,0003h           ;complemento interrupcion 10h modo texto
int 10h                ;interupccion de video

gotoxy vary,varx       ;llama macro gotxy con los parametros vary y varx como columna y fila
pantalla caracter[0]   ;llama macro pantalla con el caracter capturado como parametro

mov ah,01h             ;complemento de interrupcion 21h Eco de un caracter
int 21h                ;interrupcion DOS
mov ax,4c00h           ;complemento interrupcion 21h fin de probrama
int 21h                ;interrupcion DOS
end startup            ;fin de funcion principal

Almacenamiento de procedimientos en MySQL

Es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado y por lo tanto el acceso es directo a los datos que se necesita manipular así que sólo se necesita enviar sus resultados de regreso al usuario.
Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida.
Permite simplificar la creación y, particularmente, el mantenimiento de los programas que acceden a la base de datos.

código de los procedimientos:



Agregar y editar a algún alumno:



Procedimiento consultar alumno:
Eliminar alumno:



martes, 20 de marzo de 2018

Verificacion de texto en una cadena

org 100h
mov si, 0

comienzo:
mov al,msg2[0]
cmp msg[si],"$"
jz final
cmp msg[si], al
jne seguir
mov di, 1

comprobar:
mov al, msg2[di]
mov bx, di
cmp msg[si+bx], al
jne seguir

inc di
cmp msg2[di],"$"
jz resultado

loop comprobar

seguir:
inc si
loop comienzo 

resultado:
mov dx, offset msg3
mov ah, 9
int 21h       

final:
ret
msg db "tecnologico$"
msg2 db "tec$"
msg3 db "si se encuentran$"

Arquitectura de mysql

Arquitectura MySQL:
En estos diversos temas se hablará de las estructuras de una base de datos tanto como fisicas y logicas y nos sirven de gran ayuda para conocer como se desarrolla el proceso de cómo funciona la base de datos que conocemos actualmente y distintos métodos y funciones que esta pueda llevar, son importantes conocerlos y poder iniciar a experimentar con la información que veremos a continuación sobre nuestras bases de datos que estemos trabajando o futuras...


MySQL es un sistema de bases de datos relacional. Eso significa que la información está
organizada en bases de datos, que están compuestas por tablas, que están compuestas
por registros, que están compuestos por columnas.

Además de los datos que almacenamos, las tablas pueden contener índices, y algunas de sus columnas tienen propiedades especiales como claves primarias y claves foráneas que permiten establecer relaciones entre las tablas.

En general, un sistema de bases de datos relacional tienen tres capas: aplicacion, logica, fisica

La capa de aplicación es la parte más externa del sistema y es la interface a través de la que los usuarios se comunican con el sistema.
La funcionalidad central del sistema está en la capa lógica. Es donde se realizan todas las operaciones del sistema.

Finalmente, la capa física es donde están almacenados los datos.

- Arquitectura física de una base de datos en SQL Server:

La unidad fundamental del almacenamiento de datos en SQL Server es la página. El espacio en disco asignado a un archivo de datos (.mdf o .ndf) de una base de datos se divide lógicamente en páginas numeradas de forma contigua de 0 a n. Las operaciones de E/S de disco se realizan en el nivel de página. Es decir, SQL Server lee o escribe páginas de datos enteras.

Estructuras lógicas de la base de datos:

En todas las bases de datos relacionales disponemos de estas estructuras lógicas para organizar la información:

Tablas: Compuestas de filas y columnas en las que se almacenan los datos relevantes de cada base de datos.

Restricciones: Se definen al crear las tablas, pero se almacenan aparte. Están disponibles en el diccionario de datos y marcan las reglas que han de cumplir los datos para que se consideren válidos.

Índices: Se trata de una lista ordenada de claves que permite acceder a los valores de una o más columnas de una tabla de forma veloz.

Vistas: Son consultas almacenadas que nos permiten mostrar de forma personalizada los datos de una o varias tablas.

Procedimientos y funciones: Código del lenguaje procedimental de la base de datos utilizado para ejecutar acciones sobre las tablas (incluidos los triggers).

Estructuras físicas de la base de datos:

En una base de datos almacenamos información relevante para nuestro negocio u organización,a base de datos está conformada por dos tipos de archivos:

Archivos de datos: Contiene los datos de la base de datos internamente, está compuesto por páginas enumeradas secuencialmente que representa la unidad mínima de almacenamiento. Cada página tiene un tamaño de 8kb de información.

Existen diferentes tipos de páginas, a tener en cuenta:

Páginas de datos:Es el tipo principal de páginas y son las que almacenan los registros de datos.

Páginas de espacio libre (PFS Page Free Space): Almacenan información sobre la ubicación y el tamaño del espacio libre.

Paginas GAM and SGAM: Utilizadas para ubicar extensiones.

Páginas de Mapa de Ubicaciones de índices (IAM – Index Allocation Map): Contiene información sobre el almacenamiento de páginas de una tabla o índice en particular.

Páginas Índices: Utilizada para almacenar registros de índices.

· Archivo de Registro de Transacciones: El propósito principal del registro de transacciones es la recuperación de datos a un momento en el tiempo o complementar una restauración de copia de respaldo completa (full backup). Este archivo no puede ser leído por herramientas de usuario de SQL aunque existen herramientas de terceros que leen este archivo para recuperar los cambios efectuados.

Data File: Los datafiles son los archivos físicos en los que se almacenan los objetos que forman parte de un tablespace.

2.1.3 Requerimientos para instalación de la base de datos:

Antes de instalar cualquier SGBD es necesario conocer los requerimientos de hardware y software, el posible software a desinstalar previamente, verificar el registro de Windows y el entorno del sistema, así como otras características de configuración especializadas como pueden ser la reconfiguración de los servicios TCP/IP.

2.1.4 Instalación del software de BD en modo transaccional:

Debido al constante crecimiento de datos que generan las empresas hoy en día, se ha vuelto muy necesaria la búsqueda de nuevas plataformas para almacenar y analizar la información, ambientes que consuman menos recursos, que sean más escalables y que provean una alta disponibilidad.

Una base de datos en modo transaccional significa que la BD será capaz de que las operaciones de inserción y actualización se hagan dentro de una transacción, es un componente que procesa información descomponiéndose de forma unitaria en operaciones indivisibles, llamadas transacciones

Una transacción es un conjunto de líneas de un programa que llevan insert o update o delete.

Se usan los siguientes métodos:
Begin TRans para iniciar la transacción
CommitTrans para efectuar los cambios con éxito
RollbackTrans para deshacer los cambios

2.1.5 Variables de Ambiente y archivos importantes para instalación:

Variable: Es un espacio en memoria al cual se le da un nombre Hay variables específicas que se crean al momento de entrar al sistema, pero también hay variables que pueden ser definidas por el usuario.
Variables de Ambiente: Se usan para personalizar el entorno en el que se ejecutan los programas y para ejecutar en forma correcta los comandos del shell.
A continuación se comentan las opciones más utilizadas de la sección mysqld (afectan al funcionamiento del servidor MySQL), se almacenan en el archivo my.cnf (o my.ini)
basedir = ruta: Ruta a la raíz MySQL
console: Muestra los errores por consola independientemente de lo que se configure para log_error.
datadir = ruta: Ruta al directorio de datos.
default-table-type = tipo: Tipo de la Tabla InnoDB o, MyISAM.


2.1.6 Procedimiento general de instalación de un DBMS:

MySQL Enterprise Edition:

MySQL Enterprise Edition incluye el conjunto más completo de características avanzadas y herramientas de gestión para alcanzar los más altos niveles de escalabilidad, seguridad, fiabilidad y tiempo de actividad. Reduce el riesgo, costo y complejidad en el desarrollo, implementación y administración de aplicaciones críticas de negocio MySQL.

El MySQL Enterprise incluye las siguientes opciones:

Backup: Realiza copias de seguridad de bases de datos MySQL en línea, de los subconjuntos de tablas InnoDB, y la recuperación mediante puntos de restauración.

Alta Disponibilidad: Es proporcionada con soluciones certificadas que incluyen replicación de MySQL.

Escalabilidad: Permite alcanzar el rendimiento sostenido y la escalabilidad de cada vez mayor de usuarios, consulta, y las cargas de datos

MySQL Enterprise Security: Proporciona listas para utilizar los módulos de autenticación externos para integrar fácilmente las infraestructuras existentes de seguridad, incluyendo Pluggable Authentication Modules y el directorio activo de Windows

MySQL Enterprise Monitor:Supervisa continuamente su base de datos y de forma proactiva le asesora sobre cómo implementar las mejores prácticas de MySQL, incluyendo consejos y alertas de seguridad

MySQL Query Analyzer: Mejora el rendimiento de las aplicaciones mediante el control de rendimiento de las consultas y precisa localización de código SQL que está causando una desaceleración.

MySQL Workbench: Cuenta con ofertas de modelado de datos, desarrollo de SQL y herramientas de administración integral para la administración del servidor de configuración del usuario, y mucho más.

2.1.7 Procedimiento para Configuración de un DBMS:
Para configurar nuestro DBMS podemos acceder a las siguientes pantallas, para Oracle o MySQL.

El esquema de una base de datos (en inglés, Database Schema) describe la estructura de una Base de datos, en un lenguaje formal soportado por un Sistema administrador de Base de datos (DBMS). En una Base de datos Relacional, el Esquema define sus tablas, sus campos en cada tabla y las relaciones entre cada campo y cada tabla.

2.1.8 Comandos Generales de Alta y Baja del DBMS:

Una tabla es un sistema de elementos de datos (atributo - valores) que se organizan que usando un modelo vertical - columnas (que son identificados por su nombre)- y horizontal filas. Una tabla tiene un número específico de columnas, pero puede tener cualquier número de filas.

MySQL
soporta varios motores de almacenamiento que tratan con distintos tipos de tabla. Los motores de almacenamiento de MySQL incluyen algunos que tratan con tablas transaccionales y otros que no lo hacen:

MyISAM: trata tablas no transaccionales. Proporciona almacenamiento y recuperación de datos rápida, así como posibilidad de búsquedas fulltext. MyISAM se soporta en todas las configuraciones MySQL.

Los motores de almacenamiento InnoDB y BDB proporcionan tablas transaccionales. BDB se incluye en la distribución binaria MySQL-Max en aquellos sistemas operativos que la soportan. InnoDB también se incluye por defecto en todas las distribuciones binarias de MySQL 5.0.

Conclusion
Una estructura de una base de datos tanto fisica como logica son de gran ayuda para el aprendizaje del desarrollo del funcionamiento de la base de datos como es conocido hasta la fecha, al igual que los multiples funciones y metodos que la misma puede llevar acabo, lo cuales son de mucha importancia el conocer al igual que experimentar con ellos con distintas base de datos.

martes, 13 de marzo de 2018

Loop en emu8086



miércoles, 28 de febrero de 2018

Programa que maneje "Loop" en EMU8086

El Objetivo es buscar en una cadena si se encuentran las letras que desamos buscar y si estas se encuentran manda un mensaje de que si son encontradas.

org 100h
mov si, 0 ;ponemos si en 0
comienzo:
mov al, msg2[0] ;copiar la primera letra de la palabra a al
cmp msg[si],"$" ;si es el fin de la cadena mandar a final
jz final
cmp msg[si], al ;comparar si encuentra la primera letra de la cadena
jne seguir

 mov di, 1 ;poner en 1 di
 comprobar:
 mov al, msg2[di]
 mov bx, di
 cmp msg[si+bx], al ;posicion de la letra coincidente + di, comparar con la cadena
 jne seguir ;si no coincide mandar a seguir

 inc di ;incrementar di para seguir recorriendo cadena

 cmp msg2[di],"$" ;si es el fin de la cadena y el programa llego aca quiere decir que la cadena es parte de la palabra
 jz resultado

 loop comprobar ;bucle para recorrer cadena

seguir:
inc si ;para seguir recorriendo la palabra
loop comienzo ;bucle principal para recorrer palabra
resultado:
mov dx, offset msg3 ;copiar msg3 a dx
mov ah, 9 ;preparar ah con 9 para la interrupcion 21h
int 21h ;mostrar contenido en dx
final:
ret
msg db "tecnologico$"
msg2 db "tec$"
msg3 db "Si se encuentra$"



Ciclo de mensaje 5 veces

.model  small
.stack 64
.data
mensaje db 0ah, 0dh,'letrero 5 veces','$'
.code
inicio:
    mov cx, 00005
ciclo:
    mov ax, @data
    mov ds, ax
    mov dx,offset mensaje
    mov ah, 09h
    int 21h
    loop ciclo
   
    mov ah, 04ch
    int 21h
    end inicio

martes, 27 de febrero de 2018

Programa que imprime Texto en el monitor


1. Uso de Constantes:




PILA SEGMENT STACK 'STACK'
DB 100H DUP (?)
PILA ENDS

DATOS SEGMENT

mensaje db 'Luis',10,13,''Angel,10,13,'Gallegos','$'

DATOS ENDS

CODIGO SEGMENT

ASSUME CS:CODIGO, SS:PILA, DS:DATOS

INICIO:

MOV AH,06H
MOV BH,6FH
MOV CX,0000H
MOV DX,104FH
INT 10H

MOV AH,02H
MOV BH,00H
MOV DX,0000H
INT 10H

MOV AX,DATOS
MOV DS,AX
LEA DX,MENSAJE
MOV AH,9H
INT 21H

MOV AX,4C00H
INT 21H

CODIGO ENDS

END INICIO
Fin de la conversación

Escribe un mensaje...




Esquema Entidad - Relacion


Creación del esquema de Base de datos:





- Exportar a una base de datos:






- Uso y Creación de la base de datos exportada:




Interrupciones en EMU8086


- Las principales interrupciones del 8086/8088 son las siguientes:







         

Cambio de color en las pantallas con el ensamblador

1. Programa que cambia el color de la pantalla:

;Programa que Cambia el color de la pantalla - Edgar Emmanuel Mendez Ruiz

PILA SEGMENT STACK 'STACK'
     DB 100H DUP (?)
PILA ENDS

DATOS SEGMENT
              MENSAJE DB 'Se ha cambiado el color de la pantalla$'
DATOS ENDS
          
CODIGO SEGMENT
              
              ASSUME CS:CODIGO, SS:PILA, DS:DATOS

INICIO: 

       MOV AH,06H
       MOV BH,2FH
       MOV CX,0000H
       MOV DX,184FH
       INT 10H
       
       MOV AH,02H
       MOV BH,00H
       MOV DX,0000H
       INT 10H
       
       MOV AX,DATOS
       MOV DS,AX
       LEA DX,MENSAJE
       MOV AH,9H
       INT 21H

       MOV AX,4C00H
       INT 21H

CODIGO ENDS

END INICIO







2.  Programa que cambia el color de pantalla mediante opciones:


Pila segment stack 'stack' ;Segmento de la pila
     db 100h dup (?)       ; A partir de la direccion 100 de la pila.
Pila ends

  datos segment
    
      titulo db 13,10,'  CAMBIAR FONDO DE PANTALLA  ',13,10,'$'
      mensaje db 'Presione ENTER si quiere la pantalla azul ' , ' Si quiere morado, presione 2 ',13,10,' Para salir ', ' Presione cualquier tecla',13,10,'$'

  datos ends

codigo segment ;segmento de codigo
       
       assume cs:codigo, ss:pila, ds:datos

Inicio:
           ;****************************** PREPARAR PANTALLA
   mov ah,0
       mov al,3h ; Modo Texto
       int 10h   ; Interrupcion de Video
       
       mov ax,0600h ; Limpiar Pantalla
       mov bh,0fh   ; O Color de fondo negro, el color de letra blanco
       mov cx,0000h
       mov dx,184Fh
       int 10h
       
       mov ah,02h
       mov bh,00
       mov dh,00
       mov dl,00
       int 10h
       
           ;****************************** MOSTRAR MENSAJE

       mov ax,datos
       mov ds,ax
       
       lea dx,titulo
       mov ah,9h
       int 21h
       
       lea dx,mensaje
       mov ah,9h
       int 21h
       
           ;****************************** CAPTURA DE TECLAS

       mov ah,08           ; Pausa y captura de datos db espera que el usuario presiona una tecla
       int 21h

       cmp al,13           ; Verifica al presionar ENTER, el cual tiene un codigo ascii
       je llamarAzul       ; Salto Condicional jump equals opcion 1 saltar si es igual a la opcion 1
       
       
       cmp al,50           ; Ascii 50 = numero 2 compara lo que tiene el regisro ah con el ascii 50 en el reg a1
       je llamarMorado
       
       jmp fin             ; Si no escoge ni ENTER ni 2, Sale del programa

       fin:                ; Saca el mensaje por pantalla

       mov ax,4c00h
       int 21h
       
llamarAzul:
      CALL AZULPROC
      
llamarMorado:
      CALL MORADOPROC
      
           ;****************************** STORE PROCEDURE AZUL

AZULPROC PROC NEAR

         mov ah,0
         mov al,3h ; Modo Texto
         int 10h   ; Interrupcion de video
         
         mov ax,0600h ; Limpiar Pantalla
         mov bh,0fh   ; Color de fondo negro, f color de letra blanco
         mov cx,0000h
         mov dx,184Fh
         int 10h
        
         mov ah,02h
         mov bh,00
         mov dh,00
         mov dl,00
         int 10h
         
;//////////////////////////////////////         

      mov ah,06h
      mov bh,1fh     ;2fh
      mov cx,0000h
      mov dx,184fh
      int 10h
      
      mov ax,4c00h
      int 21h
RET

AZULPROC ENDP

;*****************************************STORED PROCEDURE MORADO

MORADOPROC PROC NEAR

           mov ah,06h
           mov bh,5fh        ;2fh;3 para azul, 4 para guinda, 5 morado
           mov cx,0000h
           mov dx,184fh
           int 10h
           
           mov ax,4c00h
           int 21h
           
RET

MORADOPROC ENDP


codigo ends
end inicio               ; Podemos Asignar desde se inicia PC







Actividades en TurboAssambler



1. Limpiar Pantalla:


FIN_4C00H EQU 4C00H
DOS_21H EQU 21H
BIOS_l0H equ 10H


PILA SEGMENT STACK
DW 100 DUP('0')
PILA ENDS

CODIGO SEGMENT
CLS PROC FAR
ASSUME CS:CODIGO,SS:PILA
CALL LIMPIA_PANTALLA
MOV AX,FIN_4C00H
INT DOS_21H
CLS ENDP

LIMPIA_PANTALLA PROC NEAR
MOV AX,0600H
MOV BH,9AH
MOV CX,00H
MOV DX,484FH
INT BIOS_l0H
RET
LIMPIA_PANTALLA ENDP

CODIGO ENDS
END CLS









2. Mismo Programa en EMU8086:


Pila SEGMENT STACK "STACK"
DB 100 DUP ('0')
PILA ENDS


CODIGO SEGMENT


ASSUME CS:CODIGO,SS:PILA

INICIO:


MOV AH,06H
MOV BH,9FH
MOV CX,0000H
MOV DX,104FH
INT 10h


INT 21H
MOV AX,4C00H
INT 21H



CODIGO ENDS

END INICIO






3. Cambiar Color y Mostrar Mensaje:


DATOS SEGMENT

MENSAJE DB 10,13, "SE HA CAMBIADO EL COLOR DE LA PANTALLA",10,13,"$"


DATOS ENDS

CODIGO SEGMENT

ASSUME CS:CODIGO,SS:PILA, DS:DATA

INICIO:


MOV AH,06H
MOV BH,6FH
MOV CX,0000H
MOV DX,104FH
INT 10h


MOV AH,02H
MOV BH,00H
MOV DX,0000H
INT 10h

MOV AX, DATOS
MOV DX,AX
LEA DX,MENSAJE
MOV AH,9H
INT 21H

MOV AX,4C00H
INT 21H



CODIGO ENDS

END INICIO