sábado, 14 de abril de 2018

2.1.3. Requerimientos de instalación

Antes de instalar cualquier SGBD (Sistema Gestor de la Base de Datos) 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 y la modificación de los tipos archivos HTML para los diversos navegadores.
Se presenta a continuación una serie de requerimientos mínimos de hardware y software para instalar oracle 11g Express y MySQL estándar versión 5.1. en Windows Seven y Ubuntu 10.

Requerimientos mímimos de instalación de Oracle 12c y MySQL server versión 5.1
Requerimiento
Oracle
MySQL
RAM
2 GB
512 MB
Memoria virtual
1024 MB
1024 MB
Espacio disco duro para instalación
11 GB
1 GB
Tamaño máximo de la base de datos
4 GB
Sin limite
Sistema Operativo: Windows Server, Windows Seven Profesional, Linux, Unix
Arquitectura del Sistema 64-bit
Protocolo de red TCP/IP
Protocolo de red TCP/IP con SSL
La regla general para determinar el tamaño de la memoria virtual depende del tamaño de memoria RAM instalada. Si su sistema tiene menos de 4 GB de RAM por lo general el espacio de intercambio debe ser de al menos dos veces este tamaño. Si usted tiene más de 8 GB de memoria RAM instalada puede considerar usar el mismo tamaño como espacio de intercambio. Cuanta más memoria RAM tenga instalada, es menos probable usar el espacio de intercambio, a menos que tenga un proceso inadecuado.


2.1.4 Instalación del software de BD en modo transaccional


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éndola de forma unitaria en operaciones indivisibles, llamadas transacciones, esto quiere decir que todas las operaciones se realizan o no, si sucede algún error en la operación se omite todo el proceso de modificación de la base de datos, si no sucede ningún error se hacen toda la operación con éxito.

Una transacción es un conjunto de líneas de un programa que llevan insert o update o delete. Todo aquél software que tiene un log de transacciones (que es la "bitácora" que permite hacer operaciones de commit o rollback), propiamente es un software de BD; aquél que no lo tiene (v.g. D-Base), propiamente no lo es. Todo software de base de datos es transaccional; si el software de la BD no es "transaccional", en realidad NO es un "software" de BD; en todo caso, es un software que emula el funcionamiento de un verdadero software de BD. Cada transacción debe finalizar de forma correcta o incorrecta como una unidad completa. No puede acabar en un estado intermedio.

Se usan las siguientes métodos:

Ø  Begin TRans para iniciar la transacción
Ø  CommitTrans para efectuar los cambios con éxito
Ø  RollbackTrans para deshacer los cambios
Y depende que base de datos uses para efectuar las operaciones pero, es la misma teoría para cualquier BD.


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. Las variables son una forma de pasar información a los programas al momento de ejecutarlos.

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.
Toman su valor inicial generalmente de un archivo .profile, pero hay veces en que el usuario tiene que modificar los valores de alguna variable de ambiente cuando está tratando de instalar o ejecutar un nuevo programa.


Archivos LOG en MySQL
Hay cuatro registros (logs):

Registro de Errores (Error Log): Indica cuando arrancó y se detuvo el servidor. Se graba por defecto en la carpeta de datos de MySQL (archivo host_name.err, donde host_name es el nombre del servidor), pero la variable de sistema log_error permite indicar otra ruta si fuera necesario.

Registro General de Consultas (General Log File): Está en la carpeta de datos de MySQL, salvo que se indique la variable general-log-file. Contiene las consultas realizadas. Es el archivo host_name.log.

Registro Binario (Binary Log): Registra instrucciones DML. Los archivos binarios se almacenan por defecto en el directorio de datos. Sirve para intentar restaurar una base de datos en caso de desastre. Es binario, por lo que su manejo es complicado, para ver el contenido se usa la utilidad mysqlbinlog de esta forma: mysqlbinlog archivoLOG

Registro de Consultas Lentas (Slow Query Log File): Registra las consultas que tardaron más del tiempo mínimo establecido. El archivo está (salvo quese especifique slow-log-file como parámetro) en la carpeta de datos de MySQL con el nombre host_name-slow.log

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.
El proceso de instalación es muy simple y prácticamente no requiere intervención por parte del usuario.

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. Cada fila es identificada por los valores que aparecen en un subconjunto particular de la columna que se ha identificado por una llave primaria.

