lenguaje interfaz

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR INSTITUTO TECNOLOGICO DE TAPACHULA LENGUAJE ENSAMBLA

Views 146 Downloads 4 File size 1023KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

INSTITUTO TECNOLOGICO DE TAPACHULA

LENGUAJE ENSAMBLADOR

LIC. NICOLAS CABRERA HIDALGO

11510226 - SWITMY MAYUMI ALVAREZ RUIZ

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Los ensambladores son programas que procesan los enunciados del programa origen en lenguaje ensamblador y los traducen en archivos en lenguaje máquina que son ejecutados por un microprocesador o un microcontrolador. Los ensambladores permiten que los programas origen se escriban y se editen en una computadora para generar un código ejecutable en otra computadora. El archivo en lenguaje objeto ejecutable resultante se carga y se ejecuta en el sistema destino.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Estos lenguajes son los más utilizados por los programadores. Están diseñados para que las personas escriban y entiendan los programas de un modo mucho más fácil que los lenguajes máquina y ensambladores. Un programa escrito en lenguaje de alto nivel es independiente de la máquina (las instrucciones no dependen del diseño del hardware o de una computadora en particular), por lo que estos programas son portables o transportables. Los programas escritos en lenguaje de alto nivel pueden ser ejecutados con poca o ninguna modificación en diferentes tipos de computadoras. Ventajas: El tiempo de formación de los programadores es relativamente corto comparado con otros lenguajes. La escritura de programas se basa en reglas sintácticas similares a los lenguajes humanos. Nombres de las instrucciones tales como READ, WRITE, PRINT, OPEN, etc. Las modificaciones y puestas a punto de los programas son más fáciles. Reducción del coste de los programas. Transportabilidad.

Desventajas: Incremento del tiempo de puesta a punto al necesitarse diferentes traducciones del programa fuente para conseguir el programa definitivo. No se aprovechan los recursos internos de la máquina que se explotan mucho mejor en lenguajes máquina y ensambladores. Aumento de la ocupación de memoria. El tiempo de ejecución de los programas es mucho mayor.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Un lenguaje de alto nivel permite al programador escribir las instrucciones de un programautilizando palabras o expresiones sintácticas muy similares al inglés. Por ejemplo, en C se pueden usar palabras tales como: case, if, for, while, etc. para construir con ellas instrucciones como: if( numero > 0 ) printf( "El número es positivo" ) que traducido al castellano viene a decir que: si numero es mayor que cero, entonces, escribir por pantalla el mensaje: "El número es positivo". Ésta es la razón por la que a estos lenguajes se les considera de alto nivel, porque se pueden utilizar palabras de muy fácil comprensión para el programador. En contraposición, los lenguajes de bajo nivel son aquellos que están más cerca del "entendimiento" de la máquina. Otros lenguajes de alto nivel son: Ada, BASIC, COBOL, FORTRAN, Pascal, etc. Otra carácterística importante de los lenguajes de alto nivel es que, para la mayoría de las instrucciones de estos lenguajes, se necesitarían varias instrucciones en un lenguaje ensamblador para indicar lo mismo. De igual forma que, la mayoría de las instrucciones de un lenguaje ensamblador, también agrupa a varias instrucciones de un lenguaje máquina.

Otra característica importante de los lenguajes de alto nivel es que, para la mayoría de las instrucciones de estos lenguajes, se necesitarían varias instrucciones en un lenguaje ensamblador para indicar lo mismo. De igual forma que, la mayoría de las instrucciones de un lenguaje ensamblador, también agrupa a varias instrucciones de un lenguaje de máquina.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

 VISUALES La programación visual brinda los conocimientos necesarios para diseñar y desarrollar aplicaciones con un entorno visual amigable y fácil de utilizar para el usuario. Los lenguajes de programación visual tienden a facilitar la tarea de los programadores, dado que con los primeros lenguajes de programación crear una ventana era tarea de meses de desarrollo y de un equipo de trabajo.

Programación Orientada a Objetos 

 

Define los programas en términos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. La técnica de programación orientada a objetos, se basa en fundamentos de diseño, técnicas y metodologías unificadas (UML). Lenguajes visuales como Visual Basic.Net, Borland Delphi, incorporan una completa implementación de la programación orientada a objetos y permiten aprovechar al máximo toda la funcionalidad que ofrecen estos lenguajes para el desarrollo de aplicaciones de gestión.

 Visual basic.NET Los compiladores de Visual Basic generan código que requiere una o más librerías de enlace dinámico para que funcione, conocidas comúnmente como DLL (sigla en inglés de dynamic-link library); en algunos casos reside en el archivo llamado MSVBVMxy.DLL (siglas de "MicroSoft Visual Basic Virtual Machine x.y", donde x.y es la versión) y en otros en VBRUNXXX.DLL ("Visual Basic Runtime X.XX"). Estas bibliotecas DLL proveen las funciones básicas implementadas en el lenguaje, conteniendo rutinas en código ejecutable que son cargadas bajo demanda en tiempo de ejecución. Además de las esenciales, existe un gran número de bibliotecas del tipo DLL con variedad de funciones, tales como las que facilitan el acceso a la mayoría de las funciones delsistema operativo o las que proveen medios para la integración con otras aplicaciones. Dentro del mismo Entorno de desarrollo integrado (IDE) de Visual Basic se puede ejecutar el programa que esté desarrollándose, es decir en modo intérprete (en realidad pseudo-compila el programa muy rápidamente y luego lo ejecuta, simulando la función de un intérprete puro). Desde ese entorno también se puede

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

generar el archivo en código ejecutable (exe); ese programa así generado en disco puede luego ser ejecutado sin requerir del ambiente de programación (incluso en modo stand alone), aunque sí será necesario que las librerías DLL requeridas por la aplicación desarrollada se encuentren también instaladas en el sistema para posibilitar su ejecución. El propio Visual Basic provee soporte para empaquetado y distribución; es decir, permite generar un módulo instalador que contiene al programa ejecutable y las bibliotecas DLL necesarias para su ejecución. Con ese módulo la aplicación desarrollada se distribuye y puede ser instalada en cualquier equipo (que tenga un sistema operativo compatible). Así como bibliotecas DLL, hay numerosas aplicaciones desarrolladas por terceros que permiten disponer de variadas y múltiples funciones, incluso mejoras para el propio Visual Basic; las hay también para el empaquetado y distribución, y hasta para otorgar mayor funcionalidad al entorno de programación (IDE).

Entorno de desarrollo Existe un único entorno de desarrollo para Visual Basic, desarrollado por Microsoft: Microsoft Visual Basic x.0, correspondientes a versiones desde la 1.0 hasta la 6.0, (con respectivas diferencias entre versiones del lenguaje). El entorno de desarrollo es muy similar al de otros lenguajes. Realizando una instalación típica del producto, las características básicas se presentan de la siguiente forma: 

En la parte superior aparecen tres elementos, en este orden: la barra de título donde figura el nombre del proyecto en curso y su estado (diseño o ejecución); la barra de menú con 13 opciones desplegables y una barra de herramientas; esta última se puede personalizar, posibilitando la inclusión de prácticamente la totalidad de los comandos del IDE.



En la parte central, cubriendo la franja de mayor área, se encuentra el espacio de trabajo. Éste incluye y muestra las ventanas del proyecto, las vistas del código fuente de los módulos, los objetos y los controles que contienen las ventanas de la aplicación y el panel de controles. 

El panel de controles, que aunque es móvil normalmente está ubicado a la derecha, por defecto cuenta con los siguientes controles:



PictureBox: Caja de imágenes Label: Etiqueta



LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

                 

TextBox: Caja de texto Frame: Marco CommandButton: Botón de comando CheckBox: Casilla de verificación OptionButton: Botón de opción ComboBox: Lista desplegable ListBox: Lista HScrollBar: Barra de desplazamiento horizontal VScrollBar: Barra de desplazamiento vertical Timer: Temporizador DriveListBox: Lista de unidades de disco DirListBox: Lista de directorios FileListBox: Lista de archivos Shape: Figura Line: Línea Image: Imagen Data: Conexión a origen de datos OLE: Contenedor de documentos embebidos compatibles con Object Linking and Embedding

Además de los listados, se pueden agregar todo tipo de controles de terceros, y hay una gran cantidad de ellos que se proveen con el propio Visual Basic 6.0. Los controles vienen embebidos dentro de archivos con extensión OCX. 

Las ventanas de proyecto, aunque móviles, se encuentran en el panel lateral derecho y contienen dos vistas principales:



El Explorador de proyectos, que muestra todos los elementos que componen el proyecto o grupos de proyectos (formularios, interfaz de controles, módulos de código, módulos de clase, etc.) El Panel de propiedades, donde se muestran todos los atributos de los objetos, controles, formularios, información de módulos clase, entre muchos otros.  La Ventana inmediato, por defecto se encuentra en la parte inferior, aunque puede no estar visible (se presionan las teclas Ctrl+G, en ese caso, para mostrar la ventana). Esta ventana resulta una herramienta muy útil a la hora de depurar el programa o bien para realizar pruebas rápidas, ya que permite imprimir mensajes de texto desde el código y ejecutar sentencias ycomandos simples



LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

