viernes, 20 de abril de 2012

TEORIA

ANALIZADOR DE RENDIMIENTO


Los analizadores de rendimiento (denominados habitualmente en lengua inglesa  profilers) son herramientas que permiten examinar el  comportamiento de los programas en tiempo de ejecución, permitiendo comprobar que zonas del código trabajan eficientemente y cuales deberían ser revisadas por su bajo rendimiento. Actualmente la mayor parte de los compiladores comerciales incorporan analizadores de rendimiento, por  Ejemplo:  TURBO PROFILERde Borland y Source Profilerde Microsoft.




COMPRESORES

Un traductor es un programa que procesa un texto fuente y genera un texto objeto. El traductor está escrito en un lenguaje de implementación (LI) o también denominado lenguaje host. El texto fuente está escrito en lenguaje fuente (LF), Lenguaje de alto nivel. El texto objeto está escrito en lenguaje objeto (LO)
Lenguajes de bajo nivel. El lenguaje objeto (LO) es el lenguaje al que se traduce el texto fuente
El lenguaje de implementación (LI) o lenguaje host es el lenguaje en que está escrito el traductor. Puede ser cualquier lenguaje, desde un lenguaje de alto nivel a un lenguaje máquina.

 

DECOPILADORES
Los decompiladores realizan la tarea inversa a los compiladores, es decir son un caso particular de los traductores en los cuales el programa fuente es un lenguaje de bajo nivel y el lenguaje objeto es un lenguaje de nivel superior. Esta tarea es difícil, sobre todo si se desea que el lenguaje objeto tenga una cierta lógica, a no ser que se conozca la forma en que se obtuvo el programa de bajo nivel (por ejemplo si se generó con un compilador determinado, y se tiene el esquema de generación de código de dicho compilador).

DEPURADORES

Los depuradores (en inglés debuggers, literalmente desparasitadores) son herramientas que permiten encontrar y corregir loserrores de los programas (denominádos en inglés bugs, parásitos). Estas herramientas suelen ir ligadas a los compiladores de forma que el programador pueda comprobar y visualizar la correcta ejecución de un programa. Las características habituales de los depuradores son:
• Permiten observar la traza de los programas fuente, permitiendo la visualización del valor de cualquier variable,  dirección, o expresión.
• Comprobación del código objeto generado (habitualmente ensamblador o instrucciones en código máquina) por  cada instrucción del programa fuente.
• Observación de la traza a bajo nivel del programa ejecutable, visualizando en ejecución los valores de las distintas posiciones de memoria, de los registros del microprocesador, etc...
Los depuradores utilizan parte de la información usada en tiempo de compilación por el compilador, y que habitualmente no se almacena en ejecución, lo cual permite restablecer los lazos existentes entre el código fuente y el código objeto. Como depuradores comerciales en el entorno DOS se pueden citar TURBO DEBUGGER de Borland y CodeView de Microsoft.
DESESAMBLADOR

 Un caso particular de los decompiladores son los desensambladores, que traducen de código máquina a ensamblador, quizá es un caso más fácil dado que hay una correspondencia directa entre las instrucciones ensamblador y código máquina.
Un ejemplo de desensambladores es el j-- [AZAÑ97, AZAÑ98], donde se desarrollan un conjunto de herramientas para desensamblar y ensamblar bytecode de la máquina virtual de Java (JVM).

EDITORES

Los editores de lenguajes de programación con sintaxis resaltada por medio de colores o tipos de letra permiten llamar a la atención al programador en el momento mismo que está escribiendo el programa, sin necesidad de compilar, dado que llevan incorporada la sintaxis del lenguaje.KLITE, LZEXE, etc...).
FORMATEDORES

Los formateadores pueden ser de muchos tipos y con diferentes fines, desde los dedicados a formatear textos, ecuaciones oprogramas. Los formateadores de programas resaltan su sintaxis o su estructura, para lo cual es necesario conocer la sintaxis del lenguaje a formatear. También pueden entrar dentro de este grupo los conversores de formatos.
PREPROCEADORES
Es un caso particular de un traductor en el cual se hacen sustituciones de las macros definidas. El preprocesador realiza las sustituciones, pero no hace ningún tipo de análisis del contexto donde las realiza, ésta es la principal diferencia entre un preprocesador y otros tipos de procesadores de lenguaje. Un ejemplo de preprocesador es el incorporado por los compiladores de lenguaje C.

