Blog
miércoles, 24 de mayo de 2017
martes, 2 de mayo de 2017
Programa Vector
;==========================================================
; PROGRAMA : pe26_arr
; FUNCION : Vector ingresa datos .
; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
; FECHA : jueves 27 abril 2017
;=========================================================
title reves.asm
.model small ;Modelo de memoria m?s utilizado
.stack 256h ;se define el espacio necesario para la pila
.data
CR equ 13 ; Constante CR (Retorno de carro) En decimal o
LF equ 10 ; Constante LF (Salto de l?nea) en hex es igual
mens db 'Escribe algo y te lo convierto al reves', CR,LF,'$'
salto db CR,LF,'$'
cadena label byte ;cadena de texto
cant db 20
max db 00
campo db 20 dup(' ')
.code
inicio:
mov ax,@data ; Inicializar correctamente el
mov ds,ax ; registro de datos
push ds ; Guardar ds en vector
pop es ;restaruamos es con sus valores anteriores
mov ah,09h ; Esperar tecla
lea dx,mens ; CARGA ETIQUETA MENSAJE
int 21h ; Llamar a la interrupci?n del DOS
mov ah,0ah ; Esperar tecla
lea dx,cadena ; CARGA ETIQUETA CADENA
int 21h ; Llamar a la interrupci?n del DOS
mov ah,09h ; Esperar tecla
lea dx,salto
int 21h ; Llamar a la interrupci?n del DOS
mov cl,cant
mov bx, offset campo
add bl, cant
loopo:
mov dl,[bx] ; Movemos el siguiente caracter ASCII al dl
mov ah,02h ;Leer car?cter desde el teclado
int 21h ; Llamar a la interrupci?n del DOS
dec bl
dec cl
cmp cl,0
je salir
jmp loopo
salir:
mov dl,[bx] ; Movemos el siguiente caracter ASCII al dl
mov ah,02h ;Leer car?cter desde el teclado
int 21h ; Llamar a la interrupci?n del DOS
mov ax,4c00h ;regresamos el control al sistema operativo
int 21h ; Llamar a la interrupci?n del DOS
end inicio
; PROGRAMA : pe26_arr
; FUNCION : Vector ingresa datos .
; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
; FECHA : jueves 27 abril 2017
;=========================================================
title reves.asm
.model small ;Modelo de memoria m?s utilizado
.stack 256h ;se define el espacio necesario para la pila
.data
CR equ 13 ; Constante CR (Retorno de carro) En decimal o
LF equ 10 ; Constante LF (Salto de l?nea) en hex es igual
mens db 'Escribe algo y te lo convierto al reves', CR,LF,'$'
salto db CR,LF,'$'
cadena label byte ;cadena de texto
cant db 20
max db 00
campo db 20 dup(' ')
.code
inicio:
mov ax,@data ; Inicializar correctamente el
mov ds,ax ; registro de datos
push ds ; Guardar ds en vector
pop es ;restaruamos es con sus valores anteriores
mov ah,09h ; Esperar tecla
lea dx,mens ; CARGA ETIQUETA MENSAJE
int 21h ; Llamar a la interrupci?n del DOS
mov ah,0ah ; Esperar tecla
lea dx,cadena ; CARGA ETIQUETA CADENA
int 21h ; Llamar a la interrupci?n del DOS
mov ah,09h ; Esperar tecla
lea dx,salto
int 21h ; Llamar a la interrupci?n del DOS
mov cl,cant
mov bx, offset campo
add bl, cant
loopo:
mov dl,[bx] ; Movemos el siguiente caracter ASCII al dl
mov ah,02h ;Leer car?cter desde el teclado
int 21h ; Llamar a la interrupci?n del DOS
dec bl
dec cl
cmp cl,0
je salir
jmp loopo
salir:
mov dl,[bx] ; Movemos el siguiente caracter ASCII al dl
mov ah,02h ;Leer car?cter desde el teclado
int 21h ; Llamar a la interrupci?n del DOS
mov ax,4c00h ;regresamos el control al sistema operativo
int 21h ; Llamar a la interrupci?n del DOS
end inicio
Programa Multiplicación de dos números
;=======================================================
; PROGRAMA : pe24_mul
; FUNCION : Multimplicacion de dos numeros.
; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
; FECHA : jueves 27 abril 2017
;======================================================
.model small ;Modelo de memoria m?s utilizado
.stack
.data ;definici?n de datos(variables), donde se almacenara informaci?n
.code
chr1 db ?
chr2 db ?
chr3 db ?
r1 db ?
r2 db ?
ac 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 chr1,al ;[chr1].chr2 * chr3 = ac.r1.r2
mov ah,01h ;Function(character read)
int 21h ;Interruption DOS functions
sub al,30h ;Ajustamos valores
mov chr2,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 chr3,al ;chr1.chr2 * [chr3] = ac.r1.r2
mov ah,02h ;Character to send to standar output
mov dl,'=' ;
int 21h ;Interruption DOS functions
;Realizamos operaci?n
mov al,chr3 ;al = chr3
mov bl,chr2 ;bl = chr2
mul bl ;AL = chr3*chr2 (BL*AL)
mov Ah,0h ;
AAM ;ASCII Adjusment
mov ac,AH ;ac = AH (Acarreo)
mov r2,AL ;r2 = AL (Unidad del resultado)
mov al,chr3 ;AL = chr3
mov bl,chr1 ;BL = chr1
mul bl ;AL = chr1*chr3 (BL*AL)
mov r1,al ;r1 = AL (Decena del resultado)
mov bl,ac ;BL = Acarreo anterior
add r1,bl ;r1 = r1+ac (r1 + Acarreo)
mov ah,00h ;
mov al,r1 ;AL = r1 (Asignaci?n para el ajust)
AAM ;ASCII Adjustment
mov r1,al ;r1 = AL
mov ac,ah ;ac = AH (Acarreo para la Centena del resultado)
;Mostramos resultado
mov ah,02h
mov dl,ac
add dl,30h
int 21h ;Mostramos ac (Centena)
mov ah,02H
mov dl,r1
add dl,30h
int 21h ;Mostramos r1 (Decena)
mov ah,02H
mov dl,r2
add dl,30h
int 21h ;Mostramos r2 (Unidad)
.exit
end
; PROGRAMA : pe24_mul
; FUNCION : Multimplicacion de dos numeros.
; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
; FECHA : jueves 27 abril 2017
;======================================================
.model small ;Modelo de memoria m?s utilizado
.stack
.data ;definici?n de datos(variables), donde se almacenara informaci?n
.code
chr1 db ?
chr2 db ?
chr3 db ?
r1 db ?
r2 db ?
ac 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 chr1,al ;[chr1].chr2 * chr3 = ac.r1.r2
mov ah,01h ;Function(character read)
int 21h ;Interruption DOS functions
sub al,30h ;Ajustamos valores
mov chr2,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 chr3,al ;chr1.chr2 * [chr3] = ac.r1.r2
mov ah,02h ;Character to send to standar output
mov dl,'=' ;
int 21h ;Interruption DOS functions
;Realizamos operaci?n
mov al,chr3 ;al = chr3
mov bl,chr2 ;bl = chr2
mul bl ;AL = chr3*chr2 (BL*AL)
mov Ah,0h ;
AAM ;ASCII Adjusment
mov ac,AH ;ac = AH (Acarreo)
mov r2,AL ;r2 = AL (Unidad del resultado)
mov al,chr3 ;AL = chr3
mov bl,chr1 ;BL = chr1
mul bl ;AL = chr1*chr3 (BL*AL)
mov r1,al ;r1 = AL (Decena del resultado)
mov bl,ac ;BL = Acarreo anterior
add r1,bl ;r1 = r1+ac (r1 + Acarreo)
mov ah,00h ;
mov al,r1 ;AL = r1 (Asignaci?n para el ajust)
AAM ;ASCII Adjustment
mov r1,al ;r1 = AL
mov ac,ah ;ac = AH (Acarreo para la Centena del resultado)
;Mostramos resultado
mov ah,02h
mov dl,ac
add dl,30h
int 21h ;Mostramos ac (Centena)
mov ah,02H
mov dl,r1
add dl,30h
int 21h ;Mostramos r1 (Decena)
mov ah,02H
mov dl,r2
add dl,30h
int 21h ;Mostramos r2 (Unidad)
.exit
end
Programa Suma de dos números
;=========================================================
; PROGRAMA : pe22_sum
; FUNCION : Suma de dos numeros.
; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
; FECHA : jueves 27 abril 2017
;========================================================
.model small
.stack 100
.data
msj1 db 'Numero 1: ','$'
msj2 db 13,10,'Numero 2: ','$'
msj3 db 13,10,'Suma: ','$'
msj5 db 13,10,'Multiplicacion: ','$'
linea db 13,10,'$'
var1 db 0
var2 db 0
.code
.startup
call limpia
mov ah,09h
lea dx, msj1 ;desplegar numero 1:
int 21h
call leer ;lee primer numero
sub al,30h ;restar 30h para obtener el numero
mov var1,al ;lo guardo en var1
mov ah,09h
lea dx, msj2 ;desplegar numero 2:
int 21h
call leer ;lee segundo numero
sub al,30h ;restar 30h para obtener segundo valor
mov var2,al ;guardar en var2
mov bl,var2 ;mover a bl
;******************* SUMA
add bl,var1 ; realizo la suma de var2(bl) y var1 y el resultado queda en bl
mov ah,09h
lea dx,msj3 ;imprimir suma
int 21h
mov dl,bl ;pongo en dl el numero a imprimir var2(bl)
add dl,30h ; agrego 30h para obtener el caracter
mov ah,02h ;imprime un caracter
int 21h
;******************MULTIPLICACION
mov ah,09h
lea dx,msj5 ;desplegar mult
int 21h
mov al,var1
mov bl,var2
mul bl ;mult al=al*bl
mov dl,al ;mover al a dl para imprimir
add dl,30h ;sumar 30 para obtener caracter
mov ah,02h ;imprimir caracter
int 21h
.exit
; ****************PROCEDIMIENTOS
salto proc near
mov ah,09h
lea dx,linea
int 21h
mov dl,00h
ret
salto endp
leer proc near
mov ah,01h;leer caracter desde el teclado
int 21h;lee primer caracter
ret
leer endp
limpia proc near
mov ah,00h
mov al,03h
int 10h
ret
limpia endp
end
; PROGRAMA : pe22_sum
; FUNCION : Suma de dos numeros.
; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
; FECHA : jueves 27 abril 2017
;========================================================
.model small
.stack 100
.data
msj1 db 'Numero 1: ','$'
msj2 db 13,10,'Numero 2: ','$'
msj3 db 13,10,'Suma: ','$'
msj5 db 13,10,'Multiplicacion: ','$'
linea db 13,10,'$'
var1 db 0
var2 db 0
.code
.startup
call limpia
mov ah,09h
lea dx, msj1 ;desplegar numero 1:
int 21h
call leer ;lee primer numero
sub al,30h ;restar 30h para obtener el numero
mov var1,al ;lo guardo en var1
mov ah,09h
lea dx, msj2 ;desplegar numero 2:
int 21h
call leer ;lee segundo numero
sub al,30h ;restar 30h para obtener segundo valor
mov var2,al ;guardar en var2
mov bl,var2 ;mover a bl
;******************* SUMA
add bl,var1 ; realizo la suma de var2(bl) y var1 y el resultado queda en bl
mov ah,09h
lea dx,msj3 ;imprimir suma
int 21h
mov dl,bl ;pongo en dl el numero a imprimir var2(bl)
add dl,30h ; agrego 30h para obtener el caracter
mov ah,02h ;imprime un caracter
int 21h
;******************MULTIPLICACION
mov ah,09h
lea dx,msj5 ;desplegar mult
int 21h
mov al,var1
mov bl,var2
mul bl ;mult al=al*bl
mov dl,al ;mover al a dl para imprimir
add dl,30h ;sumar 30 para obtener caracter
mov ah,02h ;imprimir caracter
int 21h
.exit
; ****************PROCEDIMIENTOS
salto proc near
mov ah,09h
lea dx,linea
int 21h
mov dl,00h
ret
salto endp
leer proc near
mov ah,01h;leer caracter desde el teclado
int 21h;lee primer caracter
ret
leer endp
limpia proc near
mov ah,00h
mov al,03h
int 10h
ret
limpia endp
end
miércoles, 19 de abril de 2017
Unidad III: Modularización
Introducción:
la programación modular es uno de los métodos de diseño mas flexibles y poderosos para el mejoramiento de la productividad de un programa. Usando la programación modular el problema se divide en módulos, donde cada una de los cuales ejecuta una única actividad o tarea y se codifican independientemente de otros modulo.Cada uno de estos módulos se analiza, se codifica y se prueba de preferencia por separado.
al trabajr conlenguaje ensamblador, la necesidad de la estructura es, si cabe, aún es más vital, puesto que cualquier tarea, por encilla que parezca, puede requerir una gran lista de sentencias ejecutables.
Todo programa contiene un módulo denominado programa principal que controla todo llo que sucede; si se transfiere el control a un submódul, este ejecuta su función y una vez que la termina, regresa el control al módulo desde donde fue llamado. En mucho casos es el modulo principal.
Si la tarea asignada a cada submódulo es demasiado compleja, éste deberá descomponerse en otros módulos más pequeños. Este proceso de descomposición continua hasta que cada módulo tenga una tarea especifica que ejecutar. Esta tarea puede ser:
A) Entreada
B) Salida
C) Manipulación de datos
D) Contro, de otros modulos
E) Alguna combinación de los anteriores
En el lenguaje ENSAMBLADOR esta tecnica se puede llevar a cabo mediante MACROS Y PROCEDIMIENTOS.
3.1 Procedimientos
Es una colección de instrucciones que realizan una tarea específica. Dependiendode su extensión y complejidad, un programa puede contener uno, algunos o
inclusive cientos de procedimientos. Para emplear un procedimiento en un
programa se requiere definirlo y llamarlo. Al definir un procedimiento escribimos
las instrucciones que contiene. Al llamar al procedimiento transferimos el fluijo al
procedimiento para que sus instrucciones se ejecuten. Se define como:
PROC nomProc
proposicion
[proposicion]
...
ENDP [nomProc]
La llamada a un procedimiento tiene la siguiente forma:
CALL nomProc
Pra regresar de un procedimiento se utiliza
RET
Un buen procediminto debe:
- Hacer solo una tarea.
- Ser tan pequeño como sea posible y tan largo como sea necesario.
- Contener un comentario con su proposito, datos de entrada y salida.
- Entenderse por si solo.
- Funcionar como lo haría una instrucción del microprocesador.
- No usar variables globales ni para recibir datos, ni regresar un resultado, ni almacenar temporalmente resultados intermedios.
3.2 Macros
Es un conjunto de instrucciones asociadas a un identificador: el nombre de lamacro.
Este conjunto de instrucciones es invocado como una sola instrucción o
macroinstrucción. Para emplear una macro en un programa debemos de definir la
macro e invocar la macro.
La definición de una macro establece el nombre al que se le asocia la macro, el
número y nombre de sus parámetros formales y qué instrucciones contiene la
macroinstrucción. La sintaxis de la definición de una macro es la siguiente:
MACRO nombMacro [parForm[, parForm]...]
proposición
[proposición]
...
ENDM [nombMacro]
Aunque la definición de una macro puede ir en cualquier parte de un programa, el
lugar más recomendable para su localización es al principio de un archivo, antes
de los segmentos de datos y de código.
Al encotrar una invocación de una macro, el macroensamblador substituye la línea
con la invocación por las proposiciones que contiene la definición de la macro.
Este proceso de substitución se conoce como expansión de la macro. La sintaxis
de la invocación de la macro es similar a cualquier instrucción:
nomMacro [parReal[, parReal]...]
donde cada parReal es conocido como un parametro real de la macro. Al
expandirse la macro cada una de las ocurrencias de un parametro formal en la
definición de la macro se substituye por su correspondiente parámetro real.
miércoles, 5 de abril de 2017
2.1.1 Estructura de memoria y procesos de la instancia (RESUMEN)
2.1.1 Estructura de memoria y
procesos de la instancia
DBMS
Definición
Es un sistema robusto que es capaz de
emplear algoritmos de almacenamiento y recuperación de información para poder
implementar un modelo de datos de manera física garantizando que todas las
transacciones que se realizan con respecto a dichos datos sean
"ácidas" (Atomicity, Consistency, Isolation, Duration).
Para que un
DBMS pueda funcionar, primero se debe hacer una instancia de este. Esta
instancia está compuesta principalmente de tres componentes:
·
Archivos
·
Estructuras
de memoria.
·
Estructuras
de procesos.
Cada una de estas estructuras se puede dividir a su vez en diferentes
puntos.
Archivos
·
Control (ctl): almacenan información
acerca de la estructura de archivos de la base.
·
Rollback (rbs): cuando se modifica el
valor de alguna tupla en una transacción, los valores nuevos y anteriores se
almacenan en un archivo, de modo que si ocurre algún error, se puede regresar
(rollback) a un estado anterior.
·
Redo (rdo): bitácora de toda
transacción, en muchos dbms incluye todo tipo de consulta incluyendo aquellas
que no modifican los datos.
·
Datos (dbf): el tipo más común,
almacena la información que es accesada en la base de datos.
·
Indices (dbf) (dbi): archivos
hermanos de los datos para acceso rápido.
·
Temp (tmp): localidades en disco
dedicadas a operaciones de ordenamiento o alguna actividad particular que
requiera espacio temporal adicional.
Estructura de Memoria
Área Global del
sistema (SGA): Es un grupo de estructuras de la memoria compartida que contiene
datos e información de control de una instancia de una BD. Si varios usuarios
se conectan de forma concurrente a la misma instancia, entonces los datos se
comparten en el SGA, por lo que también se llama shared global area.
Estructura
de Datos del SGA
·
Caché de los Buffers
·
Buffer del registro de Redo
·
El Pool compartido
·
Large Pool
·
Java Pool
·
Streams Pool
·
Caché de diccionario
Caché de los Buffers (Database Buffer Cache)
Contiene copias de los bloques de
datos de lectura de las páginas. Todos los procesos de los usuarios conectados
concurrentemente a la instancia comparten el acceso a ella.
Buffer del registro del Rehacer (Redo Log Buffer)
Contiene información sobre cambios
hechos a la base de datos, la cual se almacena en las ‘entradas redo’. Estas
entradas contienen la información necesaria para reconstruir, o rehacer cambios
hechos en la base de datos mediante las operaciones INSERT, UPDATE, DELETE,
CREATE, ALTER o DROP y se usan para la recuperación de la base de datos, si
fuera necesario.
El Pool Compartido
Es la parte del SGA
que contiene la cache de biblioteca, la cache de diccionario, los buffers para
los mensajes de ejecución paralela y las estructuras de control.
Large Pool
El administrador de la base de datos
puede configurar un área de memoria opcional llamado large pool que proporciona
grandes cantidades de memoria para asignar:
·
Memoria de la sesión para el servidor compartido y el Oracle XA
interface (usado donde las transacciones interactúan con más de una base de
datos)
·
Procesamiento de E/S
·
Copias de seguridad y operaciones de recuperación
Java Pool
Se usa en la memoria del servidor
para almacenar todo el código y datos del JVM en las sesiones.
Streams Pool
En una única base
de datos, se puede especificar que los flujos de memoria se asignen desde un
pool en el SGA llamado Streams pool.
Cache de diccionario (Dictionary Cache)
El
diccionario de datos es una colección de tablas y vistas de la base de datos
que contienen información sobre la base de datos (sus estructuras y sus
usuarios).
Oracle accede con frecuencia al
diccionario de datos, por lo que tiene dos localizaciones especiales en memoria
designadas a mantenerlo. Una de ellas es la caché del diccionario de datos,
también conocida como la cache de fila por que contiene datos sobre las filas
en vez de los buffers (los cuales contienen bloques de datos), y la otra es el
cache de biblioteca.
Estructuras de Proceso
Procesos de usuario: Cada
proceso de usuario representa la conexión de un usuario al servidor
Procesos
de segundo plano: El servidor se
vale de una serie de procesos que son el enlace entre las estructuras físicas y
de memoria.
· SMON
· PMON
· DBWR
· LGWR
· CKPT
· ARCH
· RECO
· LCK
Monitor del
sistema (System Monitor, SMON)
Es
responsable de efectuar la recuperación de un error cuando se arranca la
instancia a continuación de algún tipo de fallo.
Monitor de procesos (Process Monitor, PMON)
Es
responsable de controlar los procesos de usuario que accedan a la base de datos
y recuperados después de producirse algún error.
Escritor de base de datos (Database
Writer, DBWR)
El proceso DBWR es responsable de escribir los
bloques modificados (sucio) desde la caché de búfer del SGA a los archivos de
datos situados en disco.
Escritor de
registro (Log Writer, LGWR)
Es
responsable de escribir los datos desde el búfer de registro al archivo de
redo.
Punto de control (Checkpoint, CKPT)
Este proceso
escribe en los ficheros de control los checkpoints. Estos puntos de
sincronización son referencias al estado coherente de todos los ficheros de la
BD en un instante determinado, en un punto de sincronización.
Archivador (Archiver, ARCH)
Es
responsable de copiar los archivos de registro de rehacer en línea en el
soporte de almacenamiento de archivo cuando dichos registros se llenan.
Recuperador (Recoverer, RECO)
Es responsable de efectuar las tareas de limpieza
requeridas por las transacciones distribuidas que hayan fallado o que hayan
sido suspendidas.
Suscribirse a:
Entradas (Atom)