inmediatamente (sólo sentencias que se puedan escribir en una sola línea). Por ejemplo, de la aplicación en curso, se puede consultar el valor de una variable o llamar a un método declarado en el módulo que se está depurando. Se puede ejecutar código "al vuelo", por ejemplo con sentencias como: ? sqr(2) siendo el signo ? un reemplazo natural del comando Print en Basic, al ejecutar la sentencia se mostraría por pantalla el valor de la raíz cuadrada de 2. También se pueden usar variables del propio programa, o sentencias de código tales como: Msgbox "Prueba de cuadro de mensaje de error.", vbCritical, "Título del mensaje" A la hora de la depuración puede ser útil para consultar el valor de variables del programa, o el código de error como: ? Err.Number  Borland Delphi Delphi, es un Lenguaje de Programación Orientado a Objetos basado en Pascal, más concretamente en ObjectPascal, un Pascal Orientado a Objetos (OO), completamente comprometido con el modelo de objetos, comparable a Java. En torno a él, Borland ha comercializado su entorno de desarrollo denominado Borland Delphi: un ambiente visual de desarrollo, similar al de VisualBasic de Microsoft. Delphi proporciona una jerarquía de muy extensa de Clases de Objetos reusables y extensibles, con recursos de computación visuales y de procesamiento. La clase base de todo el árbol jerárquico de herencia es la clase TObject, que es la clase de la cual derivarán en resto de las que componen la estructura jerárquica de clases de Delphi. TObject ofrece la funcionalidad mínima exigible a un objeto de Delphi. En la clase TObject se definen el constructor Create, el destructor Destroy y el método Free. Además ofrece tipos de datos de lo más variopintos, desde los típicos datos numéricos (enteros y reales) y cadenas de caracteres cortas, a otros no tan usuales como son las fechas y las horas, vectores abiertos, vectores dinámicos, clases para representación de listas, streams para manejo de ficheros, etc.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Un proyecto de aplicación en Delphi tiene la extensión dpr: Delphi Project. Delphi permite descomponer las aplicaciones en pequeñas unidades o módulos relativamente independientes, y todo ello será integrado gracias al fichero de proyecto. Permite desarrollar rápidamente aplicaciones soportadas por Bases de Datos, mediante la inclusión de Clases de acceso a diversos sistemas de BD. Además, ofrece clases para el desarrollo de aplicaciones en Internet soportadas por TCP/IP.  WEB Actualmente existen diferentes lenguajes de programación para desarrollar en la web, estos han ido surgiendo debido a las tendencias y necesidades de las plataformas. En el presente artículo pretende mostrar las ventajas y desventajas de los lenguajes más conocidos. Desde los inicios de Internet, fueron surgiendo diferentes demandas por los usuarios y se dieron soluciones mediante lenguajes estáticos. A medida que paso el tiempo, las tecnologías fueron desarrollándose y surgieron nuevos problemas a dar solución. Esto dio lugar a desarrollar lenguajes de programación para la web dinámicos, que permitieran interactuar con los usuarios y utilizaran sistemas de Bases de Datos.  Lenguaje HTML Desde el surgimiento de internet se han publicado sitios web gracias al lenguaje HTML. Es un lenguaje estático para el desarrollo de sitios web (acrónimo en inglés de HyperText Markup Language, en español Lenguaje de Marcas Hipertextuales). Desarrollado por el World Wide Web Consortium (W3C). Los archivos pueden tener las extensiones (htm, html).

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Ventajas:       

Sencillo que permite describir hipertexto. Texto presentado de forma estructurada y agradable. No necesita de grandes conocimientos cuando se cuenta con un editor de páginas web o WYSIWYG. Archivos pequeños. Despliegue rápido. Lenguaje de fácil aprendizaje. Lo admiten todos los exploradores. Desventajas:

    

Lenguaje estático. La interpretación de cada navegador puede ser diferente. Guarda muchas etiquetas que pueden convertirse en “basura” y dificultan la corrección. El diseño es más lento. Las etiquetas son muy limitadas.

 Lenguaje Javascript Este es un lenguaje interpretado, no requiere compilación. Fue creado por Brendan Eich en la empresa Netscape Communications. Utilizado principalmente

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

en páginas web. Es similar a Java, aunque no es un lenguaje orientado a objetos, el mismo no dispone de herencias. La mayoría de los navegadores en sus últimas versiones interpretan código Javascript. El código Javascript puede ser integrado dentro de nuestras páginas web. Para evitar incompatibilidades el World Wide Web Consortium (W3C) diseño un estándar denominado DOM (en inglés Document Object Model, en su traducción al español Modelo de Objetos del Documento).

Ventajas: 

Lenguaje de scripting seguro y fiable.



Los script tienen capacidades limitadas, por razones de seguridad.



El código Javascript se ejecuta en el cliente.

Desventajas: 

Código visible por cualquier usuario.



El código debe descargarse completamente.



Puede poner en riesgo la seguridad del sitio, con el actual problema llamado XSS (significa en inglés Cross Site Scripting renombrado a XSS por su similitud con las hojas de estilo CSS).  Lenguaje PHP Es un lenguaje de programación utilizado para la creación de sitio web. PHP es un acrónimo recursivo que significa “PHP Hypertext Pre-processor”, (inicialmente se llamó Personal Home Page). Surgió en 1995, desarrollado por PHP Group.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

PHP es un lenguaje de script interpretado en el lado del servidor utilizado para la generación de páginas web dinámicas, embebidas en páginas HTML y ejecutadas en el servidor. PHP no necesita ser compilado para ejecutarse. Para su funcionamiento necesita tener instalado Apache o IIS con las librerías de PHP. La mayor parte de su sintaxis ha sido tomada de C, Java y Perl con algunas características específicas. Los archivos cuentan con la extensión(php).

Ventajas: 

Facil de aprender.



Se caracteriza por ser un lenguaje muy rápido.



Soporta en cierta medida la orientación a objeto. Clases y herencia.



Es un lenguaje multiplataforma: Linux, Windows, entre otros.



Capacidad de conexión con la mayoría de los manejadores de base de datos: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre otras.



Capacidad de expandir su potencial utilizando módulos.



Posee documentación en su página oficial la cual incluye descripción y ejemplos de cada una de sus funciones.



Es libre, por lo que se presenta como una alternativa de fácil acceso para todos.



Incluye gran cantidad de funciones.



No requiere definición de tipos de variables ni manejo detallado del bajo nivel.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Desventajas: 

Se necesita instalar un servidor web.



Todo el trabajo lo realiza el servidor y no delega al cliente. Por tanto puede ser más ineficiente a medida que las solicitudes aumenten de número.



La legibilidad del código puede verse afectada al mezclar sentencias HTML y PHP.



La programación orientada a objetos es aún muy deficiente para aplicaciones grandes.



Dificulta la modularización.



Dificulta la organización por capas de la aplicación.

Seguridad: PHP es un poderoso lenguaje e intérprete, ya sea incluido como parte de un servidor web en forma de módulo o ejecutado como un binario CGI separado, es capaz de acceder a archivos, ejecutar comandos y abrir conexiones de red en el servidor. Estas propiedades hacen que cualquier cosa que sea ejecutada en un servidor web sea insegura por naturaleza. PHP está diseñado específicamente para ser un lenguaje más seguro para escribir programas CGI que Perl o C, y con la selección correcta de opciones de configuración en tiempos de compilación y ejecución, y siguiendo algunas prácticas correctas de programación.

 Lenguaje ASP Es una tecnología del lado de servidor desarrollada por Microsoft para el desarrollo de sitio web dinámicos. ASP significa en inglés (Active Server Pages),

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

fue liberado por Microsoft en 1996. Las páginas web desarrolladas bajo este lenguaje es necesario tener instalado Internet Information Server (IIS). ASP no necesita ser compilado para ejecutarse. Existen varios lenguajes que se pueden utilizar para crear páginas ASP. El más utilizado es VBScript, nativo de Microsoft. ASP se puede hacer también en Perl and Jscript (no JavaScript). El código ASP puede ser insertado junto con el código HTML. Los archivos cuentan con la extensión (asp).

Ventajas: 

Usa Visual Basic Script, siendo fácil para los usuarios. Comunicación óptima con SQL Server. Soporta el lenguaje JScript (Javascript de Microsoft).

 

Desventajas: 

Código desorganizado. Se necesita escribir mucho código para realizar funciones sencillas. Tecnología propietaria. Hospedaje de sitios web costosos.

  



Lenguaje ASP.NET

Este es un lenguaje comercializado por Microsoft, y usado por programadores para desarrollar entre otras funciones, sitios web. ASP.NET es el sucesor de la tecnología ASP, fue lanzada al mercado mediante una estrategia de mercado denominada .NET. El ASP.NET fue desarrollado para resolver las limitantes que brindaba tu antecesor ASP. Creado para desarrollar web sencillas o grandes aplicaciones.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Para el desarrollo de ASP.NET se puede utilizar C#, VB.NET o J#. Los archivos cuentan con la extensión (aspx). Para su funcionamiento de las páginas se necesita tener instalado IIS con el Framework .Net. Microsft Windows 2003 incluye este framework, solo se necesitará instalarlo en versiones anteriores.

Ventajas: 