OPTIMIZADORES DE CODIGO
Los optimizadores de código pueden ser herramientas independientes, o estar incluidas en los compiladores e invocarse por medio de opciones de compilación, siendo esta última forma como se suelen encontrar en la mayor parte de los compiladores comerciales. Una opción habitual de optimización es elegir entre velocidad de ejecución y tamaño del código ejecutable. Otras opciones son:
generar código para un microprocesador específico dentro de una familia de microprocesadores, eliminar la comprobación de rangos o desbordamientos de pila (stack), evaluación en cortocircuito (short-circuit) para expresiones booleanas, eliminación de código muerto o no utilizado, eliminación de funciones no utilizadas (por ejemplo la opción /PACKFUNCTIONS de Microsoft), etc...

INTERPRETES
Los intérpretes son programas que simplemente ejecutan las instrucciones que encuentran en el texto fuente. En muchos casos coexisten en memoria el programa fuente y el programa intérprete Algunos de los lenguajes comúnmente interpretados son el BASIC, LOGO, PROLOG, SMALLTALK, APL y LISP.


COMPILADOR
Un traductor que transforma textos fuente de lenguajes de alto nivel a lenguajes de bajo nivel se le denomina compilador (en inglés compiler). El tiempo que se necesita para traducir un lenguaje de alto nivel a lenguaje objeto se denomina tiempo de compilación (compilation time). El tiempo que tarda en ejecutarse un programa objeto se denomina tiempo de ejecución (run time)


Compilar hola mundo en java

http://youtu.be/HDXuuvicRMs

Intalacion de un decopilador VB Lite y ejemplo


http://youtu.be/J5uqFSo2jKU

sábado, 17 de marzo de 2012

MASM 6.11

El Microsoft Macro Assembler es un x86 ensamblador que utiliza la sintaxis de Intel de Microsoft Windows . As of 2011 there was a version of the Microsoft Macro Assembler for 16-bit and 32-bit assembly sources, MASM , and a different one, ML64 , for 64-bit sources only. A partir de 2011 había una versión de Microsoft Macro Assembler para 16-bit y 32-bit fuentes de la asamblea, MASM, y otra distinta, ML64, para 64-bit sólo las fuentes. References below to MASM include ML64 where appropriate. Las referencias siguientes a MASM ML64 incluyen en su caso.
MASM is maintained by Microsoft , but since version 6.12 has not been sold as a separate product, but supplied with various Microsoft SDKs and C compilers. MASM es mantenido por Microsoft , pero desde la versión 6.12 no se ha vendido como un producto separado, pero se suministra con varios Microsoft SDK y C compiladores. As of 2011 , MASM 8.0 was available free of charge for download from Microsoft for non-commercial use only. [ 1 ] It will only install if Visual C++ 2005 Express , also downloadable without charge, is already installed. A partir de 2011 , MASM 8.0 estaba disponible de forma gratuita para su descarga de Microsoft para uso no comercial solamente. [1] , sólo se instalará si Visual C + + 2005 Express , también se puede descargar de forma gratuita, ya está instalado.


LINK PARA PROGRAMAR E INSTALAR :
http://www.youtube.com/watch?v=qOvw37rMCds&feature=player_detailpage 

INTERFACES

.NET



DELPHY

VISUAL BASIC

BASIC

C#

C++

C++

FORTRAN

J#

JAVA



JFR

PHYTON

PASCAL

LENGUAJES DE PROGRAMACION


LENGUAJES DE PROGRAMACION
Un lenguaje de programación es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.[1] Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación.
También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:
  • El desarrollo lógico del programa para resolver un problema en particular.
  • Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa).
  • Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.
  • Prueba y depuración del programa.
  • desarrollo de la documentación.
CLASIFICACIÓN DEL LENGUAJE EMSAMBLADOR

1.-  
El lenguaje máquina es la forma más baja de un lenguaje de programación. Cada instrucción en un programa se representa por un código numérico, y unas direcciones (que son otros códigos numéricos) que se utiliza para referir las asignaciones de memoria del ordenador. El lenguaje máquina es la notación que entiende directamente el ordenador, está en binario o en notación hexadecimal, y el repertorio de sus instrucciones, así como la estructura de éstas, están ligadas directamente a la arquitectura de la máquina. Los ordenadores actuales se basan en la arquitectura de la máquina deVon Neumann [BURK46, FERN94].La máquina de VonNeumann tiene un repertorio de instrucciones basado en datos, operaciones aritméticas, asignaciones de posiciones de memoria y control de flujo. Véase en el anexo I una breve descripción del lenguaje máquina de los microprocesadores 80x86.