Una tabla de una base de datos es similar en apariencia a una hoja de cálculo, en cuanto a que los datos se almacenan en filas y columnas. Como consecuencia, normalmente es bastante fácil importar una hoja de cálculo en una tabla de una base de datos. La principal diferencia entre almacenar los datos en una hoja de cálculo y hacerlo en una base de datos es la forma de organizarse los datos

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, y es el motor de almacenamiento por defecto a no ser que tenga una configuración distinta a la que viene por defecto con MySQL.

El motor de almacenamiento MEMORY proporciona tablas en memoria. El motor de almacenamiento MERGE permite una colección de tablas MyISAM idénticas ser tratadas como una simple tabla. Como MyISAM, los motores de almacenamiento MEMORY y MERGE tratan tablas no transaccionales y ambos se incluyen en MySQL por defecto.

Nota: El motor de almacenamiento MEMORY anteriormente se conocía como HEAP.

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. En distribuciones fuente, puede activar o desactivar estos motores de almacenamiento configurando MySQL a su gusto.

CONCLUSIONES

En esta unidad vimos todo lo relacionados con los requerimientos y la instalación de MySQL enterprise Edition que es un gestor de base de datos, cuales son sus comandos generales de alta y baja, cual seria el procedimiento general para su buena instalación, también la instalación de un DB en modo transaccional entre mas puntos.

En esta unidad se pudo observar como seria la instalación de un gestor en especifico asi como todas las herramientas que debemos tomar en cuenta para su correcta instalación y aprender a crear diferentes bases de datos de diferentes especificaciones en este nuevo gestor.

jueves, 12 de abril de 2018

Posicionar cadena indicada por el usuario en coordenadas indicadas por el usuario

Posicionar cadena indicada por el usuario en coordenadas indicadas por el usuario

TITLE Cadena que solicita una cadena y una posición para mostrarla

gotoxy macro fila,col ; macro con nombre gotoxy con parametros fil,col
    mov ah,02h  ; posicionar cursor en pantalla
    mov dh,fila ; coordenada x para posicionar cursor
    mov dl,col  ; coordenada y para posicionar cursor
    mov bh,0h   ; posiciona en coordenadas pedidas
    int 10h
endm            ; termina macro 


pantalla macro que  ; macro pantalla con parametro que
    mov ah,02h      ; posicionar cursor en pantalla
    mov dl,que      ; recibimos caracter, y se almacena en "que"
    int 21h         
endm 


imprime macro eztryng    ;macro imprime con parametro eztryng
    mov dx,offset eztryng;coloca mensajes
    mov ah,9             ;funcion para imprimir variable
    int 21h
endm 



DATOS SEGMENT PARA PUBLIC
    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   ; variable para capturar cadena
    varx DB ?        ; variable para capturar coordenada x
    vary DB ?        ; variable para capturar coordenada y
vtext db 100 dup('$')


DATOS ENDS
CODIGO SEGMENT PARA PUBLIC 'code'
ASSUME CS:CODIGO,DS:DATOS
startup:
    mov ax,DATOS    ; asignacion de datos
    mov ds,ax       ; asignacion de datos al segmento datos
    
    imprime mensaje ; llama a macro imprime
    
    mov si,00h      ; limpia el apuntador SI

 leer:              ; metodo leer

    mov ax,0000     ; limpia ax
    mov ah,01h
    int 21h

    mov caracter[si],al  ;guarda dato capturado en variable de caracter
    inc si               ;incremeta el apuntador
    cmp al,0dh           ; compara si la ultima tecla presionada fue enter
    ja leer              ; si cumple brinca coordenadas
    jb leer              ; si no se cumple se vuelve a ejecutar leer

    mov dx,offset caracter ; mostrar caracter
    mov ah,0ah             ; lee cadna de texto por teclado
    int 21h

    
    imprime caracter    ; llama macro imprime con parametro caracter 


    imprime mensaje2    ; llama a macro imprime con parametro mensaje2


    mov ah,01h  ; captura lo que se teclea
    int 21h

    sub al,30h  ; resta 30 en hexadecimal para que sea reconocido como numero y no como caracter
    mov bl,al   ; se mueve a al

    mov varx,al ; se mueve a la variable varx

    imprime mensaje3   ; coordenadas y ( se repite para coordenada y)

    mov ah,01h
    int 21h

    sub al,30h
    mov bl,al
    mov vary,al
    
    mov ax,0003h      
    int 10h
    gotoxy vary,varx     ;llama a macro gotoxy con parametros varx y vary, como fil y 
    pantalla caracter[0] ;llama a macro pantalla para mostrar primer caracter

    mov ah,01h
    int 21h         ;interrupcion
    mov ax,4c00h    ;funcion de fin
    int 21h

