jueves, 17 de mayo de 2018

Ejercicios de macros 03/05/2018 - 17/05/2018

 RESTA

 http://blogdegraficacion.blogspot.mx/

       
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 del segmento de datos

 https://sistemasconmelissa.tumblr.com/

       

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




       


============================================

 Multiplicacion

http://iscivanguz.blogspot.mx/2018/04/multiplicacion-en-macros.html

       
.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




       


========================================

Macro buenos días

http://mendezitmg.blogspot.mx/2018/04/buenos-dias-buenas-tardes-con-macros.html

       
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




       



===================================================

Imprime numeros


http://checoblogs.blogspot.mx/

       
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



lup macro 

    mov num,cl

    imprime num ;Llamamos al macro con el valor de nuestra variable.

    loop inicio ;repite ciclo

endm



Fin macro

    mov ah,04ch ;Finaliza el programa.

    int 21h

    endm



.model small

.stack 64

.data

  num db 0  ;declaramos nuestra variable.

.code

  mov cx,9

inicio:

   

    lup

   

  Fin

end




       


====================================================

  Macro que se llama desde un txt

http://emanueldmz.blogspot.mx/2018/04/mi-programa-con-macro-llamado-desde-un.html

       
MyMacro MACRO p1, p2, p3

    MOV AX, p1

    MOV BX, p2

    MOV CX, p3

ENDM

ORG 100h

include 'MyMacro1.txt'

include 'MyMacro2.txt'

    

ret



_________________________________________________________

PRIMER ARCHIVO DE TEXTO:  MyMacro1.txt                                    



MyMacro 1, 2, 3





_________________________________________________________

SEGUNDO ARCHIVO DE TEXTO:  MyMacro2.txt                                



MyMacro 4, 5, DX




       


==============================================

Macro con archivo .txt

 http://aalcalabd.blogspot.mx/2018/04/macro.html

       

include 'macros.txt'

data segment

    var dw 6

    ends



main proc

mov bx,1

mov ax,1

m_suma bx

m_final

  

end main



Contenido del archivo .txt

m_final macro
mov ah, 4ch
int 21h
endm
m_suma macro var
add ax, bx
endm
===================================== 

Macro esponjoso pa' saber si eres legal o no

http://graficacionaliy.blogspot.mx/2018/04/blog-post.html

       

.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 suma

 http://juanrodolfogt.blogspot.mx/2018/04/macro-de-suma.html

       
sumas macro a, b      ;macro de la suma

    mov al, a         ;se mueve el primer numero a al

    add al, b         ;a al se le suma el segundo numero (b)

    add al, 30h       ;a al se le suma 30h para obtener de nuevo el numero en decimal

    mov suma, al      ;se mueve al a suma

    mov ah, 09        ;salida de cadena de caracteres

    lea dx, msj3      ;se imprime el mensaje 3

    int 21h           ;interrupcion

    mov ah, 02        ;peticion para colocar el cursor

    mov dl, suma      ;se mueve suma a dl

    int 21h           ;interrupcion

    mov ah, 4ch       ;termina programa

    int 21h           ;interrupcion

endm

  



.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 imprime

http://armandomonreal.blogspot.mx/p/ensamblador-practicas.html


       
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  
=============================================

Programa que imprime el decremento CX 

http://ednicg.blogspot.mx/search?updated-max=2018-05-08T14:02:00-07:00&max-results=10

=============================================
 http://davidmendozamartinez.blogspot.mx/
=============================================

=============================================




miércoles, 9 de mayo de 2018

Prodecimientos MySQL



Los procedimientos almacenados y funciones son nuevas funcionalidades de la versión de MySQL 5.0. Un procedimiento almacenado es un conjunto de comandos SQL que pueden almacenarse en el servidor. Una vez que se hace, los clientes no necesitan relanzar los comandos individuales pero pueden en su lugar referirse al procedimiento almacenado.

Algunas situaciones en que los procedimientos almacenados pueden ser particularmente útiles:

Cuando múltiples aplicaciones cliente se escriben en distintos lenguajes o funcionan en distintas plataformas, pero necesitan realizar la misma operación en la base de datos.
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan procedimientos almacenados para todas las oparaciones comunes. Esto proporciona un entorno seguro y consistente, y los procedimientos pueden asegurar que cada operación se loguea apropiadamente. En tal entorno, las aplicaciones y los usuarios no obtendrían ningún acceso directo a las tablas de la base de datos, sólo pueden ejectuar algunos procedimientos almacenados.
Los procedimientos almacenados pueden mejorar el rendimiento ya que se necesita enviar menos información entre el servidor y el cliente. El intercambio que hay es que aumenta la carga del servidor de la base de datos ya que la mayoría del trabajo se realiza en la parte del servidor y no en el cliente. Considere esto si muchas máquinas cliente (como servidores Web) se sirven a sólo uno o pocos servidores de bases de datos.
Los procedimientos almacenados le permiten tener bibliotecas o funciones en el servidor de base de datos. Esta característica es compartida por los lenguajes de programación modernos que permiten este diseño interno, por ejemplo, usando clases. Usando estas características del lenguaje de programación cliente es beneficioso para el programador incluso fuera del entorno de la base de datos.

Comandos Create Procedure y Create Function
Estos comandos crean una rutina almacenada. Desde MySQL 5.0.3, para crear una rutina,
es necesario tener el permiso CREATE ROUTINE, y los permisos ALTER ROUTINE y EXECUTE se asignan automáticamente a su creador.


Por defecto, la rutina se asocia con la base de datos actual. Para asociar la rutina explícitamente con una base de datos, especifique el nombre como db_name.sp_name al crearlo.


Si el nombre de rutina es el mismo que el nombre de una función de SQL, necesita usar un espacio entre el nombre y el siguiente paréntesis al definir la rutina, o hay un error de sintaxis. Esto también es cierto cuando invoca la rutina posteriormente.


La cláusula RETURNS puede especificarse sólo con FUNCTION, donde es obligatorio. Se usa para indicar el tipo de retorno de la función, y el cuerpo de la función debe contener un comando RETURN value.



La lista de parámetros entre paréntesis debe estar siempre presente. Si no hay parámetros, se debe usar una lista de parámetros vacía () . Cada parámetro es un parámetro IN por defecto. Para especificar otro tipo de parámetro, use la palabra clave OUT o INOUT antes del nombre del parámetro. Especificando IN, OUT, o INOUT sólo es valido para una PROCEDURE.


Un procedimiento o función se considera “determinista” si siempre produce el mismo resultado para los mismos parámetros de entrada, y “no determinista” en cualquier otro caso. Si no se da ni DETERMINISTIC ni NOT DETERMINISTIC por defecto es NOT DETERMINISTIC.


Varias características proporcionan información sobre la naturaleza de los datos usados por la rutina. CONTAINS SQL indica que la rutina no contiene comandos que leen o escriben datos. NO SQL indica que la rutina no contiene comandos SQL. READS SQL DATA indica que la rutina contiene comandos que leen datos, pero no comandos que escriben datos. MODIFIES SQL DATA indica que la rutina contiene comandos que pueden escribir datos. CONTAINS SQL es el valor por defecto si no se dan explícitamente ninguna de estas características.

MySQL almacena la variable de sistema sql_mode que está en efecto cuando se crea la rutina, y siempre ejecuta la rutina con esta inicialización.

La cláusula COMMENT es una extensión de MySQL, y puede usarse para describir el procedimiento almacenado. Esta información se muestra con los comandos SHOW CREATE PROCEDURE y SHOW CREATE FUNCTION.

MySQL permite a las rutinas que contengan comandos DDL (tales como CREATE y DROP) y comandos de transacción SQL (como COMMIT). Esto no lo requiere el estándar, y por lo tanto, es específico de la implementación.


Los procedimientos almacenados no pueden usar LOAD DATA INFILE.

Los comandos que retornan un conjunto de resultados no pueden usarse desde una función almacenada. Esto incluye comandos SELECT que no usan INTO para tratar valores de columnas en variables, comandos SHOW y otros comandos como EXPLAIN. Para comandos que pueden determinarse al definir la función para que retornen un conjunto de resultados, aparece un mensaje de error Not allowed to return a result set from a function (ER_SP_NO_RETSET_IN_FUNC). Para comandos que puede determinarse sólo en tiempo de ejecución si retornan un conjunto de resultados, aparece el error PROCEDURE %s can't return a result set in the given context (ER_SP_BADSELECT).

Ejemplo.

DROP PROCEDURE IF EXISTS getPostsByCategory;
 