2.- El lenguaje ensamblador es esencialmente una versión simbólica de un lenguaje máquina. Cada código de operación se indica por un código simbólico. Por ejemplo ADD para adición y MUL para multiplicación. Además, las asignaciones de memoria se dan con nombres simbólicos, tales como PAGO y COBRO. Algunos ensambladores contienen macroinstrucciones cuyo nivel es superior a las instrucciones del ensamblador. Véase el anexo II el lenguaje ensamblador de la familia de los microprocesadores 80x86.
3.- Lenguajes de programación de bajo nivel: Son mucho mas fáciles de utilizar que el lenguaje máquina, pero dependen mucho de la máquina o computadora como sucedía con el lenguaje máquina. El lenguaje ensamblador fue el primer lenguaje de programación que trato de sustituir el lenguaje máquina por otro mucho más parecido al de los seres humanos. En este lenguaje se conoce como programa fuente a un programa de instrucciones escrito en lenguaje ensamblador por el programador, y programa objeto es la  traducción a lenguaje máquina del programa fuente.Los lenguajes de este tipo pueden crear programas muy rápidos, pero son difíciles  de aprender, son específicos de cada procesador, si nos llevamos el programa a otro computador será preciso reescribir el programa desde el comienzo.

4.- Lenguajes de programación de alto nivel: Este tipo de lenguajes de programación son independientes de la máquina, lo podemos usar en cualquier computador con muy pocas modificaciones o sin ellas, son muy similares al lenguaje humano, pero precisan de un programa interprete o compilador que traduzca este lenguaje de programación de alto nivel a uno de bajo nivel como el lenguaje de máquina que la computadora pueda entender.Los lenguajes de programación de alto nivel son más fáciles de aprender porque se usan palabras o comandos del lenguaje natural, como por ejemplo del inglés. Este es el caso del BASIC, el lenguaje de programación más conocido.Existen muchos lenguajes de programación de alto nivel con sus diferentes  versiones. Por esta razón es difícil su tipificación, pero una clasificación muy  extendida desde el punto de vista de trabajar de los programas y la filosofía de su  creación es la siguiente:

- Lenguajes de programación imperativos: entre ellos tenemos el Cobol, Pascal, C y
Ada.

- Lenguajes de programación declarativos: el Lisp y el Prolog.

- Lenguajes de programación orientados a objetos: el Smalltalk y el C++.

- Lenguajes de programación orientados al problema: son aquellos lenguajes  específicos para gestión.