CODIGO ENDS
end startup


Mi ejemplo Macro

Macro que cargue un mensaje del segmento de datos a AX, así nos ahorramos 3 lineas de código al momento de imprimir una cadena.

inicio macro   ;declaramos la macro, le damos el nombre de inicio
  mov ax,@data   ;Cargamos el segmento de datos.
  mov ds,ax
  mov dx,ax
endm

.model small
.stack 64
.data
  msj db 'Este es mi primer macro', 10,13,'$'
.code
  inicio  ;Llamamos al macro, lo único que hace es cargar msj del segmento de datos.
  mov ah,09h
  lea dx,msj ;puede ser mov dx,offset msj
  int 21h
  mov ax,4c00h ;Sale del programa
  int 21h
end

martes, 20 de marzo de 2018

Multiplicación de dos números ingresados por teclado (TURBO)

Multiplicación de dos números ingresados por teclado (TURBO)


.model small      ;se define el modelo de memoria
.stack            ;se define el tamano de la pila

datos segment      ;se define las variables

    nombre db, 13,10, "Multiplicacion de dos numeros ingresados por teclado",13,10,13,10,'$' ;nombre del programa

    mensaje1 db "Ingrese el primer numero:",13,10,'$'     ;primer numero de la multiplicacion
    mensaje2 db "Ingrese el 2do numero:",13,10,'$'   ;segundo numero de la multiplicacion 
    mensaje3 db "El resultado de la multiplicacion es: ",'$' ;resultado en pantalla
    
suma db 0

n1 db 0
n2 db 0
byteh db 0
bytel db 0
salto db " ",13,10,'$'      ;salto de fila

datos ends

codigo segment              ;comienzo de codigo
    
   assume cs:codigo, ds: datos

inicio proc far

 mov ax,datos   ;direccionamiento
 mov ds,ax      ;aqui es donde se guarda

;Limpiar Pantalla

mov ah, 00
mov al, 03h
int 10h

;Inicializacion de resgistros en 0

mov ah,02h
mov dl,00
int 10h

mov ah, 09h      ;lee el mensaje
lea dx,nombre
int 21h

;Instrucciones para la realizacion de la multiplicacion.

     mov ah,09h
     lea dx,mensaje1   ;mensaje de solicitud del primer numero
     int 21h
     
     mov ah,01h      ;lee los caracteres del teclado
     int 21h
     
     ;Conversion del numero.
     
     sub al,30h       ;hace la conversion ascii
     mov n1,al        ; se pasaa la variable n1
     int 21h
     
     mov ah,09h       ;impresion de caracteres
     lea dx, salto    ;saltar de fila
     int 21h
     
     mov ah,09h
     lea dx, mensaje2   ;mensaje del segundo numero
     int 21h
     
     mov ah,01h         ;leer y mostrar numero digitado
     int 21h
     
     sub al,30h          ;conversion ASCII
     mov n2,al           ;se pasa ala variable n2
     int 21h
     
     ;Operacion de sumas sucesivas
     
     mov cl,n2
     
     sumar:
     
      mov al,n1          ;movemos el registro al a el valor del numero 1
      add al,suma        ;sumamos a al el valor de la suma
      mov suma,al        ;movemos a suma el valor del resultado
      loop sumar
      
      mov ah, 09h         ;impresion de caracteres
      lea dx, mensaje3    ;impresion del mensaje 3
      int 21h
      
      mov al,suma
      aam                 ;corrige el resultado de la multiplicacion de datos ASCII en el registro ax
      mov bytel,al
      mov byteh,ah
      
      mov ah,02h
      
      mov dl,byteh
      add dl,30h
      int 21h
      
      mov dl,bytel
      add dl,30h
      int 21h 
     
      mov ah,09h            ;ipresion de caracteres
      lea dx,salto          ;salto de fila
      int 21h
      
      salir:                 ;retorna el mando al DOS
      
      mov ax, 4c00h
      int 21h
      
  inicio endp

  end inicio