Completamente orientado a objetos.



Controles de usuario y personalizados.



División entre la capa de aplicación o diseño y el código.



Facilita el mantenimiento de grandes aplicaciones.



Incremento de velocidad de respuesta del servidor.



Mayor velocidad.



Mayor seguridad.

Desventajas: 

Mayor consumo de recursos.  Lenguaje JSP Es un lenguaje para la creación de sitios web dinámicos, acrónimo de Java Server Pages. Está orientado a desarrollar páginas web en Java. JSP es un lenguaje multiplataforma. Creado para ejecutarse del lado del servidor. JSP fue desarrollado por Sun Microsystems. Comparte ventajas similares a las de ASP.NET, desarrollado para la creación de aplicaciones web potentes. Posee un motor de páginas basado en los servlets de Java. Para su funcionamiento se necesita tener instalado un servidor Tomcat.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Características: 

Código separado de la lógica del programa.



Las páginas son compiladas en la primera petición.



Permite separar la parte dinámica de la estática en las páginas web.



Los archivos se encuentran con la extensión (jsp).



El código JSP puede ser incrustado en código HTML.

Elementos de JSP Los elementos que pueden ser insertados en las páginas JSP son los siguientes: 

Código: se puede incrustar código “Java”.



Directivas: permite controlar parámetros del servlet.



Acciones: permite alterar el flujo normal de ejecución de una página. Ventajas:



Ejecución rápida del servlets.



Crear páginas del lado del servidor.



Multiplataforma.



Código bien estructurado.



Integridad con los módulos de Java.



La parte dinámica está escrita en Java.



Permite la utilización se servlets. Desventajas:

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR



Complejidad de aprendizaje.

 Lenguaje Python Es un lenguaje de programación creado en el año 1990 por Guido van Rossum, es el

sucesor

del

lenguaje

de

programación

ABC. Python es

comparado

habitualmente con Perl. Los usuarios lo consideran como un lenguaje más limpio para programar. Permite la creación de todo tipo de programas incluyendo los sitios web. Su código no necesita ser compilado, por lo que se llama que el código es interpretado. Es un lenguaje de programación multiparadigma, lo cual fuerza a que los programadores adopten por un estilo de programación particular: 

Programación orientada a objetos.



Programación estructurada.



Programación funcional.



Programación orientada a aspectos.

Ventajas: 

Libre y fuente abierta.



Lenguaje de propósito general.



Gran cantidad de funciones y librerías.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR



Sencillo y rápido de programar.



Multiplataforma.



Licencia de código abierto (Opensource).



Orientado a Objetos.



Portable.

Desventajas: 

Lentitud por ser un lenguaje interpretado.

 Lenguaje Ruby Es un lenguaje interpretado de muy alto nivel y orientado a objetos. Desarrollado en el 1993 por el programador japonés Yukihiro “Matz” Matsumoto. Su sintaxis está inspirada en Phyton, Perl. Es distribuido bajo licencia de software libre (Opensource). Ruby es un lenguaje dinámico para una programación orientada a objetos rápida y sencilla. Para los que deseen iniciarse en este lenguaje pueden encontrar un tutorial interactivo de ruby. Se encuentra también a disposición de estos usuarios un sitio con informaciones y cursos en español.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Características: 

Existe diferencia entre mayúsculas y minúsculas.



Múltiples expresiones por líneas, separadas por punto y coma “;”.



Dispone de manejo de excepciones.



Ruby puede cargar librerías de extensiones dinámicamente si el (Sistema Operativo) lo permite.



Portátil.

Ventajas:   

Permite desarrollar soluciones a bajo Costo. Software libre. Multiplataforma.

 Perl Perl permite resolver los problemas fáciles fácilmente, y resolver también problemas difíciles. Es rápido hacer una pequeña aplicación Web. Las ventajas principales son el que se trata de un lenguaje muy maduro, que lleva mucho tiempo funcionando, y que tiene cientos de bibliotecas operativas y listas para ser usadas.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

En Perl es más fácil que en otros lenguajes hacer algo inentendible y obscuro. Por otra parte, si uno tiene paciencia puede encontrar el 90% del trabajo que tenía que hacer ya hecho por otra persona, y el código que tiene que escribir es sólo el 10% más trivial. Perl debe ser usado precompilado vía ModPerl o el impacto en procesador es muy alto.

 MOVILES  Lenguaje C Propiedades 



     

 

Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas. Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura). Un sistema de tipos que impide operaciones sin sentido. Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente. Acceso a memoria de bajo nivel mediante el uso de punteros. Interrupciones al procesador con uniones. Un conjunto reducido de palabras clave. Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros. Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo. Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado").

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Carencias 

  

Recolección de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura de Boehm. Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un preprocesador que traducía código fuente de C++ a C. Funciones anidadas, aunque GCC tiene esta característica como extensión. Soporte nativo para programación multihilo.

