jueves, 23 de marzo de 2017
miércoles, 15 de marzo de 2017
Empresas que usan MySQL/Oracle
MySQL
Lo utilizan todas las medianas y grandes empresas para guardar datos de clientes, empleados e inventario.Es usado por :
Oracle
En México por mencionarte algunas empresas. Cabe mencionarte que en la mayoría aparte de tener base de datos tienen otros productos Oracle, como son CRM, E-Bussines, BI, etc.
Grupo Posadas
Periódico el Universal
Domino s Pizza
Starbucks Coffee
Burger King Chillis
Banco de Mexico
Coca Cola
CFE
Referencia: Link
Registros de Lenguaje Ensamblador
REGISTROS INTERNOS DEL MICROPROCESADOR
La Unidad Central de Proceso (CPU, por sus siglas en inglés) tiene 14 registros internos cada uno de 16 bits. Los primeros cuatro, AX, BX, CX y DX, son de uso general y se pueden usar también como registros de 8 bits. Es decir, AX se puede dividir en AH y AL (AH es el byte alto, high, y AL es el byte bajo, low) Lo mismo es aplicable a los otros tres (BX en BH y BL, CX en CH y CL y DX en DH y DL).
Estos son los únicos registros que pueden usarse de modo dual (en 8 o 16 bits) Los registros de la CPU son conocidos por sus nombres propios, que son: ·
El registro AX se usa para almacenar resultados, lectura o escritura desde o hacia los puertos. El BX sirve como apuntador base o índice. El CX se utiliza en operaciones de iteración, como un contador que automáticamente se incrementa o decrementa de acuerdo con el tipo de instrucción usada. El DX se usa como puente para el acceso de datos.
El DS es un registro de segmento cuya función es actuar como policía donde se encuentran los datos. Cualquier dato, ya sea una variable inicializada o no, debe estar dentro de este segmento. La única excepción es cuando tenemos programas del tipo *.com, ya que en éstos sólo puede existir un segmento. El registro ES tiene el propósito general de permitir operaciones sobre cadenas, pero también puede ser una extensión del DS.
El SS tiene la tarea exclusiva de manejar la posición de memoria donde se encuentra la pila (stack) Esta es una estructura usada para almacenar datos en forma temporal, tanto de un programa como de las operaciones internas de la computadora personal (PC, por sus siglas en inglés) En términos de operación interna, la CPU usa este segmento para almacenar las direcciones de retorno de las llamadas a rutinas. El registro de segmentos más importante es el CS o segmento de código. Es aquí donde se encuentra el código ejecutable de cada programa, el cual está directamente ligado a los diferentes modelos de memoria.
El registro BP (base pointer) se usa para manipular la pila sin afectar al registro de segmentos SS. Es útil cuando se usa interfaz entre lenguajes de alto nivel y el ensamblador. Puesto que dicha interfaz se basa en el concepto de la pila BP, nos permite acceder parámetros pasados sin alterar el registro de segmento SS. Los registros SI y DI son útiles para manejar bloques de cadenas en memoria, siendo el primero el índice fuente y el segundo el índice destino. En otras palabras, SI representa la dirección donde se encuentra la cadena y DI la dirección donde será copiada.
El registro SP apunta a un área específica de memoria que sirve para almacenar datos bajo la estructura LIFO (último en entrar, primero en salir), conocida como pila (stack) El registro IP (instruction pointer) apunta a la siguiente instrucción que será ejecutada en memoria.
A continuación se describe el significado de cada bit del registro F (banderas).
Todas las banderas apagadas:
NV UP DI PL NZ NA PO NC
Todas las banderas prendidas:
OV DN EI NG ZR AC PE CY
Significado de los bits:
Overflow NV = no hay desbordamiento
OV = Sí lo hay
Direction UP = hacia adelante
DN = hacia atrás
Interrupts DI = desactivadas
EI = activadas
Sign PL = positivo
NG = negativo
Zero NZ = no es cero
ZR = sí lo es
Auxiliary Carry NA = no hay acarreo auxiliar
AC = hay acarreo auxiliar
Parity PO = paridad non
PE = paridad par
Carry NC = no hay acarreo
CY = sí lo hay
Referencia:Link
La Unidad Central de Proceso (CPU, por sus siglas en inglés) tiene 14 registros internos cada uno de 16 bits. Los primeros cuatro, AX, BX, CX y DX, son de uso general y se pueden usar también como registros de 8 bits. Es decir, AX se puede dividir en AH y AL (AH es el byte alto, high, y AL es el byte bajo, low) Lo mismo es aplicable a los otros tres (BX en BH y BL, CX en CH y CL y DX en DH y DL).
Estos son los únicos registros que pueden usarse de modo dual (en 8 o 16 bits) Los registros de la CPU son conocidos por sus nombres propios, que son: ·
- AX (acumulador).
- BX (registro base).
- CX (registro contador).
- DX (registro de datos).
- DS (registro del segmento de datos).
- ES (registro del segmento extra).
- SS (registro del segmento de pila).
- CS (registro del segmento de código).
- BP (registro de apuntadores base).
- SI (registro índice fuente).
- DI (registro índice destino).
- SP (registro del apuntador de pila).
- IP (registro del apuntador de siguiente instrucción).
- F (registro de banderas).
El registro AX se usa para almacenar resultados, lectura o escritura desde o hacia los puertos. El BX sirve como apuntador base o índice. El CX se utiliza en operaciones de iteración, como un contador que automáticamente se incrementa o decrementa de acuerdo con el tipo de instrucción usada. El DX se usa como puente para el acceso de datos.
El DS es un registro de segmento cuya función es actuar como policía donde se encuentran los datos. Cualquier dato, ya sea una variable inicializada o no, debe estar dentro de este segmento. La única excepción es cuando tenemos programas del tipo *.com, ya que en éstos sólo puede existir un segmento. El registro ES tiene el propósito general de permitir operaciones sobre cadenas, pero también puede ser una extensión del DS.
El SS tiene la tarea exclusiva de manejar la posición de memoria donde se encuentra la pila (stack) Esta es una estructura usada para almacenar datos en forma temporal, tanto de un programa como de las operaciones internas de la computadora personal (PC, por sus siglas en inglés) En términos de operación interna, la CPU usa este segmento para almacenar las direcciones de retorno de las llamadas a rutinas. El registro de segmentos más importante es el CS o segmento de código. Es aquí donde se encuentra el código ejecutable de cada programa, el cual está directamente ligado a los diferentes modelos de memoria.
El registro BP (base pointer) se usa para manipular la pila sin afectar al registro de segmentos SS. Es útil cuando se usa interfaz entre lenguajes de alto nivel y el ensamblador. Puesto que dicha interfaz se basa en el concepto de la pila BP, nos permite acceder parámetros pasados sin alterar el registro de segmento SS. Los registros SI y DI son útiles para manejar bloques de cadenas en memoria, siendo el primero el índice fuente y el segundo el índice destino. En otras palabras, SI representa la dirección donde se encuentra la cadena y DI la dirección donde será copiada.
El registro SP apunta a un área específica de memoria que sirve para almacenar datos bajo la estructura LIFO (último en entrar, primero en salir), conocida como pila (stack) El registro IP (instruction pointer) apunta a la siguiente instrucción que será ejecutada en memoria.
A continuación se describe el significado de cada bit del registro F (banderas).
Todas las banderas apagadas:
NV UP DI PL NZ NA PO NC
Todas las banderas prendidas:
OV DN EI NG ZR AC PE CY
Significado de los bits:
Overflow NV = no hay desbordamiento
OV = Sí lo hay
Direction UP = hacia adelante
DN = hacia atrás
Interrupts DI = desactivadas
EI = activadas
Sign PL = positivo
NG = negativo
Zero NZ = no es cero
ZR = sí lo es
Auxiliary Carry NA = no hay acarreo auxiliar
AC = hay acarreo auxiliar
Parity PO = paridad non
PE = paridad par
Carry NC = no hay acarreo
CY = sí lo hay
Referencia:Link
Mnemónicos
Mnemónicos
Un código mnemotécnico (o código nemotécnico), es un sistema sencillo utilizado para recordar una secuencia de datos, nombres, números, y en general para recordar listas de items que no pueden recordarse fácilmente
El concepto de mnemotécnico fue utilizado en ensamblador para la definición de unas palabras que sustituye a un código de operación (lenguaje de máquina), las cuales fueron llamadas mnemónicos. Estas representan con unas cuantas letras una operación que es traducida durante el proceso de ensamblaje a código binario para que pueda ser interpretado por el procesador. La creación de estos códigos abreviados dio origen a lo que hoy conocemos como lenguaje ensamblador.
Dentro de los principales mnemónico tenemos:
MOV (transferencia)
Sintaxis: MOV dest, origen.
Transfiere datos de longitud byte o palabra del operando origen al operando destino. Pueden ser operando origen y operando destino cualquier registro o posición de memoria direccionada de las formas ya vistas, con la única condición de que origen y destino tengan la misma dimensión. Existen ciertas limitaciones, como que los registros de segmento no admiten el direccionamiento inmediato: es incorrecto MOV DS,4000h; pero no lo es por ejemplo MOV DS,AX o MOV DS,VARIABLE. No es posible, así mismo, utilizar CS como destino (es incorrecto hacer MOV CS,AX aunque pueda admitirlo algún ensamblador). Al hacer MOV hacia un registro de segmento, las interrupciones quedan inhibidas hasta después de ejecutarse la siguiente instrucción (8086/88 de 1983 y procesadores posteriores).
Ejemplos:
mov ds,ax
mov bx,es:[si]
mov si,offset dato
En el último ejemplo, no se coloca en SI el valor de la variable dato sino su dirección de memoria o desplazamiento respecto al segmento de datos.
LEA (carga dirección efectiva)
Sintaxis: LEA destino, origen
Transfiere el desplazamiento del operando fuente al operando destino. Otras instrucciones pueden a continuación utilizar el registro como desplazamiento para acceder a los datos que constituyen el objetivo. El operando destino no puede ser un registro de segmento. En general, esta instrucción es equivalente a MOV destino,OFFSET fuente y de hecho los buenos ensambladores (TASM) la codifican como MOV para economizar un byte de memoria. Sin embargo, LEA es en algunos casos más potente que MOV al permitir indicar registros de índice y desplazamiento para calcular el offset:
lea dx,datos[si]
En el ejemplo de arriba, el valor depositado en DX es el offset de la etiqueta datos más el registro SI. Esa sola instrucción es equivalente a estas dos:
mov dx,offset datos
add dx,si
POP (extraer de la pila)
Sintaxis: POP destino
Transfiere el elemento palabra que se encuentra en lo alto de la pila (apuntado por SP) al operando destino que a de ser tipo palabra, e incrementa en dos el registro SP. La instrucción POP CS, poco útil, no funciona correctamente en los 286 y superiores.
Ejemplos: pop ax
pop pepe
PUSH (introduce en la pila)
Sintaxis: PUSH origen
Decrementa el puntero de pila (SP) en 2 y luego transfiere la palabra especificada en el operando origen a la cima de la pila. El registro CS aquí sí se puede especificar como origen, al contrario de lo que afirman algunas publicaciones.
Ejemplo: push cs
CALL (llamada a subrutina)
Sintaxis: CALL destino
Transfiere el control del programa a un procedimiento, salvando previamente en la pila la dirección de la instrucción siguiente, para poder volver a ella una vez ejecutado el procedimiento. El procedimiento puede estar en el mismo segmento (tipo NEAR) o en otro segmento (tipo FAR). A su vez la llamada puede ser directa a una etiqueta (especificando el tipo de llamada NEAR -por defecto- o FAR) o indirecta, indicando la dirección donde se encuentra el puntero. Según la llamada sea cercana o lejana, se almacena en la pila una dirección de retorno de 16 bits o dos palabras de 16 bits indicando en este último caso tanto el offset (IP) como el segmento (CS) a donde volver.
Ejemplos: call proc1
dir dd 0f000e987h
call dword ptr dir
En el segundo ejemplo, la variable dir almacena la dirección a donde saltar. De esta última manera -conociendo su dirección- puede llamarse también a un vector de interrupción, guardando previamente los flags en la pila (PUSHF), porque la rutina de interrupción retornará (con IRET en vez de con RETF) sacándolos.
JMP (salto)
Sintaxis: JMP dirección o JMP SHORT dirección
Transfiere el control incondicionalmente a la dirección indicada en el operando. La bifurcación puede ser también directa o indirecta como anteriormente vimos, pero además puede ser corta (tipo SHORT) con un desplazamiento comprendido entre -128 y 127; o larga, con un desplazamiento de dos bytes con signo. Si se hace un JMP SHORT y no llega el salto (porque está demasiado alejada esa etiqueta) el ensamblador dará error. Los buenos ensambladores (como TASM) cuando dan dos pasadas colocan allí donde es posible un salto corto, para economizar memoria, sin que el programador tenga que ocuparse de poner short. Si el salto de dos bytes, que permite desplazamientos de 64 Kb en la memoria sigue siendo insuficiente, se puede indicar con far que es largo (salto a otro segmento).
Ejemplos: jmp etiqueta
jmp far ptr etiqueta
RET / RETF (retorno de subrutina)
Sintaxis: RET [valor] o RETF [valor]
Retorna de un procedimiento extrayendo de la pila la dirección de la siguiente dirección. Se extraerá el registro de segmento y el desplazamiento en un procedimiento de tipo FAR (dos palabras) y solo el desplazamiento en un procedimiento NEAR (una palabra). si esta instrucción es colocada dentro de un bloque PROC-ENDP (como se verá en el siguiente capítulo) el ensamblador sabe el tipo de retorno que debe hacer, según el procedimiento sea NEAR o FAR. En cualquier caso, se puede forzar que el retorno sea de tipo FAR con la instrucción RETF. Valor, si es indicado permite sumar una cantidad valor en bytes a SP antes de retornar, lo que es frecuente en el código generado por los compiladores para retornar de una función con parámetros. También se puede retornar de una interrupción con RETF 2, para que devuelva el registro de estado sin restaurarlo de la pila.
INT (interrupción)
Sintaxis: INT n (0 <= n <= 255)
Inicializa un procedimiento de interrupción de un tipo indicado en la instrucción. En la pila se introduce al llamar a una interrupción la dirección de retorno formada por los registros CS e IP y el estado de los indicadores. INT 3 es un caso especial de INT, al ensamblarla el ensamblador genera un sólo byte en vez de los dos habituales; esta interrupción se utiliza para poner puntos de ruptura en los programas. Véase también IRET y el apartado 1 del capítulo VII.
Ejemplo: int 21h
ADD (suma)
Sintaxis: ADD destino, origen
Suma los operandos origen y destino almacenando el resultado en el operando destino. Se activa el acarreo si se desborda el registro destino durante la suma.
Ejemplos: add ax,bx
add cl,dh
SUB (resta)
Sintaxis: SUB destino, origen
Resta el operando destino al operando origen, colocando el resultado en el operando destino. Los operandos pueden tener o no signo, siendo necesario que sean del mismo tipo, byte o palabra.
Ejemplos: sub al,bl
sub dx,dx
MUL (multiplicación sin signo)
Sintaxis: MUL origen (origen no puede ser operando inmediato)
Multiplica el contenido sin signo del acumulador por el operando origen. Si el
operando destino es un byte el acumulador es AL guardando el resultado en AH y AL, si el contenido de AH es distinto de 0 activa los indicadores CF y OF. Cuando el operando origen es de longitud palabra el acumulador es AX quedando el resultado sobre DX y AX, si el valor de DX es distinto de cero los indicadores CF y OF se activan.
Ejemplo: mul byte ptr ds:[di]
mul dx
mul cl
DIV (división sin signo)
Sintaxis: DIV origen (origen no puede ser operando inmediato)
Divide, sin considerar el signo, un número contenido en el acumulador y su extensión (AH, AL si el operando es de tipo byte o DX, AX si el operando es palabra) entre el operando fuente. El cociente se guarda en AL o AX y el resto en AH o DX según el operando sea byte o palabra respectivamente. DX o AH deben ser cero antes de la operación. Cuando el cociente es mayor que el resultado máximo que puede almacenar, cociente y resto quedan indefinidos produciéndose una interrupción 0. En caso de que las partes más significativas del cociente tengan un valor distinto de cero se activan los indicadores CF y OF.
Ejemplo: div bl
div mem_pal
Hasta ahora hemos visto los mnemónicos de las instrucciones que pasadas a su correspondiente código binario que ya puede entender el microprocesador. Si bien se realiza un gran avance al introducir los mnemónicos respecto a programar directamente en lenguaje maquina -es decir, con números en binario o hexadecimal- aún resultaría tedioso tener que realizar los cálculos de los desplazamientos en los saltos a otras partes del programa en las transferencias de control, reservar espacio de memoria dentro de un programa para almacenar datos, etc… Para facilitar estas operaciones se utilizan las directivas que indican al ensamblador qué debe hacer con las instrucciones y los datos.
Referencia:Link
Cuando apareció la primera Computadora Personal (PC)
Una computadora personal, computador personal u ordenador, conocida como PC (siglas en inglés de personal computer), es un tipo de microcomputadora diseñada en principio para ser utilizada por una persona a la vez.
En la década de 1940 fueron creadas las primeras computadoras modernas, con alimentación eléctrica. La velocidad y capacidad de memoria limitadas forzaron a los programadores a escribir programas, en lenguaje ensamblador muy afinados. Finalmente se dieron cuenta de que la programación en lenguaje ensamblador requería de un gran esfuerzo intelectual y era muy propensa a errores.
Referencia:Link
En la década de 1940 fueron creadas las primeras computadoras modernas, con alimentación eléctrica. La velocidad y capacidad de memoria limitadas forzaron a los programadores a escribir programas, en lenguaje ensamblador muy afinados. Finalmente se dieron cuenta de que la programación en lenguaje ensamblador requería de un gran esfuerzo intelectual y era muy propensa a errores.
Referencia:Link
¿Cual fue el primer lenguaje de programación?
En 1946 Grace Hopper, cientifica en sistemas y oficial de la marina estadounidense creo el FLOW-MATIC, considerado el primer lenguage de computadora útil para resolver problemas de usuarios comerciales, especificamente para la computadora UNIVAC 1. Era ligeramente cercano al idioma inglés y visto como un lenguaje de ‘alto nivel’: fácil de usar por los programadores pero necesitaba ser traducido por otro programa (compilador) en un lenguaje que la computadora pudiera interpretar y llevar a cabo.
En 1957 la compañia IBM creó FORTRAN, lenguaje diseñado especificamente para uso científico. Su nombre proviene del ingles Formula-Translator, o traductor de fórmulas. Éste se convirtio en el primer lenguaje de programación de alto nivel para programadores disponible para programadores de espectro mas alto.
En 1958 surgió una versión mejorada llamada ALGOL (Algoritihmic Laguaje) y despues COBOL (Command Business Oriented Languaje); este ultimo se empleaba para organizar archivos y administrar bases de datos de negocios.
Referencia:Link
Ley de Moore
La ley de Moore expresa que aproximadamente cada dos años se duplica el número de transistores en un microprocesador.
A pesar de que la ley originalmente fue formulada para establecer que la duplicación se realizaría cada 1 año,1 posteriormente Moore redefinió su ley y amplió el periodo a dos años.2 Se trata de una ley empírica, formulada por el cofundador de Intel, Gordon E. Moore, el 19 de abril de 1965, cuyo cumplimiento se ha podido constatar hasta hoy.1 2 3
En 1965, Gordon Moore afirmó que la tecnología tenía futuro, que el número de transistores por unidad de superficie en circuitos integrados se duplicaba cada año y que la tendencia continuaría durante las siguientes dos décadas.1
Más tarde, en 1975, modificó su propia ley al corroborar que el ritmo bajaría, y que la capacidad de integración no se duplicaría cada 12 meses sino cada 24 meses aproximadamente.4 Este periodo a veces se cita equivocadamente como 18 meses debido al ejecutivo de Intel David House, quien predijo que el desempeño del chip se duplicaría cada 18 meses (siendo una combinación del efecto de más transistores y los transistores siendo más rápidos)5. Esta progresión de crecimiento exponencial, duplicar la capacidad de los circuitos integrados cada dos años, es lo que se denomina ley de Moore. Sin embargo, en 2007 el propio Moore determinó una fecha de caducidad: «Mi ley dejará de cumplirse dentro de 10 o 15 años»,6 según aseguró durante la conferencia en la que afirmó, no obstante, que una nueva tecnología vendrá a suplir a la actual.7
La consecuencia directa de la ley de Moore es que los precios bajan al mismo tiempo que las prestaciones suben: la computadora que hoy vale 3000 dólares costará la mitad al año siguiente y estará obsoleta en dos años. En 26 años el número de transistores en un chip se ha incrementado 3200 veces.
Actualmente esta ley se aplica a ordenadores personales y teléfonos móviles o celulares. Sin embargo, cuando se formuló no existían los microprocesadores, inventados en 1971, los ordenadores personales, popularizados en los años ochenta y la telefonía celular o móvil apenas estaba en fase de experimentación.
Referencia:
Link
Referencia:
Link
Suscribirse a:
Entradas (Atom)