Operación Cadena1

Operación Cadena1

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 un sistema gestor de Bases de Datos

Arquitectura de un sistema gestor de Bases de Datos


Se describe la arquitectura de un Sistema Gestor de Bases de Datos y las partes que lo componen.

Un sistema gestor de bases de datos (SGBD) es una colección de datos interrelacionados y un conjunto de programas para acceder a esos datos, según Silberschatz A., Korth H. y Sudarshan S. (2006).


Componentes de un Sistema Gestor de Bases de Datos
Almacenamiento en disco
Obervamos en la parte inferior del diagrama aparecen los datos en sí, el diccionario de datos que contiene información sobre los datos y es un tipo especial de tabla a la que solo tiene acceso el sistema de base de datos y no los usuarios en general. El diccionario de datos almacena entre otros datos, restricciones de seguridad e integridad (Date C. J., 2001). También están los índices, que se utilizan para buscar más rápidamente un registro. Estos, junto con los datos estadísticos son archivos que son almacenados en disco.
Gestor de almacenamiento
Luego observamos una serie de programas. El primer grupo de programas se encarga de gestionar el almacenamiento. Uno de ellos es el gestor de memoria intermedia, que atiende solicitudes de consultas que involucran información guardada en disco. Si esa información ya está en el gestor de memoria intermedia, se le proporciona al programa solicitante, la dirección del bloque de memoria; de lo contrario, se busca sitio en la memoria, se lee el disco, y se escribe en la memoria intermedia, acto seguido, se le proporciona al solicitante la dirección del bloque.
El gestor de transacciones gestiona la ejecución de las transacciones o subtransacciones que acceden a los datos almacenados. Una transacción es un grupo de instrucciones (de consulta o actualización) que se deben ejecutar asegurando las propiedades de Atomicidad, Consistencia, Aislamiento y Durabilidad (ACID).
El gestor de archivos gestiona la asignación de espacio de almacenamiento en disco. Y el gestor de autorizaciones e integridad, comprueba que se satisfagan las restricciones de integridad y la autorización de los usuarios para tener acceso a los datos.
Procesador de consultas
El otro grupo de programas se encarga de las consultas. Allí podemos observar al intérprete de LDD (Lenguaje de Definición de Datos) que interpreta las instrucciones del LDD y actualiza el diccionario de datos. También está un compilador de LMD (Lenguaje de manipulación de datos) que traduce las instrucciones del LMD que están en un lenguaje de consultas, a instrucciones de bajo nivel que serán ejecutadas por el motor de evaluación de consultas. El motor de evaluación de consultas es quien ejecuta las instrucciones de bajo nivel que le pasa el compilador de LMD.
LDD = Lenguaje de Definición de Datos.
LMD = Lenguaje de manipulación de datos.
Usuarios
Por último, observamos a los usuarios de la base de datos que interactúan cada uno de llos a través de su interfaz.
Los usuarios normales son usuarios que no requieren preparación especial en el manejo de base de datos y que utilizan el sistema a través de programas de aplicación que han sido escritos para ellos. Los programadores de aplicaciones son usuarios de la base de datos y escriben programas de aplicación. Pueden llegar a utilizar herramientas DRA (Desarrollo Rápido de Aplicaciones), con las que pueden crear formularios e informes con poco esfuerzo de programación.
Los usuarios sofisticados son quienes utilizan la base de datos a través de consultas escritas en un lenguaje de consultas. Y los usuarios especializados son usuarios sofisticados que crean aplicaciones de bases de datos especializadas que abarcan otros campos aparte del procesamiento tradicional de datos, por ejemplo los sistemas expertos.
¿Y el Administrador de Bases de Datos? Entre sus tareas se encuentran las siguientes:
·         Crear el esquema de la base de datos, es decir el diseño lógico de la B.D.
·         Definir la estructura y el método de acceso.
·         Modificar el esquema y la organización física.
·         Autoriza el acceso a la base de datos.
·         Da mantenimiento de rutina a la B.D., lo que incluye hacer copias de seguridad, asegurarse de que exista suficiente espacio libre, y supervisar el rendimiento del sistema.


