INSTITUTO DE ESTUDIOS SUPERIORES DE CHIAPAS Salazar Narváez Ing. en Sistemas Computacionales
CHACÓN AGUIRRE PAULINA YANNETH Asignatura: Lenguaje Ensamblador 4to
Catedrático: Lic. Enrique Martínez
Introducci ón En la siguiente presentación hablaremos un poco del Modelo de John von Neumann el cual se usa hoy día para describir los lenguajes de programación convencionales y es la base de prácticamente todos los modelos de ordenadores. Así también se hablara de los lenguajes de programación, su clasificación y dentro de los cuales encontraremos al lenguaje ensamblador que es un lenguaje simbólico de bajo nivel con un conjunto de instrucciones que esencialmente es ideal para el lenguaje máquina. Veremos cuales son sus ventajas y desventajas del lenguaje ensamblador, también las aplicaciones y los tipos que existen.
Modelo de John von Neumann
Un poco de Historia. John von Neumann acudió al Istitute of Advenced Studies de Princeton para construir su propia versión de EDVAC, la máquina IAS. Una cosa que pronto fue obvia para él era que programar computadoras con un gran número de interruptores era lento, tedioso e inflexible. Von Neumann se dio cuenta de que el programa podía reprensarse en forma digital en la memoria de la computadora, junto con los datos. Él percibió también que la torpe aritmética decimal en serie utilizada por ENIAC, en la que cada dígito estaba representada por 10 bulbos (uno encendido y nueve apagado) podía ser sustituida por una aritmética binaria. El diseño básico, que el describió por primera vez, ahora se le conoce como máquina de von Neumann
Bosquejo de la arquitectura Memoria
Entrada Unidad de control
Unidad aritmética Lógica.
Salida
Acumulad or
La original máquina de von Neumann
La máquina de von Neumann tenía cinco partes básicas: La memoria: constaba de 4096 palabras, cada una de las cuales contenía 40 bits que podían ser 1 o 0. cada palabra contenía dos instrucciones de 20 bits o bien un entero con signo de 40 bits. Ocho bits de cada instrucción estaban dedicados a indicar el tipo de instrucción y 12 bits se dedicaban a especificar una de las 4096 palabras de memoria. La unidad aritmética: dentro de aquí había un registro interno de 40 bits llamado acumulador. Una instrucción típica sumaba una palabra de la memoria al acumulador o almacenaba el contenido del acumulador a la memoria. La unidad de control. Y el equipo de entrada y salida.
Modelo de John von Neumann. Durante su ejecución, los programas únicamente pretenden “modificar la memoria”. Debemos conocer las localizaciones de los datos antes de ejecutar los programas para recoger después los resultados. Esto es internamente patente en el funcionamiento y la semántica de los lenguajes de programación convencionales. En estos lenguajes de programación la instrucción más importante es la de asignación. Todos los lenguajes de programación convencionales disponen de modos de asignación más o menos significativos. Las computadoras con este diseño también permiten a los programas modificarse
a
sí
mismos
mientras
se
ejecutan,
permitiendo a la computadora programarse a si misma.
efectivamente
Un ordenador con arquitectura Von Neumann realiza los siguientes pasos secuencialmente: 3. Obtiene la siguiente instrucción desde la memoria en la dirección indicada por el contador de programa y la guarda en el registro de instrucción. 5. Aumenta el contador de programa en la longitud de la instrucción para apuntar a la siguiente. 7. Decodifica la instrucción mediante la unidad de control. Esta se encarga de coordinar el resto de componentes del ordenador para realizar una función determinada. 9. Se ejecuta la instrucción. Ésta puede cambiar el valor del contador del programa, permitiendo así operaciones repetitivas. El contador puede cambiar también cuando se cumpla una cierta condición aritmética, haciendo que el ordenador pueda 'tomar decisiones', que pueden alcanzar cualquier grado de complejidad, mediante la aritmética y lógica anteriores. 11. Vuelve al paso 1.
Lenguajes de programación A CADA instrucción
le corresponde UNA acción del procesador.
Lenguaje de programación: Es un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones, y utilizado para controlar el comportamiento físico y lógico de una máquina. Código que permite la comunicación con el hardware para la ejecución de órdenes.
Los lenguajes de programación se clasifican en:
Según su nivel de abstracción Según la forma de ejecución Según el paradigma de programación
Según su nivel de abstracción
Lenguaje de Maquina El lenguaje máquina es el único que entiende directamente la computadora, utiliza el alfabeto binario que consta de los dos únicos símbolos 0 y 1, denominados bits. Fue el primer lenguaje utilizado en la programación de computadoras, pero dejó de utilizarse por su dificultad y complicación, siendo sustituido por otros lenguajes más fáciles de aprender y utilizar, que además reducen la posibilidad de cometer errores.
Lenguaje de bajo nivel Un lenguaje de programación de bajo nivel es el que proporciona poca o
ninguna
abstracción
del
microprocesador
de
un
ordenador.
Consecuentemente es fácilmente trasladado a lenguaje de máquina. La palabra "bajo" no implica que el lenguaje sea inferior a un lenguaje de alto nivel; se refiere a la reducida abstracción entre el lenguaje y el hardware. El lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como
nemotécnicos.
Por
ejemplo,
nemotécnicos
típicos
de
operaciones aritméticas son: en inglés, ADD, SUB, DIV, etc.; en español, SUM, RES ,DIV, etc.
Un programa escrito en lenguaje ensamblador no puede ser ejecutado directamente por la computadora en esto se diferencia esencialmente del lenguaje máquina, sino que requiere una fase de traducción al lenguaje máquina. El programa original escrito en lenguaje ensamblador se denomina programa fuente y el programa traducido en lenguaje máquina se conoce como programa objeto, ya directamente entendible por la computadora. El traductor de programas fuente a objeto es un programa llamado ensamblador, existente en casi todos los computadores.
Lenguajes de medio nivel Hay lenguajes de programación que son considerados por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas características que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto nivel.
Lenguaje de alto nivel. Se caracterizan por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas. la limitación era que se orientaban a un área específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales. Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de muy alto nivel se crearon para que el usuario común pudiese solucionar tal problema de procesamiento de datos de una manera más fácil y rápida.
Según la forma de ejecución
Lenguaje compilado Es término un tanto impreciso para referirse a un lenguaje de programación que típicamente se implementa mediante un compilador. Esto implica que una vez escrito el programa, éste se traduce a partir de su código fuente por medio de un compilador en un archivo ejecutable para una determinada plataforma por ejemplo Solaris para Sparc, Windows NT para Intel, etc.. Los lenguajes compilados son lenguajes de alto nivel en los que las instrucciones se traducen del lenguaje utilizado a código máquina para una ejecución rápida.
Lenguaje interpretado Fue diseñado para ser ejecutado por medio de un intérprete, en contraste con los lenguajes compilados. También se les conoce como lenguajes de script. Muchos autores rechazan la clasificación de lenguajes de programación entre interpretados y compilados, considerando que el modo de ejecución (por medio de intérprete o de compilador) del programa escrito en el lenguaje es independiente del propio lenguaje. Los lenguajes que suelen ser interpretados algunos de ellos son: ActionScript Basic4GL (Basic para OpenGL. Permite generar ejecutables Windows completos) BeanShell (Java en lenguaje de Scripts) GML JavaScript (todas las plataformas) Logo (Linux, Windows y Mac) Lush (Lisp para gráficos Linux) PHP Python (todas las plataformas) Ruby
Según el paradigma de programación
Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro, sino que cada uno tiene ventajas y desventajas. Dependiendo de la situación un paradigma resulta más apropiado que otro. Atendiendo al paradigma de programación, se pueden clasificar los lenguajes en: El paradigma imperativo o por procedimientos son un conjunto de instrucciones que le indican a la computadora cómo realizar una tarea y es considerado el más común y está representado, por ejemplo, por el C o por BASIC. El paradigma funcional es un paradigma de programación declarativa basado en la utilización de funciones matemáticas y está representado por la familia de lenguajes LISP (en particular Scheme), ML o Haskell. El paradigma lógico consiste en la aplicación del corpus de conocimiento sobre lógica para el diseño de lenguajes de programación, un ejemplo es PROLOG.
El paradigma orientado a objetos usa objetos y sus
Lenguaje Ensamblador
Definición: Es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador. Fue usado ampliamente en el pasado para el desarrollo de software, pero actualmente sólo se utiliza en contadas ocasiones, especialmente cuando se requiere la manipulación directa del hardware o se pretenden rendimientos inusuales de los equipos.
Ventajas y Desventajas del Lenguaje Ensamblador
Ventajas 1. Velocidad .- 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 1. 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. 2. 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.
3. Peligro de afectar recursos inesperadamente .- Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la maquina, 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. 4. 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.
Aplicaciones del Lenguaje Ensamblador
El uso del lenguaje ensamblador no es para la gente común y corriente, sino para profesionistas en el área de computación que están obligados a conocer este lenguaje, ya que proporciona una serie de características que no se pueden encontrar en los lenguajes de alto nivel. Algunas de estas características son: • Se puede acceder a cualquier localidad de la memoria RAM sin ninguna restricción. • Se pueden programar virus, debido a que se tiene un acceso total a casi todo el hardware de la computadora vía interrupciones de software. • Se pueden programar drivers de cualquier dispositivo. • Se puede acceder directamente a los registros internos del CPU. Se puede acceder directamente a los dispositivos de entrada y/o salida. Los programas objeto generados a través del ensamblador son mas veloces que los generados en cualquier otro lenguaje, debido a que
Tipos de Lenguaje Ensamblador
Algunos tipos son: • Ensambladores básicos. básicos Son de muy bajo nivel, y su tarea consiste básicamente en ofrecer nombres simbólicos a las distintas instrucciones, parámetros y cosas tales como los modos de direccionamiento. Además, reconoce una serie de directivas que indican ciertos parámetros de funcionamiento del ensamblador. • Ensambladores modulares, o macro ensambladores. ensambladores Hacen todo lo que puede hacer un ensamblador, y además proporcionan una serie de directivas para definir e invocar macroinstrucciones (o simplemente, macros). • Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, muchos de ellos teniendo compatibilidad hacia atrás pudiendo trabajar con programas con estructuras de 16 bits. Además de realizar la misma tarea que los anteriores, permitiendo también el uso de macros, permiten utilizar
• Ensambladores Cruzados, son los que se utilizan en una computadora que posee un procesador diferente al que tendrán las computadoras donde va a ejecutarse el programa objeto producido. • Ensambladores Residentes. Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecución, al programa objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro, como se hacía en crossassembler, y sin necesidad de programas simuladores. • Ensambladores de dos fases. Los ensambladores de dos fases se denominan así debido a que realizan la traducción en dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de símbolos; de esta manera, en la segunda fase, vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de los símbolos utilizados y las posiciones que se les ha asignado. Estos ensambladores son los más utilizados en la
Conclusión El modelo de von Neumann como se dijo consta de que partes que son: memoria, unidad de control, unidad aritmética lógica, un acumulador y los equipos de entra y salida. Aunque existen muchos tipos de computadoras digitales según se tenga en cuenta su tamaño, velocidad de proceso, complejidad de diseño físico, etc., los principios fundamentales básicos de funcionamiento son esencialmente los mismos en todos ellos. Los lenguajes de programación son importantes ya que sin ellos no existiría la interacción de la maquina con el usuario. Y el lenguaje ensamblador es el lenguaje creado a base de instrucciones para intentar sustituir el lenguaje máquina por uno más similar al utilizado por el hombre. Se espera que todo lo investigado sea de gran utilidad para investigaciones futuras ya que son temas de gran utilidad.
Bibliografía
Libro s.
Titulo del libro: Titulo del libro: Organización de computadoras, Fundamentos de Programación. un enfoque estructurado. Autor: Autor: Joyanes, Fernández Azuela Matilde , Andrew S. Tanenbaum Rodríguez Baena Luis Editorial. Editorial. Mc Graw Hill. Mc Graw Hill. Edición. Edición. Cuarta Edición. Primera Edición.
Paginas Web http://www.todo-programacion.com.ar/archives/2005/04/lenguaje_de_m http://es.wikipedia.org/wiki/Assembly http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n
http://www.mitecnologico.com/Main/UsoAplicacionesLenguajeEnsambl http://www.mitecnologico.com/Main/TiposLenguajesEnsambladores http://es.wikipedia.org/wiki/Assembler#Tipos_de_ensambladores