Aunque la lista de las características útiles de las que carece C es larga, este factor ha sido importante para su aceptación, porque escribir rápidamente nuevos compiladores para nuevas plataformas, mantiene lo que realmente hace el programa bajo el control directo del programador, y permite implementar la solución más natural para cada plataforma. Ésta es la causa de que a menudo C sea más eficiente que otros lenguajes. Típicamente, sólo la programación cuidadosa en lenguaje ensamblador produce un código más rápido, pues da control total sobre la máquina, aunque los avances en los compiladores de C y la complejidad creciente de los microprocesadores modernos han reducido gradualmente esta diferencia. En algunos casos, una característica inexistente puede aproximarse. Por ejemplo, la implementación original de C++ consistía en un preprocesador que traducía código fuente C++ a C. La mayoría de las funciones orientadas a objetos incluyen un puntero especial, que normalmente recibe el nombre "this", que se refiere al objeto al que pertenece la función. Mediante el paso de este puntero como un argumento de función, esta funcionalidad puede desempeñarse en C. Por ejemplo, en C++ se puede escribir: stack.push(val); Mientras que en C se podría escribir: push(stack, (val); Donde el argumento stack es un puntero a una struct equivalente al puntero this de C++, que es un puntero a un objeto.  Java

Lenguaje simple Java posee una curva de aprendizaje muy rápida. Resulta relativamente sencillo escribir applets interesantes desde el principio. Todos aquellos familiarizados con C++ encontrarán que Java es más sencillo, ya que se han eliminado ciertas características, como los punteros. Debido a su semejanza con C y C++, y dado

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

que la mayoría de la gente los conoce aunque sea de forma elemental, resulta muy fácil aprender Java. Los programadores experimentados en C++ pueden migrar muy rápidamente a Java y ser productivos en poco tiempo. Orientado a objetos Java fue diseñado como un lenguaje orientado a objetos desde el principio. Los objetos agrupan en estructuras encapsuladas tanto sus datos como los métodos (o funciones) que manipulan esos datos. La tendencia del futuro, a la que Java se suma, apunta hacia la programación orientada a objetos, especialmente en entornos cada vez más complejos y basados en red. Distribuido Java proporciona una colección de clases para su uso en aplicaciones de red, que permiten abrir sockets y establecer y aceptar conexiones con servidores o clientes remotos, facilitando así la creación de aplicaciones distribuidas. Interpretado y compilado a la vez Java es compilado, en la medida en que su código fuente se transforma en una especie de código máquina, los bytecodes, semejantes a las instrucciones de ensamblador. Por otra parte, es interpretado, ya que los bytecodes se pueden ejecutar directamente sobre cualquier máquina a la cual se hayan portado el intérprete y el sistema de ejecución en tiempo real (run-time). Robusto Java fue diseñado para crear software altamente fiable. Para ello proporciona numerosas comprobaciones en compilación y en tiempo de ejecución. Sus características de memoria liberan a los programadores de una familia entera de errores (la aritmética de punteros), ya que se ha prescindido por completo los punteros, y la recolección de basura elimina la necesidad de liberación explícita de memoria. Seguro Dada la naturaleza distribuida de Java, donde las applets se bajan desde cualquier punto de la Red, la seguridad se impuso como una necesidad de vital importancia. A nadie le gustaría ejecutar en su ordenador programas con acceso total a su

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

sistema, procedentes de fuentes desconocidas. Así que se implementaron barreras de seguridad en el lenguaje y en el sistema de ejecución en tiempo real. Indiferente a la arquitectura Java está diseñado para soportar aplicaciones que serán ejecutadas en los más variados entornos de red, desde Unix a Windows Nt, pasando por Mac y estaciones de trabajo, sobre arquitecturas distintas y con sistemas operativos diversos. Para acomodar requisitos de ejecución tan variopintos, el compilador de Java genera bytecodes: un formato intermedio indiferente a la arquitectura diseñado para transportar el código eficientemente a múltiples plataformas hardware y software. El resto de problemas los soluciona el intérprete de Java. Portable La indiferencia a la arquitectura representa sólo una parte de su portabilidad. Además, Java especifica los tamaños de sus tipos de datos básicos y el comportamiento de sus operadores aritméticos, de manera que los programas son iguales en todas las plataformas. Estas dos últimas características se conocen como la Máquina Virtual Java(JVM). Alto rendimiento Multihebra Hoy en día ya se ven como terriblemente limitadas las aplicaciones que sólo pueden ejecutar una acción a la vez. Java soporta sincronización de múltiples hilos de ejecución (multithreading) a nivel de lenguaje, especialmente útiles en la creación de aplicaciones de red distribuidas. Así, mientras un hilo se encarga de la comunicación, otro puede interactuar con el usuario mientras otro presenta una animación en pantalla y otro realiza cálculos. Dinámico El lenguaje Java y su sistema de ejecución en tiempo real son dinámicos en la fase de enlazado. Las clases sólo se enlazan a medida que son necesitadas. Se pueden enlazar nuevos módulos de código bajo demanda, procedente de fuentes muy variadas, incluso desde la Red. Produce applets Java puede ser usado para crear dos tipos de programas: aplicaciones independientes y applets. Las aplicaciones independientes se comportan como cualquier otro programa escrito en cualquier lenguaje, como por ejemplo el navegador de Web HotJava, escrito íntegramente en Java.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Por su parte, las applets son pequeños programas que aparecen embebidos en las páginas Web, como aparecen los gráficos o el texto, pero con la capacidad de ejecutar acciones muy complejas, como animar imágenes, establecer conexiones de red, presentar menús y cuadros de diálogo para luego emprender acciones, etc.  Visual basic Los compiladores de Visual Basic generan código que requiere una o más librerías de enlace dinámico para que funcione, conocidas comúnmente como DLL (sigla en inglés de dynamic-link library); en algunos casos reside en el archivo llamado MSVBVMxy.DLL (siglas de "MicroSoft Visual Basic Virtual Machine x.y", donde x.y es la versión) y en otros en VBRUNXXX.DLL ("Visual Basic Runtime X.XX"). Estas bibliotecas DLL proveen las funciones básicas implementadas en el lenguaje, conteniendo rutinas en código ejecutable que son cargadas bajo demanda en tiempo de ejecución. Además de las esenciales, existe un gran número de bibliotecas del tipo DLL con variedad de funciones, tales como las que facilitan el acceso a la mayoría de las funciones delsistema operativo o las que proveen medios para la integración con otras aplicaciones. Dentro del mismo Entorno de desarrollo integrado (IDE) de Visual Basic se puede ejecutar el programa que esté desarrollándose, es decir en modo intérprete (en realidad pseudo-compila el programa muy rápidamente y luego lo ejecuta, simulando la función de un intérprete puro). Desde ese entorno también se puede generar el archivo en código ejecutable (exe); ese programa así generado en disco puede luego ser ejecutado sin requerir del ambiente de programación (incluso en modo stand alone), aunque sí será necesario que las librerías DLL requeridas por la aplicación desarrollada se encuentren también instaladas en el sistema para posibilitar su ejecución. El propio Visual Basic provee soporte para empaquetado y distribución; es decir, permite generar un módulo instalador que contiene al programa ejecutable y las bibliotecas DLL necesarias para su ejecución. Con ese módulo la aplicación desarrollada se distribuye y puede ser instalada en cualquier equipo (que tenga un sistema operativo compatible). Así como bibliotecas DLL, hay numerosas aplicaciones desarrolladas por terceros que permiten disponer de variadas y múltiples funciones, incluso mejoras para el propio Visual Basic; las hay también para el empaquetado y distribución, y hasta para otorgar mayor funcionalidad al entorno de programación (IDE).

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Entorno de desarrollo Existe un único entorno de desarrollo para Visual Basic, desarrollado por Microsoft: Microsoft Visual Basic x.0, correspondientes a versiones desde la 1.0 hasta la 6.0, (con respectivas diferencias entre versiones del lenguaje). El entorno de desarrollo es muy similar al de otros lenguajes. Realizando una instalación típica del producto, las características básicas se presentan de la siguiente forma: 

En la parte superior aparecen tres elementos, en este orden: la barra de título donde figura el nombre del proyecto en curso y su estado (diseño o ejecución); la barra de menú con 13 opciones desplegables y una barra de herramientas; esta última se puede personalizar, posibilitando la inclusión de prácticamente la totalidad de los comandos del IDE.



En la parte central, cubriendo la franja de mayor área, se encuentra el espacio de trabajo. Éste incluye y muestra las ventanas del proyecto, las vistas del código fuente de los módulos, los objetos y los controles que contienen las ventanas de la aplicación y el panel de controles. 

El panel de controles, que aunque es móvil normalmente está ubicado a la derecha, por defecto cuenta con los siguientes controles:



PictureBox: Caja de imágenes



Label: Etiqueta



TextBox: Caja de texto



Frame: Marco



CommandButton: Botón de comando



CheckBox: Casilla de verificación



OptionButton: Botón de opción



ComboBox: Lista desplegable



ListBox: Lista



HScrollBar: Barra de desplazamiento horizontal



VScrollBar: Barra de desplazamiento vertical



Timer: Temporizador



DriveListBox: Lista de unidades de disco



DirListBox: Lista de directorios



FileListBox: Lista de archivos



Shape: Figura

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR



Line: Línea



Image: Imagen



Data: Conexión a origen de datos



OLE: Contenedor de documentos embebidos compatibles con Object Linking and Embedding

Además de los listados, se pueden agregar todo tipo de controles de terceros, y hay una gran cantidad de ellos que se proveen con el propio Visual Basic 6.0. Los controles vienen embebidos dentro de archivos con extensión OCX. Las ventanas de proyecto, aunque móviles, se encuentran en el panel lateral derecho y contienen dos vistas principales: 





El Explorador de proyectos, que muestra todos los elementos que componen el proyecto o grupos de proyectos (formularios, interfaz de controles, módulos de código, módulos de clase, etc.) El Panel de propiedades, donde se muestran todos los atributos de los objetos, controles, formularios, información de módulos clase, entre muchos otros. La Ventana inmediato, por defecto se encuentra en la parte inferior, aunque puede no estar visible (se presionan las teclas Ctrl+G, en ese caso, para mostrar la ventana). Esta ventana resulta una herramienta muy útil a la hora de depurar el programa o bien para realizar pruebas rápidas, ya que permite imprimir mensajes de texto desde el código y ejecutar sentencias ycomandos simples inmediatamente (sólo sentencias que se puedan escribir en una sola línea). Por ejemplo, de la aplicación en curso, se puede consultar el valor de una variable o llamar a un método declarado en el módulo que se está depurando. Se puede ejecutar código "al vuelo", por ejemplo con sentencias como: ? sqr(2)

siendo el signo ? un reemplazo natural del comando Print en Basic, al ejecutar la sentencia se mostraría por pantalla el valor de la raíz cuadrada de 2.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

También se pueden usar variables del propio programa, o sentencias de código tales como: Msgbox "Prueba de cuadro de mensaje de error.", vbCritical, "Título del mensaje" A la hora de la depuración puede ser útil para consultar el valor de variables del programa, o el código de error como: ? Err.Number  WML El lenguaje WML (Wireless Markup Language) constituye la base para la creación de contenidos visualizables desde un terminal WAP (un terminal dotado con un micro-navegador WAP). Está basado en el XML, por lo que aquellos que posean ya conocimientos de este lenguaje no tendrán dificultad en aprender WML. Las páginas WML sólo permiten introducir texto y gráficos, debido a las propias capacidades de los terminales móviles. Por otra parte, los micro-navegadores de los terminales también soportan un lenguaje de script, llamado WMLScript, que permite manipular datos y dotar de cierta interactividad a la página WML. Por otra parte, los gráficos que pueden ser introducidos en una página WML deberán tener un formato especial, denominado WBMP. Este formato sólo permite imágenes en blanco y negro. Las páginas WML podrán ser ubicadas en cualquier servidor web convencional, siempre que éste haya sido correctamente configurado para servirlas. Por tanto, antes de "colgar" cualquier página WML en nuestro espacio de hosting tendremos que consultar con el ISP que nos lo ofrece para saber si tienen preparada dicha configuración.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

 Java script Las siguientes características son comunes a todas las implementaciones que se ajustan al estándar ECMAScript, a menos que especifique explícitamente en caso contrario.

Imperativo y estructurado JavaScript soporta gran parte de la estructura de programación de C (por ejemplo, sentencias if, bucles for, sentencias switch, etc.). Con un salvedad, en parte: en C, el ámbito de las variables alcanza al bloque en el cual fueron definidas; sin embargo en JavaScript esto no es soportado, puesto que el ámbito de las variables es el de la función en la cual fueron declaradas. Esto cambia con la versión de JavaScript 1.7, ya que soporta block scoping por medio de la palabra clave let. Como en C, JavaScript hace distinción entre expresiones y sentencias. Una diferencia sintáctica con respecto a C es la inserción automática de punto y coma, es decir, en JavaScript los puntos y coma que finalizan una sentencia pueden ser omitidos. Dinámico Tipado dinámico Como en la mayoría de lenguajes de scripting, el tipo está asociado al valor, no a la variable. Por ejemplo, una variable x en un momento dado puede estar ligada a un número y más adelante, religada a una cadena. JavaScript soporta varias formas de comprobar el tipo de un objeto, incluyendo duck typing. Una forma de saberlo es por medio de la palabra clave typeof. Objetual JavaScript esta formado casi en su totalidad por objetos. Los objetos en JavaScript son arrays asociativos, mejorados con la inclusión de prototipos (ver más adelante). Los nombres de las propiedades de los objetos son claves de tipo cadena: obj.x = 10 y obj['x'] = 10 son equivalentes, siendo la notación con punto azúcar sintáctico. Las propiedades y sus valores pueden ser creados, cambiados o eliminados en tiempo de ejecución. La mayoría de propiedades de un objeto (y aquellas que son incluidas por la cadena de la herencia prototípica) pueden ser enumeradas a por medio de la instrucción de bucle for... in. JavaScript tiene un pequeño número de objetos predefinidos como son Function y Date.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Evaluación en tiempo de ejecución JavaScript incluye la función eval que permite evaluar expresiones como expresadas como cadenas en tiempo de ejecución. Por ello se recomienda que eval sea utilizado con precaución y que se opte por utilizar la función JSON.parse() en la medida de lo posible, pues resulta mucho más segura. Funcional Funciones de primera clase A las funciones se les suele llamar ciudadanos de primera clase; son objetos en sí mismos. Como tal, poseen propiedades y métodos, como .call() y .bind(). Una función anidada es una función definida dentro de otra. Esta es creada cada vez que la función externa es invocada. Además, cada función creada forma una clausura; es el resultado de evaluar un ámbito conteniendo en una o más variables dependientes de otro ámbito externo, incluyendo constantes, variables locales y argumentos de la función externa llamante. El resultado de la evaluación de dicha clausura forma parte del estado interno de cada objeto función, incluso después de que la función exterior concluya su evaluación. Prototípico Prototipos JavaScript usa prototipos en vez de clases para el uso de herencia. Es posible llegar a emular muchas de las características que proporcionan las clases en lenguajes orientados a objetos tradicionales por medio de prototipos en JavaScript. Funciones como constructores de objetos Las funciones también se comportan como constructores. Prefijar una llamada a la función con la palabra clave new crear una nueva instancia de un prototipo, que heredan propiedades y métodos del constructor (incluidas las propiedades del prototipo de Object).21 ECMAScript 5 ofrece el método Object.create, permitiendo la creación explícita de una instancia sin tener que heredar automáticamente del prototipo de Object (en entornos antiguos puede aparecer el prototipo del objeto creado como null). La propiedad prototype del constructor determina el objeto usado para el prototipo interno de los nuevos objetos creados. Se pueden añadir nuevos métodos modificando el prototipo del objeto usado como constructor. Constructores predefinidos en JavaScript, como Array u Object, también

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

tienen prototipos que pueden ser modificados. Aunque esto sea posible se considera una mala práctica modificar el prototipo de Object ya que la mayoría de los objetos en Javascript heredan los métodos y propiedades del objeto prototype, objetos los cuales pueden esperar que estos no hayan sido modificados.

Otras características Entorno de ejecución JavaScript normalmente depende del entorno en el que se ejecute (por ejemplo, en un navegador web) para ofrecer objetos y métodos por los que los scripts pueden interactuar con el "mundo exterior". De hecho, depende del entorno para ser capaz de proporcionar la capacidad de incluir o importar scripts (por ejemplo, en HTML por medio del tag ). (Esto no es una característica del lenguaje per se, pero es común en la mayoría de las implementaciones de JavaScript.) Funciones variadicas Un número indefinido de parámetros pueden ser pasados a la función. La función puede acceder a ellos a través de los parámetros o también a través del objeto local arguments. Lasfunciones variadicas también pueden ser creadas usando el método .apply(). Funciones como métodos A diferencia de muchos lenguajes orientados a objetos, no hay distinción entre la definición de función y la definición de método. Más bien, la distinción se produce durante la llamada a la función; una función puede ser llamada como un método. Cuando una función es llamada como un método de un objeto, la palabra clave this, que es una variable local a la función, representa al objeto que invocó dicha función. Arrays y la definición literal de objetos Al igual que muchos lenguajes de script, arrays y objetos (arrays asociativos en otros idiomas) pueden ser creados con una sintaxis abreviada. De hecho, estos literales forman la base del formato de datos JSON.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Expresiones regulares JavaScript también soporta expresiones regulares de una manera similar a Perl, que proporcionan una sintaxis concisa y poderosa para la manipulación de texto que es más sofisticado que las funciones incorporadas a los objetos de tipo string.

 WP8: se programa con la excelente herramienta Visual Studio, o al menos a mí me parece excelente. Normalmente vas a programar con C++ o C# dependiendo un poco de lo que quieres hacer y de tus gustos. Yo recomiendo C++ para videojuegos y C# para programas de gestión, pero es una idea solamente. C# es un grandísimo lenguaje, lástima que Microsoft no lo potencie como debiera, y ahora se haya cargado las librerías XNA, obligando a usar las bibliotecas de W8/WP8. La versión de Visual Studio Express es gratuita y puedes empezar a hacer tus pinitos con dicha herramienta.

 Android: En Android pasa algo similar, tenemos el C++ y sobre todo el Java sobre el entorno Eclipse, muy popular hoy en día. En general se programa en Java tanto juegos como aplicaciones. Yo sin embargo prefiero C++ por dos razones: porque existen librerías gráficas escritas en C++ (Cocos2d-x) y porque C++ es infinitamente más rápido que Java. El problema de C++ es que es más exigente que Java para programar, pero ese es el precio que hay que pagar para hacer cosas eficientes. ¿Por qué Windows, o Unix, o Linux, o los juegos comerciales, o bases de datos, NO están escritos en Java? Porque saben que este lenguaje simplemente no da la talla. Están escritos en C/C++ que es lo que se llama un lenguaje eficiente. Si tienes problemas para programar en este lenguaje o te da miedo eso es normal, a mí también me pasa, pero el esfuerzo merece la pena.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

 iOS: Apple, al tener el control de todo lo que hace dispone de unas herramientas y lenguajes muy definidos. El entorno de trabajo se llama Xcode, y el lenguaje de desarrollo Objective C, que es un derivado del C orientado a objetos (como ocurre con el C++, pero ojo son distintos). Es gratuito y puedes bajártelo y empezar a hacer tus pinitos enseguida con el emulador de iOS (iPhone, iPad). Para ejecutar directamente en un teléfono o tablet necesitas la licencia de programador y en consecuencia apoquinar 80 euros al año. Antes de poner el grito en el cielo recordad que Microsoft hace lo mismo. Y antes de decidiros por Android, pensad bien si el tema económico es suficiente para decantaros por una plataforma u otra. Y otra cosa: recuerda que necesitas un Mac para programar.

El lenguaje ensamblador, o assembler (assembly language en inglés), es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, microcontroladores 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. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portátiles. Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina. Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y son llamados macro ensambladores. Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, altos rendimientos, o un uso de recursos controlado y reducido. Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la única manera de ser manipulados.

CARACTERISTICAS 









El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel. El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un microprocesador, puede necesitar ser modificado, para poder ser usado en otra máquina distinta. Al cambiar a una máquina con arquitectura diferente, generalmente es necesario reescribirlo completamente. Los programas hechos por un programador experto en lenguaje ensamblador son generalmente mucho más rápidos y consumen menos recursos del sistema (memoria RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto nivel. Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear segmentos de código difíciles y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no están disponibles en los lenguajes de alto nivel. También se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir que se interrumpa durante su ejecución.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

PROGRAMA ENSAMBLADOR Típicamente, un programa ensamblador (assembler en inglés) moderno crea código objeto traduciendo instrucciones mnemónicas de lenguaje ensamblador en opcodes, y resolviendo losnombres simbólicos para las localizaciones de memoria y otras entidades.1 El uso de referencias simbólicas es una característica clave del lenguaje ensamblador, evitando tediosos cálculos y actualizaciones manuales de las direcciones después de cada modificación del programa. La mayoría de los ensambladores también incluyen facilidades de macros para realizar sustitución textual - ej. generar cortas secuencias de instrucciones como expansión en línea en vez de llamar a subrutinas. Los ensambladores son generalmente más simples de escribir que los compiladores para los lenguajes de alto nivel, y han estado disponibles desde los años 1950. Los ensambladores modernos, especialmente para las arquitecturas basadas en RISC, tales como MIPS, Sun SPARC, y HP PA-RISC, así como también para el x86 (-64), optimizan la planificación de instrucciones para explotar la segmentación del CPU eficientemente. En los compiladores para lenguajes de alto nivel, son el último paso antes de generar el código ejecutable

Numero de pasos Típicamente, un programa ensamblador (assembler en inglés) moderno crea código objeto traduciendo instrucciones mnemónicas de lenguaje ensamblador en opcodes, y resolviendo losnombres simbólicos para las localizaciones de memoria y otras entidades.1 El uso de referencias simbólicas es una característica clave del lenguaje ensamblador, evitando tediosos cálculos y actualizaciones manuales de las direcciones después de cada modificación del programa. La mayoría de los ensambladores también incluyen facilidades de macros para realizar sustitución textual - ej. generar cortas secuencias de instrucciones como expansión en línea en vez de llamar a subrutinas. Los ensambladores son generalmente más simples de escribir que los compiladores para los lenguajes de alto nivel, y han estado disponibles desde los años 1950. Los ensambladores modernos, especialmente para las arquitecturas basadas en RISC, tales como MIPS, Sun SPARC, y HP PA-RISC, así como también para el x86 (-64), optimizan la planificación de instrucciones para explotar la segmentación del CPU eficientemente.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

En los compiladores para lenguajes de alto nivel, son el último paso antes de generar el código ejecutable

Ensambladores de alto nivel Los más sofisticados ensambladores de alto nivel proporcionan abstracciones del lenguaje tales como:    



Estructuras de control avanzadas Declaraciones e invocaciones de procedimientos/funciones de alto nivel Tipos de datos abstractos de alto nivel, incluyendo las estructuras/records, uniones, clases, y conjuntos Procesamiento de macros sofisticado (aunque está disponible en los ensambladores ordinarios desde finales 1960 para el IBM/360, entre otras máquinas) Características de programación orientada a objetos

Uso del termino Note que, en el uso profesional normal, el término ensamblador es frecuentemente usado tanto para referirse al lenguaje ensamblador como también al programa ensamblador (que convierte elcódigo fuente escrito en el lenguaje ensamblador a código objeto que luego será enlazado para producir lenguaje de máquina). Las dos expresiones siguientes utilizan el término "ensamblador":  

"El CP/CMS fue escrito en ensamblador del IBM S/360" "El ASM-H fue un ensamblador del S/370 ampliamente usado"

La primera se refiere al lenguaje y la segundo se refiere al programa.

LENGUAJE El lenguaje ensamblador refleja directamente la arquitectura y las instrucciones en lenguaje de máquina de la CPU, y pueden ser muy diferentes de una arquitectura de CPU a otra. Cadaarquitectura de microprocesador tiene su propio lenguaje de máquina, y en consecuencia su propio lenguaje ensamblador ya que este se encuentra muy ligado a la estructura del hardware para el cual se programa. Los microprocesadores difieren en el tipo y número de operaciones que soportan; también pueden tener diferente cantidad de registros, y distinta representación de los tipos de datos en memoria. Aunque la mayoría de los

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

microprocesadores son capaces de cumplir esencialmente las mismas funciones, la forma en que lo hacen difiere y los respectivos lenguajes ensamblador reflejan tal diferencia. Instrucciones de CPU La mayoría de las CPU tienen más o menos los mismos grupos de instrucciones, aunque no necesariamente tienen todas las instrucciones de cada grupo. Las operaciones que se pueden realizar varían de una CPU a otra. Una CPU particular puede tener instrucciones que no tenga otro y viceversa. Los primeros microprocesadores de 8 bits no tenían operaciones para multiplicar o dividir números, por ejemplo, y había que hacer subrutinas para realizar esas operaciones. Otras CPU puede que no tengan operaciones de punto flotante y habría que hacer o conseguir bibliotecas que realicen esas operaciones. Las instrucciones de la CPU pueden agruparse, de acuerdo a su funcionalidad, en: Operaciones con enteros: (de 8, 16, 32 y 64 bits dependiendo de la arquitectura de la CPU, en los sistemas muy viejos también de 12, 18, 24, 36 y 48 bits) Estas son operaciones realizadas por la Unidad aritmético lógica de la CPU    

Operaciones aritméticas. Como suma, resta, multiplicación, división, módulo, cambio de signo Operaciones booleanas. Operaciones lógicas bit a bit como AND, OR, XOR, NOT Operaciones de bits. Como desplazamiento y rotaciones de bits (hacia la derecha o hacia la izquierda, a través del bit del acarreo o sin él) Comparaciones

Operaciones de mover datos: Entre los registros y la memoria: Aunque la instrucción se llama "mover", en la CPU, "mover datos" significa en realidad copiar datos, desde un origen a un destino, sin que el dato desaparezca del origen. Se pueden mover valores:     

desde un registro a otro desde un registro a un lugar de la memoria desde un lugar de la memoria a un registro desde un lugar a otro de la memoria un valor inmediato a un registro

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR



un valor inmediato a un lugar de memoria

Operaciones de stack: 

PUSH (escribe datos hacia el tope del stack)



POP (lee datos desde el tope del stack)

Operaciones de entrada/salida: Son operaciones que mueven datos de un registro, desde y hacia un puerto; o de la memoria, desde y hacia un puerto 

INPUT Lectura desde un puerto de entrada



OUTPUT Escritura hacia un puerto de salida

Operaciones para el control del flujo del programa:    

Llamadas y retornos de subrutinas Llamadas y retornos de interrupciones Saltos condicionales de acuerdo al resultado de la comparaciones Saltos incondicionales

Operaciones con números reales: El estándar para las operaciones con números reales en las CPU está definido por el IEEE 754. Una CPU puede tener operaciones de punto flotante con números reales mediante el coprocesador numérico (si lo hay), como las siguientes:     

Operaciones aritméticas. Suma, resta, multiplicación, división, cambio de signo, valor absoluto, parte entera Operaciones trascendentales Operaciones trigonométricas. Seno, coseno, tangente, arcotangente Operaciones con logaritmos, potencias y raíces Otras

El lenguaje ensamblador tiene mnemónicos para cada una de las instrucciones de la CPU en adición a otros mnemónicos a ser procesados por el programa ensamblador (como por ejemplo macros y otras sentencias en tiempo de ensamblado).

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Ensamblado La transformación del lenguaje ensamblador en código máquina la realiza un programa ensamblador, y la traducción inversa la puede efectuar un desensamblador. A diferencia de los lenguajes de alto nivel, aquí hay usualmente una correspondencia 1 a 1 entre las instrucciones simples del ensamblador y el lenguaje de máquina. Sin embargo, en algunos casos, un ensamblador puede proveer "pseudo instrucciones" que se expanden en un código de máquina más extenso a fin de proveer la funcionalidad necesaria y simplificar la programación. Por ejemplo, para un código máquina condicional como "si X mayor o igual que", un ensamblador puede utilizar una pseudoinstrucción al grupo "haga si menor que", y "si = 0" sobre el resultado de la condición anterior. Los Ensambladores más completos también proveen un rico lenguaje de macros que se utiliza para generar código más complejo y secuencias de datos. Para el mismo procesador y el mismo conjunto de instrucciones de CPU, diferentes programas ensambladores pueden tener, cada uno de ellos, variaciones y diferencias en el conjunto de mnemónicos o en la sintaxis de su lenguaje ensamblador. Por ejemplo, en un lenguaje ensamblador para la arquitectura x86, se puede expresar la instrucción para mover 5 al registro AL de la siguiente manera: MOV AL, 5, mientras que para otro ensamblador para la misma arquitectura se expresaría al revés: MOV 5, AL. Ambos lenguajes ensambladores harían exactamente lo mismo, solo que está expresado de manera diferente. El primero usa la sintaxis de Intel, mientras que el segundo usa la sintaxis de AT&T El uso del ensamblador no resuelve definitivamente el problema de cómo programar un sistema basado en microprocesador de modo sencillo ya que para hacer un uso eficiente del mismo, hay que conocer a fondo el microprocesador, los registros de trabajo de que dispone, la estructura de la memoria, y muchas cosas más referentes a su estructura básica de funcionamiento.

Ejemplo Un programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que corresponden al flujo de órdenes ejecutables por un microprocesador. Por ejemplo, en el lenguaje ensamblador para un procesador x86: La sentencia MOV AL, 061h

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Asigna el valor hexadecimal 61 (97 decimal) al registro "AL". El programa ensamblador lee la sentencia equivalente binario en lenguaje de máquina

de

arriba

y

produce

su

Binario: 10110000 01100001 (hexadecimal: B061)

El mnemónico MOV es un código de operación u "opcode". El opcode es seguido por una lista de argumentos o parámetros, completando una típica instrucción de ensamblador. En el ejemplo,AL es un registro de 8 bits del procesador, al cual se le asignará el valor hexadecimal 61 especificado. El código de máquina generado por el ensamblador consiste de 2 bytes. El primer byte contiene empaquetado la instrucción MOV y el código del registro hacia donde se va a mover el dato:

En el segundo byte se especifica el número 61h, escrito en binario como 01100001, que se asignará al registro AL, quedando la sentencia ejecutable como: 10110000 01100001 La cual puede ser entendida y ejecutada directamente por el procesador.

DISEÑO DEL LENGUAJE Elementos básicos Hay un grado grande de diversidad en la manera en que los autores de los ensambladores categorizan las sentencias y en la nomenclatura que usan. En particular, algunos describen cualquier cosa como pseudo-operación (pseudo-Op), con excepción del mnemónico de máquina o del mnemónico extendido. Un típico lenguaje ensamblador consiste en 3 tipos de sentencias de instrucción que son usadas para definir las operaciones del programa: 

Mnemónicos de opcode

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

 

Secciones de datos Directivas de ensamblador

Mnemónicos de opcode y mnemónicos extendidos A diferencia de las instrucciones (sentencias) de los lenguajes de alto nivel, instrucciones en el lenguaje ensamblador son generalmente muy simples. Generalmente, una mnemónico es un nombre simbólico para una sola instrucción en lenguaje de máquina ejecutable (un opcode), y hay por lo menos un mnemónico de opcode definido para cada instrucción en lenguaje de máquina. Cada instrucción consiste típicamente en una operación u opcode más cero o más operandos. La mayoría de las instrucciones refieren a un solo valor, o a un par de valores. Los operandos pueden ser inmediatos (típicamente valores de un byte, codificados en la propia instrucción), registros especificados en la instrucción, implícitos o las direcciones de los datos localizados en otra parte de la memoria. Esto está determinado por la arquitectura subyacente del procesador, el ensamblador simplemente refleja cómo trabaja esta arquitectura. Los mnemónicos extendidos son frecuentemente usados para especificar una combinación de un opcode con un operando específico, ej, el ensamblador del System/360 usa a B como un mnemónico extendido para el BC con una máscara de 15 y NOP al BC con una máscara de 0. Los mnemónicos extendidos son frecuentemente usados para soportar usos especializados de instrucciones, a menudo para propósitos no obvios con respecto al nombre de la instrucción. Por ejemplo, muchos CPU no tienen una instrucción explícita de NOP (No Operación), pero tienen instrucciones que puedan ser usadas para tal propósito. En el CPU 8086, la instrucción XCHG AX,AX (intercambia el registro AX consigo mismo) es usada para el NOP, con NOP siendo un pseudo-opcode para codificar la instrucción XCHG AX,AX. Algunos desensambladores reconocen esto y decodificarán la instrucción XCHG AX,AX como NOP. Similarmente, los ensambladores de IBM para el System/360 usan los mnemónicos extendidos NOP y NOPR con las máscaras cero para BC y BCR. Algunos ensambladores también soportan simples macroinstrucciones incorporadas que generan dos o más instrucciones de máquina. Por ejemplo, con algunos ensambladores para el Z80, la instrucción LD HL, BC

genera las instrucciones LD L, C LD H, B.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

LD HL, BC es un pseudo-opcode, que en este caso simula ser una instrucción de 16 bits, cuando se expande se producen dos instrucciones de 8 bits que equivalen a la simulada de 16 bits. Secciones de datos Hay instrucciones usadas para definir elementos de datos para manejar datos y variables. Definen el tipo de dato, la longitud y la alineación de los datos. Estas instrucciones también pueden definir si los datos están disponibles para programas exteriores (programas ensamblados separadamente) o solamente para el programa en el cual la sección de datos está definida. Algunos ensambladores clasifican estas instrucción

Directivas del ensamblador Los directivas del ensamblador, también llamadas los pseudo opcodes, pseudo-operaciones o pseudo-ops, son instrucciones que son ejecutadas por un ensamblador en el tiempo de ensamblado, no por un CPU en el tiempo de ejecución. Pueden hacer al ensamblado del programa dependiente de parámetros entrados por un programador, de modo que un programa pueda ser ensamblado de diferentes maneras, quizás para diversos aplicaciones. También pueden ser usadas para manipular la presentación de un programa para hacerlo más fácil leer y mantener. Por ejemplo, las directivas pudieran ser usadas para reservar áreas de almacenamiento y opcionalmente su para asignar su contenido inicial. Los nombres de las directivas a menudo comienzan con un punto para distinguirlas de las instrucciones de máquina. Los ensambladores simbólicos le permiten a los programadores asociar nombres arbitrarios (etiquetas o símbolos) a posiciones de memoria. Usualmente, cada constante y variable tiene un nombre para que las instrucciones pueden referir a esas ubicaciones por nombre, así promoviendo el código autodocumentado. En el código ejecutable, el nombre de cada subprograma es asociado a su punto de entrada, así que cualquier llamada a un subprograma puede usar su nombre. Dentro de subprogramas, a los destinos GOTO se le dan etiquetas. Algunos ensambladores soportan símbolos locales que son léxicamente distintos de los símbolos normales (ej, el uso de "10$" como un destino GOTO).

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

La mayoría de los ensambladores proporcionan un manejo flexible de símbolos, permitiendo a los programadores manejar diversos espacios de nombres, calcular automáticamente offsets dentro de estructuras de datos, y asignar etiquetas que refieren a valores literales o al resultado de cálculos simples realizados por el ensamblador. Las etiquetas también pueden ser usadas para inicializar constantes y variables con direcciones relocalizables. Los lenguajes ensambladores, como la mayoría de los otros lenguajes de computador, permiten que comentarios sean añadidos al código fuente, que son ignorados por el programa ensamblador. El buen uso de los comentarios es aún más importante con código ensamblador que con lenguajes de alto nivel, pues el significado y el propósito de una secuencia de instrucciones es más duro de descifrar a partir del código en sí mismo. El uso sabio de estas facilidades puede simplificar grandemente los problemas de codificar y mantener el código de bajo nivel. El código fuente de lenguaje ensamblador crudo generado por compiladores o desensambladores - código sin ningún comentario, ni símbolos con algún sentido, ni definiciones de datos - es muy difícil de leer cuando deben hacerse cambios. Macros Muchos ensambladores soportan macros predefinidos, y otras soportan macros definidos (y repetidamente redefinibles) por el programador que implican secuencias de líneas del texto en las cuales las variables y las constantes están empotradas. Esta secuencia de líneas de texto puede incluir opcodes o directivas. Una vez un macro ha sido definido, su nombre puede ser usado en lugar de un mnemónico. Cuando el ensamblador procesa tal sentencia, reemplaza la sentencia por las líneas del texto asociadas a ese macro, entonces las procesa como si hubieran existido en el archivo del código fuente original (incluyendo, en algunos ensambladores, la expansión de cualquier macro que exista en el texto de reemplazo). Puesto que las macros pueden tener nombres "cortos" pero se expanden a varias o de hecho muchas líneas de código, pueden ser usados para hacer que los programas en lenguaje ensamblador parezcan ser mucho más cortos, requiriendo menos líneas de código fuente, como sucede con los lenguajes de alto nivel. También pueden ser usados para añadir niveles de estructura más altos a los programas ensamblador, opcionalmente introducen código de depuración empotrado vía parámetros y otras características similares.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Muchos ensambladores tienen macros incorporados (o predefinidos) para las llamadas de sistema y otras secuencias especiales de código, tales como la generación y el almacenamiento de los datos realizados a través de avanzadas operaciones bitwise y booleanas usadas en juegos, software de seguridad, gestión de datos, y criptografía. Los macro ensambladores a menudo permiten a los macros tomar parámetros. Algunos ensambladores incluyen lenguajes macro muy sofisticados, incorporando elementos de lenguajes de alto nivel tales como parámetros opcionales, variables simbólicas, condiciones, manipulaciones de strings operaciones aritméticas, todos usables durante la ejecución de un macro dado, y permitiendo a los macros guardar el contexto o intercambiar información. Así un macro puede generar un gran número de instrucciones o definiciones de datos en lenguaje ensamblador, basadas en los argumentos del macro. Esto pudiera ser usado para generar, por ejemplo, estructuras de datos de estilo de records o bucles "desenrrollados", o podría generar algoritmos enteros basados en parámetros complejos. Una organización, usando lenguaje ensamblador, que ha sido fuertemente extendido usando tal suite de macros, puede ser considerada que se está trabajando en un lenguaje de alto nivel, puesto que tales programadores no están trabajando con los elementos conceptuales de más bajo nivel del computador. Las macros fueron usados para adaptar sistemas de software de gran escala para clientes específicos en la era del mainframe, y también fueron usados por el personal del cliente para satisfacer las necesidades de sus patrones haciendo versiones específicas de los sistemas operativos del fabricante. Esto fue hecho, por ejemplo, por los programadores de sistema que trabajaban con el Conversational Monitor System / Virtual Machine (CMS/VM) de IBM y con los addons "real time transaction processing" de IBM, CICS, Customer Information Control System, y ACP/TPF, el airline/financial system que comenzó en los años 1970 y todavía corre con muchos sistemas de reservaciones computarizados (CRS) y sistemas de tarjeta de crédito de hoy. Uso actual Siempre ha habido debates sobre la utilidad y el desempeño del lenguaje ensamblador relativo a lenguajes de alto nivel. El lenguaje ensamblador tiene nichos específicos donde es importante (ver abajo). Pero, en general, los modernos compiladores de optimización para traducir lenguajes de alto nivel en código que puede correr tan rápidamente como el lenguaje ensamblador escrito a mano, a pesar de los contraejemplos que pueden ser encontrados. La complejidad de los procesadores modernos y del subsistema de memoria hace la optimización efectiva cada vez más difícil para los compiladores, así como para los

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

programadores en ensamblador. Adicionalmente, y para la consternación de los amantes de la eficiencia, el desempeño cada vez mayor del procesador ha significado que la mayoría de los CPU estén desocupados la mayor parte del tiempo, con retardos causados por embotellamientos predecibles tales como operaciones de entrada/salida y paginación de memoria. Esto ha hecho que la velocidad de ejecución cruda del código no sea un problema para muchos programadores. Hay algunas situaciones en las cuales los profesionales pudieran elegir utilizar el lenguaje ensamblador. Por ejemplo cuando: 

 







Es requerido un ejecutable binario independiente (stand-alone), es decir uno que deba ejecutarse sin recursos a componentes de tiempo de ejecución o a bibliotecas asociadas con un lenguaje de alto nivel; ésta es quizás la situación más común. Son programas empotrados que solo almacenan una pequeña cantidad de memoria y el dispositivo está dirigido para hacer tareas para un simple propósito. Ejemplos consisten en teléfonos, sistemas de combustible e ignición para automóviles, sistemas de control del aire acondicionado, sistemas de seguridad, y sensores Interactuando directamente con el hardware, por ejemplo en drivers de dispositivo y manejadores de interrupción usando instrucciones específicas del procesador no explotadas o disponibles por el compilador. Un ejemplo común es la instrucción de rotación bitwise en el núcleo de muchos algoritmos de cifrado creando funciones vectorizadas para programas en lenguajes de alto nivel como C. En el lenguaje de alto nivel esto es a veces ayudado por funciones intrínsecas del compilador que mapean directamente a los mnemónicos del SIMD, pero sin embargo resulta en una conversión de ensamblador de uno a uno para un procesador de vector asociado Es requerida la optimización extrema, ej, en un bucle interno en un algoritmo intensivo en el uso del procesador. Los programadores de juegos toman ventaja de las habilidades de las características del hardware en los sistemas, permitiendo a los juegos correr más rápidamente. También las grandes simulaciones científicas requieren algoritmos altamente optimizados, ej,álgebra lineal con BLAS o la transformada de coseno discreta (ej, la versión SIMD en ensamblador del x264, (una biblioteca para codificar streams de video) Un sistema con severas limitaciones de recursos (ej, un sistema empotrado) debe ser codificado a mano para maximizar el uso de los limitados recursos; pero esto está llegando a ser menos común a medida que el precio del procesador decrece y el desempeño mejora

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

 

   



   

No existe ningún lenguaje de alto nivel, en un procesador nuevo o especializado, por ejemplo Escribiendo programas de tiempo real que necesitan sincronización y respuestas precisas, tales como sistemas de navegación de vuelo, y equipo médico. Por ejemplo, en un sistema fly-by-wire (vuelo por mandos eléctricos), la telemetría debe ser interpretada y hay que actuar dentro de limitaciones estrictas de tiempo. Tales sistemas deben eliminar fuentes de retrasos impredecibles, que pueden ser creados por (algunos) lenguajes interpretados, recolección de basura automática, operaciones de paginación, o multitarea preventiva. Sin embargo, algunos lenguajes de alto nivel incorporan componentes de tiempo de ejecución e interfaces de sistema operativo que pueden introducir tales retrasos. Elegir el ensamblador o lenguajes de bajo nivel para tales sistemas da a los programadores mayor visibilidad y control sobre el proceso de los detalles Es requerido control total sobre el ambiente, en situaciones de seguridad extremadamente alta donde nada puede darse por sentado. Se escriben virus de computadora, bootloaders, ciertos drivers de dispositivo, u otros elementos muy cerca del hardware o al sistema operativo de bajo nivel Se escriben simuladores del conjunto de instrucciones para monitoreo, trazado y depuración de errores donde la sobrecarga adicional es mantenida al mínimo Se hace ingeniería inversa en binarios existentes que pueden o no haber sido escritos originalmente en un lenguaje de alto nivel, por ejemplo al crackear la protección anticopia del software propietario. Se hace ingeniería inversa y modificación de video juegos (también denominado ROM hacking), que es posible por medio de varios métodos. El más ampliamente implementado es alterando el código del programa a nivel de lenguaje ensamblador Se escribe código automodificable, algo para lo que el lenguaje ensamblador se presta bien Se escriben juegos y otros softwares para calculadoras gráficas17 Se escribe software compilador que genera código ensamblador, y por lo tanto los desarrolladores deben ser programadores de lenguaje ensamblador Se escriben algoritmos criptográficos que siempre deben tomar estrictamente el mismo tiempo para ejecutar, previniendo ataques de tiempo

Sin embargo, el lenguaje ensamblador es todavía enseñado en la mayoría de los programas de ciencias de la computación e ingeniería electrónica. Aunque hoy en día, pocos programadores trabajan regularmente con el lenguaje ensamblador como una herramienta, los conceptos fundamentales continúan siendo muy

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

importantes. Tales tópicos fundamentales, como aritmética binaria, asignación de memoria, procesamiento del stack, codificación de conjunto de caracteres, procesamiento de interrupciones, y diseño de compiladores, serían duros de estudiar en detalle sin la comprensión de cómo el computador opera a nivel del hardware. Puesto que el comportamiento del computador es fundamentalmente definido por su conjunto de instrucciones, la manera lógica de aprender tales conceptos es estudiar un lenguaje ensamblador. La mayoría de los computadores modernos tienen un conjunto de instrucciones similares. Por lo tanto, estudiar un solo lenguaje ensamblador es suficiente para aprender: i) los conceptos básicos; ii) reconocer situaciones donde el uso de lenguaje ensamblador puede ser apropiado; y iii) ver cómo el código ejecutable eficiente puede ser creado por los lenguajes de alto nivel Aplicaciones típicas El lenguaje ensamblador hard-coded es típicamente usado en el ROM de arranque del sistema (BIOS en los sistemas compatible IBM PC). Este código de bajo nivel es usado, entre otras cosas, para inicializar y probar el hardware del sistema antes de cargar el sistema operativo, y está almacenado en el ROM. Una vez que ha tomado lugar un cierto nivel de inicialización del hardware, la ejecución se transfiere a otro código, típicamente escrito en lenguajes de alto nivel; pero el código corriendo inmediatamente después de que es aplicada la energía usualmente está escrito en lenguaje ensamblador. Lo mismo es cierto para los boot loaders. Muchos compiladores traducen lenguajes de alto nivel a lenguaje ensamblador primero, antes de la compilación completa, permitiendo que el código en ensamblador sea visto para propósitos dedepuración y optimización. Lenguajes de relativo bajo nivel, como C, con frecuencia proveen sintaxis especial para empotrar lenguaje ensamblador en cada plataforma de hardware. El códigoportable del sistema entonces puede usar estos componentes específicos a un procesador a través de una interface uniforme. El lenguaje ensamblador también es valioso en ingeniería inversa, puesto que muchos programas solamente son distribuidos en una forma de código de máquina. El código de máquina es usualmente fácil de trasladar hacia lenguaje ensamblador para luego ser cuidadosamente examinado en esta forma, pero es muy difícil de trasladar hacia un lenguaje de alto nivel. Herramientas como Interactive Disassembler, hacen uso extenso del desensamblador para tales propósitos. Un nicho que hace uso del lenguaje ensamblador es el demoscene. Ciertas competiciones requieren a los concursantes restringir sus creaciones a un muy

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

