viernes, 4 de mayo de 2018

WxGlade


WxGlade 


Es un diseñador de GUI escrito en Python con el popular toolkit GUI wxPython, que te ayuda a crear interfaces de usuario WxWidgets / WxPython . Por el momento, puede generar código Python, C ++ y XRC ( WxWidgets 'XML resources).

Como puede adivinar por su nombre, su modelo es Glade, el famoso constructor de GUI GTK + / GNOME, con el que wxGlade comparte la filosofía y la apariencia (pero no una línea de código).

No es (y nunca será) un IDE con todas las funciones, sino simplemente un "diseñador": el código generado no hace nada aparte de mostrar los widgets creados. Si está buscando un IDE completo, tal vez BoaConstructor o PythonCard es la herramienta adecuada.

Qué puede y no puede hacer wxGlade

  • wxGlade desarrolla la GUI y el código asociado.
  • Crea las ligaduras de los widgets con sus manejadores de eventos y los métodos manejadores de eventos vacíos.
  • wxGlade no desarrolla el código de la aplicación
  • wxGlade no es un EID completo. De otra manera, wxGlade no incluye un depurador, compilador ni editor; por el contrario, es usado conjuntamente con ellos, SPE (Stanys Python Editor) es un EDI multiplataforma para Python que incluye wxGlade como diseñador de la interfaz gráfica.

miércoles, 2 de mayo de 2018

Programas de Macros


Mi ejemplo de Macro

Macro que al escribir minúsculas las convierte a mayúsculas.



ORG 100H  

mayusculas macro 
     mov tecla, al
     cmp al,13
     jz fin:
     cmp tecla, 122 ;si tecla es mayor a 122 entonces ir a fin3 (tecla > 122)
     ja fin3
     cmp tecla,96 ;si tecla no es mayor a 96 ir a fin3 (tecla <= 96)
     jng fin3
     sub tecla, 32 ;si es 'a' hasta 'z' entonces restarle 32

fin3: 
     mov ah,2
     mov dl,tecla
     int 21h ;interrupcion
     jmp lectura

endm

 .model small
 .stack 64 ; segmento pila
 .data     ;segmento datos
    msj  db "Escribe una cadena en minusculas para comprobar: $";mensaje para pregunta
  
 .code ;segmento codigo

  mov ax, @data
  mov ds, ax
  mov ah, 09
  lea dx, msj ;desplegar mensaje
  int 21h
 
lectura:
 mov ah,7
 int 21h; interrupcion
 mayusculas


fin:
ret
tecla db 0



MACROS de mis compañeros

Ordenamiento de vector con macros (Ricardo Castillo)

.model small                       ;MODELO DEL PROGRAMA
include 'emu8086.inc '             ;SE INCLUYE LA LIBRERIA EMU 8086
include 'macros.txt'          ;SE MANDA A LLAMAR LA MACROS QUE ES EXTERNA
                                   ;SE DEFINE EL STACK
.stack 100h

                                   ;SE DEFINE EL SEGMENTO DE DATOS
.data                              ;SE DECLARAN DOS VECTORES DE 8 POSICIONES Y SE INICIAN EN 0
  vector1 dw 8 dup(0)
  vector2 dw 8 dup(0)              ;SE DEFINEN LOS TAMANYOS DE LOS VECTORES
  tama    dw 1 dup(16)
  tama2   dw 1 dup(16)

.code
 
  ;==================INICIO=====================================================  
 
  lea si,vector1  ; movemos el registro de la primera posicion del vector1 a si
  mov ax,@data    ; Colocamos la direccion de segmento de datos
  mov ds,ax
  printn "   "
  printn " Valores del Primer Vector"
 
  llenado vector1, vector2, tama ;SE MANDA A LLAMAR UNA MACRO Y RECIBE 3 ARGUMENTOS
 
  ordenamiento vector2, tama     ;SE MANDA A LLAMAR OTRA MACRO
 
  printn " "
  print "  Vector original: "
  mov si, 0
 
  imprimir1:
    print " "
    mov ax, vector1[si]
    call print_num   
    add si, 2
    cmp si, tama2
    jb imprimir1 
    printn " "
    print "  Vector menor a mayor: "
    mov si,0
    jmp imprimir2
   
  imprimir2:
    print " "
    mov ax, vector2[si]
    call print_num   
    add si, 2
    cmp si, tama2
    jb imprimir2            
    mov si, 0
    jmp pila              
 
  pila: 
   mov ax, vector2[si]
   push ax
   add si,2
   cmp si, 16
   jb pila
   mov si,0
   printn ' '
   print '  Vector mayor a menor: '
   jmp imprimir3

 imprimir3:
   print ' '
   pop ax
   call print_num
   add si,2  
   cmp si,16
   jb imprimir3
   jmp salir

 salir:
    printn " "
    printn " "
    print " Aplasta tecla para terminar...   "
    mov ah, 0h
    int 16h
    mov ax, 4c00h
    int 21h
 
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
DEFINE_PTHIS       

END 
       

Dentro del archivo de texto:


ordenamiento macro vect2, tama    ;METODO BURBUJA
    inicioreg: ;INICIALIZA EL SOURCE INDEX EN 0
      mov si, 0 ;SE INICIALIZAN LOS REGISTROS EN 0
      xor ax,ax
      xor bx,bx
      xor cx,cx
      sub tama,2
      jmp ciclo1
   
    ciclo1:  ;SE COMPARA NUESTRO PRIMER CONTADOR CX SI ES MENOR QUE EL TAMAÑO DEL VECTOR -2
      mov si, 0;-2 PORQUE CON ESTO LOS CICLOS HACEN EXACTAMENTE LAS MISMAS COMPARACIONES PARA QUE EL VECTOR QUEDE ORDENADO
      mov dx, tama
      sub dx, cx
      cmp cx, tama
      jl ciclo2
      jmp fin
     
    ciclo2: ;SE COMPARA CON EL TAMAÑO DEL VECTOR -2 Y MENOS CX
      cmp si, dx ;UNA VEZ QUE ENTRA EL CICLO 2 YA ESTARÁN ORDENADOS
      jl condicion ;TODOS LOS VALORES, SE COMPARA UNO A UNO HASTA QUE
      add cx,2  ;MANDE EL MÁS GRANDE AL FINAL
      jmp ciclo1 ;
     
    condicion: ;SE COMPARAN LOS VALORES
      mov ax, vect2[si]
      cmp vect2[si+2], ax
      jl ordenamiento
      add si, 2 
      jmp ciclo2
     
    ordenamiento:
      mov ax, vect2[si+2]
      mov bx, vect2[si]
      mov vect2[si+2], bx
      mov vect2[si],ax
      add si, 2
      jmp ciclo2

    fin:   
endm


llenado macro vec1,vect2, tama ;PIDE CADA UNO DE LOS VALORES DE NUESTROS VECTORES POR TECLADO
  llenado1:                    ;RECIBE 3 ARGUMENTOS 
    printn " "                 ;SE IMPRIME SALTO DE LINEA 
    print "     >"            
    call scan_num              ;SE LEE EL NUMERO
    mov ax, cx                 ;SE MUEVE A AX
    mov [vector1 + si],ax      ;SE MUEVE AL VECTOR
    mov [vector2 + si],ax     
    add si,2
    cmp si,tama               ;SE COMPARA EL SOURCE INDEX CON EL TAMAÑO
    jne llenado1        
endm



Multiplicación con macros (Jonathan Guzmán)
 .model small
.stack

.data        ;definición de datos(variables), donde se almacenara información
.code
   chr1  db ? ;primer digito
   chr2  db ? ;segundo digito
   chr3  db ? ;multiplo
   chr4  db ?
   r1    db ? ;resultado 1
   r2    db ? ;resultado 2
   r3    db ?
   r4    db ?
   ac    db 0 ;acarreo
   ac1   db 0
.startup
   ;cls
   operacion macro a, b, c, d ;creacion de macro operacion con 4 parametros
   mov al,a  ;unidad del segundo numero
   mov bl,b  ;unidad del primer numero
   mul bl       ;multiplicar
   mov ah,0     ;limpiamos ah0
   aam          ;separamos de hex a dec
   mov ac1,ah   ;decenas del primera multiplicacion
   mov r4,al    ;unidades del primera multiplicacion
            
   mov al,a  ;unidades del segundo numero
   mov bl,d  ;decentas del primer numero
   mul bl       ;multiplicar
   mov r3,al    ;movemos el resultado de la operacion a r3
   mov bl,ac1   ;movemos el acarreo a bl
   add r3,bl    ;sumamos resultado mas acarreo
   mov ah,00h   ;limpiamos ah por residuos
   mov al,r3    ;movemos el resultado de la suma a al
   aam          ;separamos  de hex a dec
   mov r3,al    ;guardamos unidades en r3
   mov ac1,ah   ;guardamos decenas en ac1
     
  
   mov al,c    ;al = chr3
   mov bl,b    ;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,c    ;AL = chr3
   mov bl,d    ;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)
   endm
  
   ;suma final
   ;R4 resulta ser las unidades de mul y no se toma en cuenta ya que se pasa entero
  
   suma macro respuesta3,respuesta2,respuesta1,acomulador ;creacion de macro suma con 4 parametros
   mov ax,0000h   ;limpiamos ax
  
   mov al,respuesta3      ;movemos el segundo resultado de la primera mult a al
   mov bl,respuesta2      ;movemos primer resultado de la segunda mult a bl
   add al,bl      ;sumamos
   mov ah,00h     ;limpiamos ah
   aam            ;separamos hex a dec
   mov respuesta3,al      ;r3 guarda las decenas del resultado final
   mov respuesta2,ah      ;r2 se utiliza como nuevo acarreo
  
   mov ax,0000h   ;''''
  
   mov al,acomulador     ;movemos el acarreo de la primera mult a al
   mov bl,respuesta1      ;movemos segundo resultado de la segunda mult a bl
   add al,respuesta2      ;sumamos el nuevo  acarreo de la suma anterior  a al
   add al,bl      ;sumamos al a bl
   mov ah,00h     ;limpiamos el registro ah
   aam            ;separamos de hex a dec
   mov respuesta1,al      ;r1 guarda las centenas
   mov respuesta2,ah      ;ah se sigue utilizando como acarreo
  
   mov al,respuesta2      ;movemos el acarreo a al
   mov bl,ac      ;movemos ac a bl
   add al,bl      ;sumamos al a bl
   ;aam            ;separamos hex a dec
   mov ac,al      ;mov al a ac como nuestro acarreo final
   endm
  
   mov ah,00h     ;Function(Set video mode)
   mov al,03      ;Mode 80x25 8x8 16
   int 10h        ;Interruption Video

   mov ah,01h     ;Function(character read) Guarda en AL
   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) Guarda en AL
   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) Guarda en AL
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr3,al    ;chr1.chr2 * [chr3] = ac.r1.r2
  
   mov ah,01h     ;Function(Read character) Guarda en AL
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr4,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
   operacion chr4,chr2,chr3,chr1 ;llamada al macro con parametros
   suma r3,r2,r1,ac1 ;llamada al macro con parametros

   mov ah,02h 
   mov dl,ac
   add dl,30h
   int 21h        ;Mostramos ac (millar)

   mov ah,02H
   mov dl,r1
   add dl,30h
   int 21h        ;Mostramos r1 (centena)

   mov ah,02H
   mov dl,r3
   add dl,30h
   int 21h        ;Mostramos r3 (decena)
  
   mov ah,02H
   mov dl,r4
   add dl,30h
   int 21h        ;unidad       

.exit
end

RESTA con Macros

restas macro p, s
    mov al, p
    sub al, s
    add al, 30h
    mov resta, al
    mov ah, 09
    lea dx, msj3
    int 21h
    mov ah, 02
    mov dl, resta
    int 21h
    mov ah, 4ch
    int 21h
endm
 

.model small
.stack 64
.data

    n1 db 0
    n2 db 0
    resta db 0
    msj  db "Dame el primer valor: $"
    msj2 db 10,13, "Dame el segundo valor $"
    msj3 db 10,13, "resta = $"
 
.code

 mov ax, @data
 mov ds, ax
 mov ah, 09
 lea dx, msj
 int 21h

 mov ah, 01
 int 21h
 sub al, 30h
 mov n1, al

 mov ah, 09
 lea dx, msj2
 int 21h
 mov ah, 01
 int 21h
 sub al, 30h
mov n2, al

restas n1, n2
 
ret

linea de texto con Macro (Melissa)
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 unico que hace es cargar msj del segmento de datos.
    mov ah,09h
    lea dx,msj ;puede ser mov dx,offset msj
    int 21h ;interrupcion
    mov ax,4c00h ;Sale del programa
    int 21h  ;interrupcion
end



Buenos días o Buenas tardes (Edgar Mendez)
FIN MACRO 
    MOV AH, 4CH  ;TERMINACION DEL PROGRAMA
    INT 21H       
ENDM

;---------------------------------------------------

PILA SEGMENT PARA STACK "STACK"
    DB 200 DUP (0)                     ;ESPACIO DE LAS INSTRUCCIONES
PILA ENDS
;---------------------------------------------------

DATOS SEGMENT PARA "DATA" ;DATOS A INGRESAR
    VA DB "DESPUES DE MEDIO DIA (Y/N): ","$" ;SELECCION DE INICIO DEL PROGRAMA
    VD DB 13,10," BUENOS DIAS","$"           ;MENSAJES MOSTRADOS EN PANTALLA                
    VT DB 13,10," BUENAS TARDES","$"         ;MENSAJES MOSTRADOS EN PANTALLA
DATOS ENDS
;---------------------------------------------------

CODIGO SEGMENT PARA "CODE"
    EMPIEZA PROC FAR
    ASSUME CS: CODIGO, DS: DATOS, SS: PILA

        MOV AX, DATOS   ;MANDAR LLAMAR A DATOS
        MOV DS, AX

        MOV AH, 0FH
        INT 10H
        MOV AH, 00H
        INT 10H 

        MOV DX,OFFSET VA   ;IMPRIMIR MENSAJE "DESPUES DE MEDIO DIA"
        MOV AH,9
        INT 21H

    CALL PREGUNTA

    EMPIEZA ENDP

    PREGUNTA PROC NEAR     ;Inicia el 
    
        MOV AH, 01H   ;ESPERA UNA ACCION
        INT 21H

        CMP AL, "Y"   ;Asignar una accion a una tecla
        JZ TARDES

        CMP AL, "N"   ;Asignar una accion a una tecla
        JZ DIAS

        CMP AL, "y"   ;Asignar una accion a una tecla
        JZ TARDES

        CMP AL, "n"   ;Asignar una accion a una tecla
        JZ DIAS   


TARDES: 

    MOV DX, OFFSET VT   ;IMPRIMIR MENSAJE "BUENOS TARDES"
    MOV AH, 09
    INT 21H

FIN

DIAS:

    MOV DX, OFFSET VD   ;IMPRIMIR MENSAJE "BUENOS DIAS"
    MOV AH, 09
    INT 21H 


FIN

RET
PREGUNTA ENDP   ;FIN DE PREGUNTA PROC

CODIGO ENDS
END EMPIEZA     ;FIN DEL PROGRAMA



Macros Edad (Alma García)

.model small ;modelo de memoria

.stack 64 ;segmento de pila


mmayor macro: ;declaracion de macro mmayor

    MOV DX,OFFSET mens2;se lee la variable mens2

    MOV AH,9

    INT 21H;interupcion del DOS

    endm;fin del macro


mmenor macro: ;declaracion de macro mmenor

    MOV DX,OFFSET mens3se lee la variable mens3

    MOV AH,9;trabaja con la interrupcion

    INT 21H;interrupcion del DOS

    endm;fin del macro


finn macro:;declaracion de macro fin

    mov ah,4ch;sentencia para terminar el programa

    int 21h;interrupcion del DOS

    endm;fin del macro

;============================empieza segmento datos
.data


num1 db 0 ;variable para almacenar la edad

diez db 10 ;variable para poder imprimir 2 caracteres(se multiplica por el primer numero ingresado,para ser decenas)

    mens db "ingresa tu edad ","$" ;mensaje inicial

    mens2 db 13,10,"Eres mayor de edad","$" ;mensaje para mayor de edad

    mens3 db 13,10,"Eres menor de edad","$" ;mensaje par amenor de edad
;===================================================termina segmento datos

;=================inicia segmento codigo
.code

inicio proc far

    mov ax,@data;direccionamos el segmento de datos

    mov ds,ax ;los datos se mueven a ax

    mov ah,09;trabaja con la interrupcion

    lea dx, mens;se lee la variable mens

    int 21h ;interrupcion del DOS



    mov ah,01;;espera la entrada del teclado

    int 21h ;interrupcion de DOS

    
    sub al,30h;se le restan 30 para convertir a numero

    mul diez;se multiplica el numero ingresado para convertirlo a decenas

    mov num1,al;el resultado se mueve al registro al 

    mov ah,01;se espera entrada del teclado

    int 21h;interrupcion del DOS



    sub al,30h;se tranforma a numero el segundo digito ingresado

    add num1,al ;se suma a las decenas obtenidas

    mov al,num1;se mueva a al el resultado de la suma


    cmp al,18;se compara si el contenidos de al es 18

    jge mayor;en caso de ser mayor se salta al proceso mayor

;=========== de no cumplirse(sea menor a 18)el programa continua a este segmento

    mov ah,09 ;trabaja con la interrupcion

    lea dx,mens3;se lee la variable mens3

    int 21h;interrupcion del DOS

    jmp fin;y salta a proceso fin

;====================procesos

mayor:;se declara el proceso mayor

mmayor;el proceso llama al MACRO mmayor



fin:;se declara el proceso fin

finn;el prceso llama al MACRO finn


inicio endp ;se termina a inicio




Macro imprimir (Uriel Vega)

imprime macro numero  ;Nuestra macro se llama imprimir, nuestro parámetro es numero
  mov ah,02h
  mov dl,numero  ;Indica que mueva al registro DL lo que pasamos como parámetro.
  add dl,30h  ;suma 30h para imprimir el número real.
  int 21h
endm

.model small
.stack 64
.data
  num db 0  ;declaramos nuestra variable.
.code
  mov cx,9
inicio:
  mov num,cl
  imprime num ;Llamamos al macro con el valor de nuestra variable.
loop inicio ;repite ciclo

  mov ah,04ch ;Finaliza el programa.
  int 21h
end

Macro (Emmanuel Orta)

bucle1 macro tama,x,y

    mov CX, tama

BUCLE:

    MOV DX, SI
    ADD DX, x
    MOV DH, y

coloca ;este es el macro para colocar en la posicion la letra

;se guarda letra por letra
    MOV AL, [SI+OFFSET TITULO]

;guarda color por color
    MOV BL, [SI+OFFSET COLORES]

color ;este es el macro que selecciona un color
    INC SI
    LOOPNZ BUCLE
endm

color macro ;macro que selecciona el color
    MOV AH, 9
    INT BIOS
endm

coloca macro;macro que selecciona una posicion
    MOV AH, 2
    INT BIOS
endm

.STACK 64

.MODEL SMALL

CR EQU 13
LF EQU 10
BIOS EQU 10H
DOS EQU 21H
TEXTO EQU 3
FIN EQU 4C00H

.DATA

;ponemos el texto que querramos mostrar
TITULO DB 'Agnax & Alizz Y pedrito ? '
;aqui va la lista de los colores
;del texto

colores DB 50H

DB 5fH
DB 50H
DB 5fH
DB 50H
DB 00H
DB 0f0H
DB 00h
DB 20H
DB 20H
DB 20H
DB 20H
DB 20H
DB 00H
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH

.CODE

;esta zona es para poner el texto
COLO PROC FAR

    MOV AX, @DATA
    MOV DS, AX

;Aquí se pone el macro del bucle
bucle1 25,30,12
    MOV AH, 8
    INT DOS

coloca ;este es el macro para colocar en la posicion la letra
    MOV AX, FIN
    INT DOS
    COLO ENDP
    RET

Macro Resta (Marco Escobedo)

restas macro p, s
mov al, p
sub al, s
add al, 30h
mov resta, al
mov ah, 09
lea dx, msj3
int 21h
mov ah, 02
mov dl, resta
int 21h
mov ah, 4ch
int 21h
endm

.model small
.stack 64
.data

n1 db 0
n2 db 0
resta db 0
msj db "Dame el primer valor: $"
msj2 db 10,13, "Dame el segundo valor $"
msj3 db 10,13, "resta = $"

.code

mov ax, @data
mov ds, ax
mov ah, 09
lea dx, msj
int 21h

mov ah, 01
int 21h
sub al, 30h
mov n1, al

mov ah, 09
lea dx, msj2
int 21h
mov ah, 01
int 21h
sub al, 30h
mov n2, al

restas n1, n2

ret


Macro Multiplicación (David Mendoza)

.model small ;Modelo de memoria
.stack

numero macro var
   mov ah,01h         ;Function(character read)
   int 21h            ;Interruption DOS functions
   sub al,30h         ;Convertimos a decimal
   mov var,al         ;Almacenamos en varible
endm

caracter macro chr
   mov ah,02h         ;Function(character to send to standard output)
   mov dl,chr         ;Caracter a imprimir en pantalla
   int 21h            ;Interruption DOS functions
endm

multiplicar macro var1, var2
   mov al,var1
   mov bl,var2
   mul bl
endm

separar macro alta, baja
   mov ah,00h          ;Se limpia la parte alta de ax
   AAM                 ;Separa el registro ax en su parte alta y baja
   mov alta,ah
   mov baja,al
endm

resultado macro var
   mov ah,02h 
   mov dl,var
   add dl,30h
   int 21h
endm

.data  ;Definicion de datos(variables), donde se almacenara informacion
   ;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 para 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

.code  
   
.startup
   
   mov ah,00h         ;Function(Set video mode)
   mov al,03          ;Mode 80x25 8x8 16
   int 10h            ;Interruption Video

   numero decenas_n1
   numero unidades_n1
   caracter '*'
   numero decenas_n2 
   numero unidades_n2
   caracter '='
 
   ;Realizamos las operaciones   
   
   ;Primera multiplicacion
   multiplicar unidades_n1, unidades_n2  
   separar acarreo_mul, res_unidades 

   
   ;Segunda multiplicacion
   multiplicar decenas_n1, unidades_n2   
   mov res_temp_dec_n1,al   
   mov bl,acarreo_mul       
   add res_temp_dec_n1,bl 
   mov al,res_temp_dec_n1
   separar res_temp_cen_n1, res_temp_dec_n1      
    
   ;Tercera multiplicacion
   multiplicar unidades_n1, decenas_n2
   separar acarreo_mul, res_temp_dec_n2
   ;Suma -> Decenas         
   mov bl, res_temp_dec_n1  
   add res_temp_dec_n2,bl   
   mov al, res_temp_dec_n2      
   separar acarreo_suma, res_decenas
   
   ;Cuarta multiplicacion
   multiplicar decenas_n1, decenas_n2   
   mov res_temp_cen_n2,al    
   mov bl,acarreo_mul       
   add res_temp_cen_n2,bl             
   mov al,res_temp_cen_n2
   separar res_uni_millar, res_temp_cen_n2     
   ;Suma -> Centenas        
   mov bl, res_temp_cen_n1  
   add res_temp_cen_n2, bl  
   mov bl, acarreo_suma     
   add res_temp_cen_n2,bl               
   mov al,res_temp_cen_n2  
   separar acarreo_suma, res_centenas 
   
   ;Acarreo para unidades de millar                         
   mov bl, acarreo_suma     
   add res_uni_millar, bl   
 
   ;Mostramos resultados
   resultado res_uni_millar   
   resultado res_centenas   
   resultado res_decenas 
   resultado res_unidades
           
.exit
end


Macro Suma (Juan Rodolfo)

    .model small          ;Modelo de memoria mas utilizado
.stack 64
.data                 ;segmento de datos con  variables

    n1 db 0
    n2 db 0
    suma db 0
    msj  db "Dame el primer valor: $"
    msj2 db 10,13, "Dame el segundo valor $"
    msj3 db 10,13, "suma = $"
  
.code                 ;segmento de codigo

mov ax, @data         ;se mueve data a ax
mov ds, ax            ;movemos ax a ds
mov ah, 09            ;salida de una cadena de caracteres
lea dx, msj           ;se imprime el primer mensaje
int 21h               ;interrupcion

mov ah, 01            ;peticion de leer caracter
int 21h               ;interrupcion
sub al, 30h           ;se resta 30h para obtener el numero
mov n1, al            ;se mueve al a n1

mov ah, 09            ;salida de una cadena de caracteres
lea dx, msj2          ;se imprime el segundo mensaje
int 21h               ;interrupcion
mov ah, 01            ;peticion de leer caracter
int 21h               ;interrupcion
sub al, 30h           ;se resta 30h para obtener el numero
mov n2, al            ;se mueve al a n2

sumas n1, n2          ;se llama al macro y se le envian los parametros
  
ret


Macro ordenamiento (Armando Monreal)

org 100h

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

imprime macro numero  ;Nuestra segunda macro se llama imprime, nuestro parametro es numero
  mov ah,02h
  mov dl,numero  ;Indica que mueva al registro DL lo que pasamos como parametro.
  add dl,2Fh  ;suma 2Fh para imprimir el numero real.
  int 21h
endm

.data                                                                  
    mensaje db "Programa de macro que imprime del 9 al 0",13,10,"$"
    mensaje2 db 13,10, "Loop que imprime del 0 al 9",13,10,"$"
    num db 0 ;declaramos nuestra variable.
  
.code
    mov cx,10
    lea dx,mensaje
    mov ah,09h
    int 21h    
inicio:
    mov num,cl
    imprime num ;Llamamos al macro con el valor de nuestra variable.
    loop inicio ;repite ciclo  
  
    lea dx,mensaje2
    mov ah,09h
    int 21h

    MOV DL, "0";se transfiere la letra 0 al registro de datos en el byte bajo
    MOV CX, 10;se transfiere 10 al registro contador
    PRINT_LOOP:;va a imprimir hasta acabar las 26 interaciones
    MOV AH, 02;se transifiere 02 al acumulador de byte alto
    INT 21h; se realiza la interrupcion del dato ascii leido desde el teclado
    INC DL;siguiente caracter numerico
    LOOP PRINT_LOOP;continua hasta acabar las 10 vueltas

end





domingo, 15 de abril de 2018

sábado, 14 de abril de 2018

2.1. Características del DBMS


2.1. Características del DBMS

2.1.1 Estructura de memoria y procesos de la instancia
2.1.2 Estructuras físicas de la base de datos 

ESTRUCTURA DE LA MEMORIA:
Es la estructura de memoria compartida que contienen datos e información de control para una instancia de una base de datos, cada instancia tiene sus propias estructuras de memoria y se localiza en la memoria virtual del computador. Las estructuras de memoria se denominan System Global Area (SGA) la cual es un área compartida por todos los usuarios y se divide en tres partes:

■ Fondo común compartido (Shared pool): Se utiliza durante el procesamiento de comandos.
Tiene dos zonas:
– Library Cache: almacena información relacionada a la instrucción de SQL:
– Data Dictionary Cache (Dictionary Cache o Row Cache): almacena la información de uso más frecuente sobre el diccionario de datos. Esta información incluye definición de columnas, usuarios, passwords y privilegios. Esta información es usada durante tiempo de compilación.

■  Area de Memoria rápida (Database buffer cache): mantiene los bloques de datos leídos directamente de los archivos de datos. Cuando se procesa una consulta, el servidor busca los bloques de datos requeridos en esta estructura. Si no se encuentra, el proceso servidor lee el bloque de la memoria secundaria y coloca una copia. Está organizada en dos listas:
– Lista de sucios: bloques que han sufrido modificaciones y no han sido escritos en disco.
– Lista de menos recientemente usados: mantiene los bloques libres, los bloques a los que se está accediendo actualmente y los bloques sucios que aún no han sido remitidos a la lista de sucios.

·        ■ Área de registro de rehacer (Redo log buffer): es un buffer circular que mantiene todos loscambios que han sido realizados sobre la base de datos por operaciones de insert, update, delete, create, alter y drop. Las entradas de este buffer contienen toda la información necesaria para reconstruir los cambios realizados a la base de datos por medio de cualquier instrucción (el bloque que ha sido cambiado, la posición de cambio y el nuevo valor). El uso es estrictamente secuencial.

Los archivos
         ■Los Archivos de Datos (Datafiles): sirve para el almacenamiento físico de las tablas, índices y procedimientos, estos son los únicos que contienen los datos de los usuarios de la base de datos.
·  
■   ■ Archivos de Control (control files): tiene la descripción física y dirección de los archivos para el arranque correcto de la base de datos
·        
■   ■Archivos de Rehacer (redo log files): tienen los cambios que se han hecho a la base de datos para recuperar fallas o para manejar transacciones. Debe estar conformado por dos grupos como mínimo y cada grupo debe estar en discos separados. El principal propósito de estos archivos es de servir de respaldo de los datos en la memoria RAM.
·       ■ Archivos fuera de línea (archived files): archivos opcionales donde se pueda guardar información vieja de los archivos de rehacer, convenientes para respaldos de base de datos.

LOS PROCESOS: 

Procesos de Base o de Soporte: se encargan de traer datos desde y hacia la estructura de
memoria (SGA), cada uno tiene su propia área de memoria; los procesos de este tipo son los
siguientes:

·         Database Writer (DBWR): se encarga de copiar los bloques desde el buffer cache hasta la
memoria secundaria.

Log Writer (LGWR): escribe las entradas desde el Log Buffer a disco. La escritura de
bloques del Redo Log Buffer a disco ocurre secuencialmente y bajo las siguientes reglas:
– Cuando el Redo Log está lleno en un 33% o más.
– Cuando oucrre un time-out (cada tres segundos).
– Antes de que el DBWR escriba algún bloque modificado a disco.
– Cuando una transacción se compromete.

·        Checkpoint (CKPT): encargado de notificar al DBWR para que se escriban en los archivos
de datos todos los bloques contenidos en la lista de sucios. Este proceso es invocado en
intervalos de tiempo determinados. El CKPT es opcional, si no existe las funciones son
realizadas por el LGWR.

·        System Monitor (SMON): Encargado de realizar un proceso de recuperación rápida cada
vez que una instancia es inicializada. Esta labor incluye limpieza de las estructuras de datos
de soporte a la ejecución de consultas y llevar a la base de datos a un estado estable
previo a la ejecución de aquellas transacciones que no hayan culminado exitosamente.
También se encarga de desfragmentar el espacio físico de almacenamiento uniendo
bloques de datos libres en la memoria secundaria.

·         Procesos de Usuario: se encarga de ejecutar el código de aplicación del usuario y manejar el perfil del usuario con sus variables de ambiente. Estos procesos no se pueden comunicar directamente con la base de datos, por lo que la comunicación la establecen mediante procesos de servidores.

·         Procesos de Servidores: estos procesos ejecutan las órdenes SQL de los usuarios y llevan los datos del buffer caché para que los procesos de usuario puedan tener acceso a los datos.

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.