DELIMITER $$
 
CREATE PROCEDURE getPostsByCategory(
    IN _category VARCHAR(100),
    IN _language VARCHAR(2),
    IN _page INT, 
    IN _max INT)
BEGIN
    DECLARE _start INT DEFAULT 0;
    DECLARE _limit1 INT DEFAULT 0;
    DECLARE _limit2 INT DEFAULT 0;
 
    SET _limit1 = 0;
    SET _limit2 = _max;
 
    IF _page > 0 THEN
      SET _limit1 = _page * _max - _max;
    END IF;
 
    SELECT COUNT(1) AS total 
      FROM (
        SELECT blog_posts.id FROM blog_posts 
          LEFT JOIN blog_re_categories2posts ON (blog_re_categories2posts.postId = blog_posts.id) 
          LEFT JOIN blog_categories ON (blog_categories.id = blog_re_categories2posts.categoryId) 
          WHERE blog_categories.slug = _category 
          GROUP BY blog_posts.id
      ) AS Result;
 
    SELECT  title, blog_posts.slug, excerpt, content, author, mainImage, createdAt, day, month, year, blog_posts.language, GROUP_CONCAT(blog_categories.category SEPARATOR ', ') AS categories
      FROM blog_posts 
        LEFT JOIN blog_re_categories2posts ON (blog_re_categories2posts.postId = blog_posts.id)
        LEFT JOIN blog_categories ON (blog_categories.id = blog_re_categories2posts.categoryId)
        WHERE blog_categories.slug = _category  
          AND blog_posts.language = _language 
          AND blog_categories.language = _language
          AND blog_posts.situation = 'Published'
      GROUP BY blog_posts.id
      ORDER BY blog_posts.id DESC
      LIMIT _limit1, _limit2;
END $$
DELIMITER ; 
 
 
Uso del CASE.

Las sentencias CASE pueden utilizarse para entrar condicionalmente en una lógica determinada en función del estado de una condición que se cumple. Existen dos tipos de sentencias CASE:
Sentencia case simple: utilizada para entrar en una lógica determinada en función de un valor literal.
Sentencia case buscada: utilizada para entrar en una lógica determinada en función del valor de una expresión.
La cláusula WHEN de la sentencia CASE define el valor que, si se cumple, determina el flujo de
control.



Dicho esto las demás funciones que vienen dentro del case, dictarán que harán con la base de datos, como insertar, actualizar o borrar algun dato de la misma, como esto ya lo vimos no habrá p
  
 

jueves, 26 de abril de 2018

PIP en Python e introduccion a BD con Python

pip es un sistema de gestión de paquetes utilizado para instalar y administrar paquetes de software escritos en Python. Muchos paquetes pueden ser encontrados en el Python Package Index (PyPI). Python 2.7.9 y posteriores (en la serie Python2), Python 3.4 y posteriores incluyen pip (pip3 para Python3) por defecto..

Una ventaja importante de pip es la facilidad de su interfaz de línea de comandos, el cual permite instalar paquetes de software de Python fácilmente desde solo una orden:

pip install nombre-paquete
  
Los usuarios también pueden fácilmente desinstalar algún paquete:
 
pip uninstall nombre-paquete
 
Otra característica particular de pip es que permite gestionar listas de paquetes y sus números de versión correspondientes a través de un archivo de requisitos. Esto nos permite una recreación eficaz de un conjunto de paquetes en un entorno separado (p. ej. otro ordenador) o entorno virtual. Esto se puede conseguir con un archivo correctamente formateado requisitos.txt y la siguiente orden:
pip install -r requisitos.txt
 
Con pip es posible instalar un paquete para una versión concreta de Python, sólo es necesario reemplazar ${versión} por la versión de Python que queramos: 2, 3, 3.4, etc:
pip${versión} install nombre-paquete

Cómo usar pip

Para instalar un paquete desde PyPI utiliza:
pip install paquete
En donde paquete es el nombre de un módulo, librería, script o framework que se encuentre en https://pypi.python.org/pypi. Por ejemplo:
$ pip install django
Downloading/unpacking django
Installing collected packages: django
Successfully installed django
Cleaning up...

O en Windows:
> C:\PythonXY\scripts\pip install django
pip es un módulo de Python, por lo que si no se encuentra en la carpeta scripts también puede utilizarse:
> C:\PythonXY\python -m pip install django
Para desinstalar un paquete, utiliza:
pip uninstall paquete 