Multiplicación de 2 números de 2 cifras en EMU8086

Multiplicación de 2 números de 2 cifras en EMU8086



  • Código

.model small ;Modelo de memoria
.stack

.data  ;Definicion de datos(variables), donde se almacenara informacion
.code 
   ;Variables del primer numero ingresado
   unidades_n1      db ?
   decenas_n1       db ?
 
   ;Variables del segundo numero ingresado
   unidades_n2      db ?
   decenas_n2       db ?
 
   ;Variables temporales para los resultados de la primera multiplicacion
   res_temp_dec_n1  db ?
   res_temp_cen_n1  db ?
 
   ;Variables temporales paara los resultados de la segunda multiplicacion
   res_temp_dec_n2  db ?
   res_temp_cen_n2  db ?
 
   ;Variables para los resultados
   res_unidades     db ?
   res_decenas      db ?
   res_centenas     db ?
   res_uni_millar   db ?
 
   ;Variable de acarreo en multiplicacion
   acarreo_mul      db 0
 
   ;Variable de acarreo en suma
   acarreo_suma     db 0
 
.startup
   ;cls
   mov ah,00h         ;Function(Set video mode)
   mov al,03          ;Mode 80x25 8x8 16
   int 10h            ;Interruption Video

   mov ah,01h         ;Function(character read)
   int 21h            ;Interruption DOS functions
   sub al,30h         ;ajustamos valores
   mov decenas_n1,al  ;[chr1].chr2 * chr3 = ac.r1.r2

   mov ah,01h         ;Function(character read)
   int 21h            ;Interruption DOS functions
   sub al,30h         ;Ajustamos valores
   mov unidades_n1,al ;chr1.[chr2] * chr3 = ac.r1.r2

   mov ah,02h         ;Function(character to send to standard output)
   mov dl,'*'         ;Character to show
   int 21h

   mov ah,01h         ;Function(Read character)
   int 21h            ;Interruption DOS Functions
   sub al,30h         ;Transform(0dec = 30hex)
   mov decenas_n2,al  ;chr1.chr2 * [chr3] = ac.r1.r2
 
   mov ah,01h         ;Function(Read character)
   int 21h            ;Interruption DOS Functions
   sub al,30h         ;Transform(0dec = 30hex)
   mov unidades_n2,al
 
   mov ah,02h         ;Character to send to standar output
   mov dl,'='         ;
   int 21h            ;Interruption DOS functions

   ;Realizamos las operaciones
 
   ;Primera multiplicacion  ; Explicacion utilizando la multiplicacion de 99*99 ->(n1*n2)
   mov al,unidades_n1       ; al=9
   mov bl,unidades_n2       ; bl=9
   mul bl                   ; 9*9=81 -> (al=81)
   mov ah,00h               ;
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_mul,ah       ; acarreo_mul = 8
   mov res_unidades,al      ; res_unidades= 1 -> Reultado de unidades
 
   ;Segunda multiplicacion
   mov al,decenas_n1        ; al=9
   mov bl,unidades_n2       ; bl=9
   mul bl                   ; 9*9=81 -> (al=81)
   mov res_temp_dec_n1,al   ; res_temp_dec_n1= 81
   mov bl,acarreo_mul       ; bl= 8
   add res_temp_dec_n1,bl   ; res_temp_dec_n1= 81+8= 89
   mov ah,00h               ;
   mov al,res_temp_dec_n1   ; al= 89
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov res_temp_cen_n1,ah   ; res_temp_cen_n1= 8 
   mov res_temp_dec_n1,al   ; res_temp_dec_n1= 9   
   
   ;Tercera multiplicacion  ; Resultado actual = 000>1
   mov al,unidades_n1       ; al= 9
   mov bl,decenas_n2        ; bl= 9
   mul bl                   ; 9*9=81 -> (al=81)
   mov ah,00h               ;
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_mul,ah       ; acarreo_mul= 8
   mov res_temp_dec_n2,al   ; res_temp_dec_n2= 1
                            ;
   mov bl, res_temp_dec_n1  ; bl= 9
   add res_temp_dec_n2,bl   ; res_temp_dec_n2= 1+9= 10
   mov ah,00h               ;
   mov al, res_temp_dec_n2  ; al = 10
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_suma, ah     ; acarreo_suma = 1
   mov res_decenas,al       ; res_decenas  = 0 -> Reultado de decenas
 
   ;Tercera multiplicacion  ; Resultado actual = 00>01
   mov al,decenas_n1        ; al= 9
   mov bl,decenas_n2        ; bl= 9
   mul bl                   ; 9*9=81 -> (al=81)
   mov res_temp_cen_n2,al   ; res_temp_cen_n2= 81
   mov bl,acarreo_mul       ; bl= 8
   add res_temp_cen_n2,bl   ; res_temp_cen_n2= 89
   mov ah,00h               ;
   mov al,res_temp_cen_n2   ; al= 89
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov res_uni_millar,ah    ; res_uni_millar = 8
   mov res_temp_cen_n2,al   ; res_temp_cen_n2= 9
                            ;
   mov bl, res_temp_cen_n1  ; bl= 8
   add res_temp_cen_n2, bl  ; res_temp_cen_n2= 17
   mov bl, acarreo_suma     ; bl= 1
   add res_temp_cen_n2,bl   ; res_temp_cen_n2= 17+1= 18
   mov ah,00h               ;
   mov al,res_temp_cen_n2   ; al= 18
   AAM                      ;
   mov acarreo_suma,ah      ; acarreo_suma= 1
   mov res_centenas,al      ; res_centenas= 8 -> Resultado de centenas
 
                            ; Resultado actual= 0>801
   mov bl, acarreo_suma     ; bl= 1
   add res_uni_millar, bl   ; res_uni_millar= 8+1= 9 -> Resultado de unidades de millar
                            ; Reultado actual 9801

   ;Mostramos resultados
   mov ah,02h
   mov dl,res_uni_millar
   add dl,30h
   int 21h
 
   mov ah,02h
   mov dl,res_centenas
   add dl,30h
   int 21h     

   mov ah,02H
   mov dl,res_decenas
   add dl,30h
   int 21h       

   mov ah,02H
   mov dl,res_unidades
   add dl,30h
   int 21h     