pequeño tamaño (ej, 256 bytes, 1 KB, 4 KB ó 64 KB), y el lenguaje ensamblador es el lenguaje de preferencia para alcanzar este objetivo. 19 Cuando los recursos son una preocupación, es una necesidad la codificación en ensamblador, especialmente en sistemas constreñidos por el procesamiento del CPU, como los primeros modelos del Amiga, y el Commodore 64. El código optimizado en ensamblador es escrito "a mano" por los programadores en un intento de minimizar el número de ciclos de CPU usados. Las limitaciones del CPU son tan grandes que cada ciclo cuenta. Usar tales métodos ha habilitado, a sistemas como el Commodore 64, para producir gráficos en 3D en tiempo real con efectos avanzados, una hazaña que puede ser considerada improbable o incluso imposible para un sistema con un procesador de 0.99 MHz.

EJEMPLOS Ejemplo para la arquitectura x86 El siguiente es un ejemplo del programa clásico Hola mundo escrito para la arquitectura de procesador x86 (bajo el sistema operativo DOS).

Ejemplo para el computador virtual (POCA) Una selección de instrucciones para una computadora virtual con las correspondientes direcciones de memoria en las que se ubicarán las instrucciones. Estas direcciones NO son estáticas. Cada instrucción se acompaña del código en lenguaje ensamblador generado (código objeto) que coincide con la arquitectura de computador virtual, o conjunto de instrucciones ISA.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Ejemplo para el µC Intel 8051 Código en lenguaje ensamblador para µC Intel 80C51:

Ejemplo para el Microchip PIC16F84 Código en lenguaje ensamblador para el microcontrolador 16F84 de Microchip:

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

Ventajas y desventajas del Lenguaje Ensamblador Ventajas 1. .- Como trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el mas 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 especificas 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 reinicialize. 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;

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y 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.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

los lenguajes de alto nivel fueron creados para facilitar el proceso de programación y a la misma ves le da al programador ciertas libertades para ser creativo. Gracias a estos programas las posibilidades son infinitas y solo están limitadas a la creatividad del programador.

LENGUAJE INTERFAZ: LENGUAJES DE ALTO NIVEL Y LENGUAJE ENSAMBLADOR

http://www.monografias.com/trabajos14/lenguaje-ensamblador/lenguajeensamblador.shtml http://tiposdelenguajesdeprogramacion.blogspot.mx/p/tipos-de-lenguajes-de-altonivel.html http://tsistemaspa.wordpress.com/lenguaje-de-programacion/lenguaje-de-altonivel/ http://tejedoresdelweb.com/w/Lenguajes_programaci%C3%B3n_web http://es.wikipedia.org/wiki/Lenguaje_ensamblador