Instalación de MySQLdb

Para interactuar desde Python con MySQL a través de MySQLdb, es necesario instalar dicho módulo. El nombre del paquete es python-mysqldb (por si desean instalarlo desde los repositorios), o sino, pueden descargar un tarball desde http://sourceforge.net/projects/mysql-python/. Allí mismo, encontrarán el archivo README con toda la información para instalarlo.

Acceso a bases de datos con Python

En el caso particular de Python, el acceso a bases de datos se encuentra definido a modo de estándar en las especificaciones de DB-API (por curiosidad, puedes visitar Python Database API specification).
Esto significa, que para utilizar cualquier base de datos, siempre se deberán seguir los mismos pasos:
  1. Importar el módulo de conexión (en nuestro caso, utilizaremos MySQLdb)
    import MySQLdb
  2. Conectarse a la base de datos

    db_host = 'localhost'
    usuario = 'root'
    clave = 'clave'
    base_de_datos = 'mi_basededatos'
    db = MySQLdb.connect(host=db_host, user=usuario, passwd=clave,
    db=base_de_datos)
  3. Abrir un cursor
    cursor = db.cursor()
  4. Ejecutar una consulta

    mi_query = "SELECT campo FROM tabla WHERE campo='valor' ORDER BY campo"
    cursor.execute(mi_query)
  5. Si se está agregando, editando o eliminando un registro: hacer un commit a la base de datos
    db.commit()
  6. Si se están leyendo datos: obtener todos los registros hallados
    cursor.fetchall() u obtener solo el primero:
    cursor.fetchone()
  7. Cerrar el cursor abierto
    cursor.close()
     
 

miércoles, 18 de abril de 2018

MACROS Y PROCEDIMIENTOS

Una macro es un conjunto de instrucciones que realizan una tarea específica. Las macros reciben parámetros y son llamadas como si fueran una instrucción, es decir, se comportan como funciones. Un procedimiento es también un conjunto de instrucciones que hacen alguna tarea repetitiva, pero es llamada a través de una directiva y representa un salto en el listado de instrucciones. Su comportamiento depende de los valores almacenados en los registros y pila al momento de ser llamado. El reúso de código es una práctica común de los programadores para aumentar su productividad y para tener control de su propiedad intelectual sobre el código. En el caso de ensamblador la definición de procedimientos y macros permite la creación de librerías con subrutinas y funciones auxiliares. Estos procedimientos y macros permiten además que el código fuente del programa sea más legible y por consecuencia sea más sencillo hacer mantenimiento y encontrar errores, es decir, depurar. Permite, además, crear ejecutables más compactos y probablemente más veloces, pues al crear las subrutinas optimiza el manejo de memoria.

Macros


Las macros son subrutinas que pueden recibir parámetros. Pueden representar una función que se ejecuta en un programa en diversas ocasiones con parámetros diferentes. Si se define una macro sin parámetros de entrada se le llama simplemente con su nombre, como si fuera una nueva instrucción de ensamblador. Cuando una macro recibe parámetros, éstos se le pasan al momento de llamarla separados por coma. Se utilizan las directivas MACRO , ENDM y LOCAL . La estructura para definir una macro es la siguiente:




Procedimientos


Conjunto de instrucciones que realizan una tarea -y preferentemente solo una- que se ha de utilizar en más de una ocasión pero se declara una sola vez en el código fuente.
Un procedimiento puede llamar a otro, y este a su vez a otro y así sucesivamente.

El procedimiento se guarda en memoria cuando se ensambla y ejecuta y entonces puede ser llamado tantas veces como sea necesario, ahorrando espacio y facilitando el desarrollo de software gracias a que permite organizarlo.
Los procedimientos deben ser cortos, de no más de una o dos páginas.

PROC
Es una directiva que indica donde inicia el procedimiento, su formato es: nombre PROC tipo

Tipos.
1. Los locales (PROC NEAR), serán usados por una tarea específica
2. Los globales (PROC FAR), pueden ser usados por todo el software.



Ejercicios de macros 03/05/2018 - 17/05/2018

 RESTA  http://blogdegraficacion.blogspot.mx/ restas macro p, s     mov al, p     sub al, s     add al, 30h     mov resta, a...