- Lenguajes de programación naturales: son los nuevos lenguajes que pretender  aproximar el diseño y la construcción de programas al lenguaje de las personas.
Según su generación
Ø  La primera generación está constituida por los lenguajes máquina y ensamblador desarrollados en los años cuarenta y cincuenta.
Ø  La segunda generación comienza con el desarrollo del primer compilador deFORTRANen el año 1958 y continua hasta mediados de los años sesenta con la normalización por el American National Standard Institute (ANSI) de los lenguajes de programación, ligados hasta ese momento a marcas comerciales. Se caracteriza por los lenguajes con asignación estática de memoria, es decir toda la memoria se asigna en tiempo de compilación. Estos lenguajes no tenían ni recursividad, ni manejaban estructuras dinámicas de datos. Ejemplos de estos lenguajes son FORTRAN y COBOL.
Ø  La tercera generación está ligada al término programación estructurada, y se desarrolla entre mediados de los años sesenta y mediados de los años setenta, aunque a nivel de lenguajes sus raíces están en el lenguaje Algol 60 (desarrollado a principios de los años sesenta). Como características principales de los lenguajes de esta generación son:uso de módulos o subprogramas, variables locales, recursividad, y estructuras dinámicas. Ejemplos de estos lenguajes son: Algol 60, PL/I, Algol 68, Pascal, Modula, y C.
Ø  La cuarta generación está caracterizada por lenguajes de muy alto nivel dedicados a tareas específicas, en muchos casos denominados herramientas. Una gran parte de ellos están dedicados a la gestión de bases de datos y a la generación de aplicaciones con herramientas CASE. El desarrollo de estos lenguajes se produce desde mediados de los años setenta hasta finales de los ochenta. Ejemplos: SQL, DB2, DBASE, Ingress, Natural, Ideal, Application Factory, etc.
Ø  La quinta generación está asociada a los lenguajes ligados a la Inteligencia Artificial. La mayor parte de este tipo de lenguajes son versiones actualizadas o descendientes de los lenguajes Lisp y Prolog. Aunque el lenguaje Lisp data de 1959, el desarrollo intenso de estos lenguajes se produce desde principios de los años ochenta a principios de los noventa. Ejemplos: Common Lisp, Prolog, Parlog, ML, Haskell, Miranda, etc.
Ø  Generación orientada a objetos. Es la última generación puede decirse que comienza a mediados de los años ochenta, aunque el primer lenguaje orientado a objetos fue el Simula 67, presentado en el año 1967. Smalltalk se comenzó a desarrollar a principios de los años setenta, desembocando en el Smalltalk 80, de amplio uso en la decada de los años ochenta. El desarrollo del lenguaje Ada (basado en objetos, no orientado a objetos) a finales de los 70 y la proliferación de las Interfaces Gráficas de Usuario (IGU) a finales de los ochenta ha implicado la creación de nuevos lenguajes o la ampliación de lenguajes para introducir el paradigma de  orientación a objetos. Ejemplos: Simula, Smalltalk, C++, Object Pascal, Turbo Pascal, CLOS, ObjectLisp, Eiffel, y Oberon.
Ø Generación visual. Comienza a principios de los años noventa, ligado a la exigencia de los usuarios de disponer
de interfaces amigables. La mayor parte de las características visuales van orientadas al diseño del interfaz de usuario. Ejemplos: Visual Basic, Delphi (versión visual del lenguaje Object Pascal)
Ø Generación internet. Comienza a mediados de los años noventa, ligado a la gran explosión de internet y a la
necesidad de manejar aplicaciones en distintas plataformas dentro de toda la red. El lenguaje más característico es Java, pero también se podrían incluir dentro de esta generación: XML, HTML, VRML y otros.

VENTAJAS Y DESVENTAJAS DEL LENGUAJE DE BAJO NIVEL
  • Mayor adaptación al equipo.
  • Posibilidad de obtener la máxima velocidad con mínimo uso de memoria.
Pero también tiene importantes inconvenientes:
  • Imposibilidad de escribir código independiente de la máquina.
  • Mayor dificultad en la programación y en la comprensión de los programas.
  • El programador debe conocer más de un centenar de instrucciones.
  • Es necesario conocer en detalle la arquitectura de la máquina.
Características
  • Se trabaja a nivel de instrucciones, es decir, su programación es al más fino detalle.
  • Está orientado a la máquina.

VENTAJAS Y DESVENTAJAS DEL LENGUAJE DE ALTO NIVEL
Las ventajas de los lenguajes de alto nivel son:

• Los lenguajes de alto nivel son más fáciles de aprender que los de bajo nivel. El aprendizaje de muchos lenguajes de alto nivel necesita pocos o nulos conocimientos del hardware, ya que dichos lenguajes son prácticamente independientes de la máquina. Sin embargo los lenguajes de alto nivel están cerrados a ciertas zonas de la máquina, a las que tienen acceso los lenguajes de bajo nivel.
• Los programadores se liberan de ocupaciones rutinarias con referencias a instrucciones simbólicas o numéricas, Asignaciones de memoria, etc. Tales tareas se manejan por un traductor que traslada el lenguaje de alto nivel al lenguaje máquina, y se evitan errores humanos.
• Un programador de lenguajes de alto nivel no necesita conocer la forma en que se colocan los distintos tipos de datos en la memoria del ordenador.
• La mayoria de los lenguajes de alto nivel ofrecen al programador una gran variedad de estructuras de control, que no se disponen en los lenguajes de bajo nivel. Por ejemplo los lenguajes de alto nivel tienen las siguientes construcciones de Controlde flujo:
- Sentencias condicionales (tales como IF-THEN-ELSE o CASE)
- Bucles (FOR, WHILE, REPEAT)
- Estructuras de bloque (BEGIN-END)
Estas estructuras de programación fomentan estilos y técnicas de programación estructurada.  Obteniéndose programas fáciles de leer, comprender y modificar. Con lo que se reducen los costos de programación al ser programas menos complicados quelos realizados en lenguajes de bajo nivel.
• Los programas escritos en lenguajes de alto nivel se depuran más fácilmente que los escritos en lenguaje máquina o ensamblador. Los lenguajes de alto nivel tienen construcciones que eliminan o reducen ciertos tipos de errores de programación, que aparecen en los lenguajes de bajo nivel.
• Los lenguajes de alto nivel tienen una mayor capacidad de creación de estructuras de datos, tanto estáticas como dinámicas, que facilitan la resolución de muchos problemas. Los lenguajes orientados a objeto también pueden manejar tipos abstractos de datos, que permiten la reutilización de código.
• Los lenguajes de alto nivel permiten un diseño modular de los programas, con lo que se consigue una división del trabajo entre los programadores, obteniéndose un mejor rendimiento en la realización de aplicaciones.
• Los lenguajes de alto nivel también incluyen la posibilidad de incorporar soporte para la programación orientada a objetos y la genericidad.
• Finalmente los lenguajes de alto nivel son relativamente independientes de la máquina, obteniéndose programas que se pueden ejecutar en diferentes ordenadores. Tan sólo hay que volver a compilarlos o interpretarlos, reduciéndose costos y, en general, pueden instalarse de nuevo si se queda el ordenador obsoleto. Sin embargo todos los programas escritos en lenguaje máquina y en ensamblador no se pueden implementar en otros ordenadores que no posean una arquitectura compatible o se utilice algunos de los métodos de transporte. Un lenguaje de alto nivel ha de procesarse antes de ejecutarse para que el ordenador pueda comprenderlo. Este proceso se realizará mediante un procesador de lenguaje.
Dada la importancia de poseer lenguajes de distintos niveles, se entiende la necesidad de escribir traductores que trasladen los lenguajes entre sí; de compiladores que pasen los lenguajes de alto nivel a bajo nivel; y de ensambladores que generen el código máquina de las distintas arquitecturas de ordenadores.Alos traductores, compiladores e intérpretes ensambladores, y otros programas que realizan operaciones con lenguajes se les denomina con el nombre genérico de procesadores de lenguaje.
Las desventajas del lenguaje de alto nivel
Los lenguajes de alto nivel también tienen sus inconvenientes sobre los lenguajes de bajo nivel. La comodidad del programador se paga en mayores tamaños de los ficheros ejecutables, y consecuentemente en mayores tiempos de compilación y de ejecución. Así en los anexos I (lenguaje máquina 80x86), II (lenguaje ensamblador 80x86), IV (lenguaje C) y VIII (lenguaje C++) se han escrito sendos programas que presentan en pantalla una cadena de caracteres con un saludo. Los cuatro ficheros ejecutables realizan la misma operación, mostrar en pantalla el mensaje "Hola a todos", sin embargo el tamaño del fichero ejecutable se va incrementando según se va ascendiendo en el nivel del lenguaje

LENGUAJE EMSAMBLADOR


PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR
SEDE IBARRA

LENGUAJES EMSAMBLADOR
Es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, micro controladores, y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador.
La importancia del lenguaje ensamblador radica principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sería que los programas en ensamblador ocupan menos espacio en memoria.
Ventajas y desventajas del Lenguaje Ensamblador
Ventajas
1. .- Como trabaja directamente con el microprocesador al ejecutar un
programa, pues como este lenguaje es el más cercano a la máquina la computadora lo procesa mas rápido.
2.
Eficiencia de tamaño .- Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan librerías y demás como son los lenguajes de alto nivel
3.
Flexibilidad .- Es flexible porque todo lo que puede hacerse con una máquina, puede hacerse en el lenguaje ensamblador de esta máquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al máximo los recursos de la máquina. O sea que en lenguaje ensamblador se pueden hacer tareas específicas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permite
Desventajas
Tiempo de programación .- Como es un lenguaje de bajo nivel requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel. Por otro lado, requiere de más cuidado por parte del programador, pues es propenso a que los errores de lógica se reflejen más fuertemente en la ejecución.
Programas fuente grandes .- Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos más instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores.
Peligro de afectar recursos inesperadamente .- Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la máquina, programar en este lenguaje lo más común que pueda pasar es que la máquina se bloquee o se reinicialice. Porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones inválidas, que normalmente no aparecen al usar un lenguaje de alto nivel.
Falta de portabilidad.- Porque para cada máquina existe un lenguaje ensamblador; por ello, evidentemente no es una selección apropiada de lenguaje cuando deseamos codificar en una máquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.