.exit
end

jueves, 15 de marzo de 2018

Imprimir letras de Colores


  • Programa que imprime letras de colores en EMU8086
  • Código

BIOS EQU 10H

DOS EQU 21H
FIN EQU 4C00H

.DATA
    TITULO DB 'Edna Garcia (:'
    COLORES DB 5BH
    DB 5FH
    DB 3DH
    DB 5FH
    
    DB 00H
    
    DB 5BH
    DB 0F0H
    DB 05DH
    DB 09FH
    DB 03BH
    DB 09FH
    
    DB 00H
     
    DB 08AH
    DB 01BH
    
    
   
.CODE
    INICIO PROC NEAR:
    MOV AX, @DATA
    MOV DS, AX
    ;Esta parte de aqui no es necesaria
    INT BIOS
   
    MOV CX, 15
       
        BUCLE:
            ;Ponemos esto para no agarrar basura
            MOV DX,SI
            ADD DX,35  ;Columna
            MOV DH, 12 ;Renglon
            CALL COLOCA
            MOV AL, [SI+OFFSET TITULO]
            MOV BL, [SI+OFFSET COLORES]
            CALL COLOR
            INC SI
        LOOPNZ BUCLE
       
        MOV AH, 0
        INT DOS
        CALL COLOCA
        MOV AX, FIN
        INT DOS
   
    COLOR PROC
    MOV AH, 9
    INT BIOS
    RET
       
    COLOCA PROC
    MOV AH,2
    INT BIOS
    RET

END INICIO

martes, 13 de marzo de 2018