Lenguaje Maquina, Ensamblador Aldo Franco Romero Instituto de Ingenieros de Morelos 08/Diciembre/2019 Índice 1. Introducción. 2. Diferencias entre un compilador y un ensamblador. 3. Ventajas y desventajas. 4. ¿Utilizar un lenguaje ensamblador en lugar de un lenguaje compilador? 5. ¿Para qué necesidades se utiliza el lenguaje ensamblador? 6. Principios del funcionamiento del lenguaje ensamblador. 7. Estructura básica de un programa en lenguaje ensamblador. 8. Diferencia entre un lenguaje ensamblador para Dos y para Windows. 9. Diferencias de lenguaje ensamblador de arquitecturas de 16, 32 y 64 bits. 10. Conclusión. 11. Bibliografía. 1-.Introducción El lenguaje maquina o código maquina es un sistema de códigos interpretable por un circuito micro programable, como el micro procesador de un computador o el micro controlador de un autómata, compuesto por conjunto de instrucciones que determinan acciones a realizar por la máquina. Es el conjunto de datos que la parte física (Hardware) es capaz de comprender e interpretar el código binario comprendido en 0-1 Consiste en programas, cuyos son cadenas de instrucciones más un conjunto de datos sobre el cual se trabaja, las instrucciones son ejecutadas en secuencia. El lenguaje maquina es especifico de la arquitectura de la máquina, algunos conjuntos de instrucciones pueden ser similares a otras arquitecturas. En el tiempo de desarrollo de la maquina se utilizaban series de combinaciones binarias para dictar ordenes siendo el mismo traductor, así es como se pensó en usar la misma máquina para traducir su propio código, con ello surgen los compiladores, que es el segundo lenguaje de programación, el lenguaje ensamblador, este diseñado para una computadora específica, es decir, en lenguajes de alto nivel. 1 2-.Diferencias entre un compilador y un ensamblador. Compilador: Traductor que transforma un programa entero de un lenguaje de programación (Código fuente) a otro. El lenguaje objetivo es código máquina que también puede ser traducido a un código intermedio (bytecode) o a texto, los compiladores reúnen diversos elementos, fragmentos de una misma unidad (programa ejecutable o librería) que puede ser almacenada y reutilizada, a este proceso se le llama compilación. La construcción de un compilador tiene la división del proceso en una serie de fases, agrupadas en dos tareas; 1. Análisis de programa fuente 2. Síntesis de programa objeto El análisis comprueba la corrección del programa fuente, en términos de teoría de lenguaje formal, incluye análisis léxico, que es la primera fase de un compilador este programa recibe como entrada el codigo fuente de otro programa y esta produce salidas compuestas de tokens o símbolos. Analizador sintáctico, programa informático que analiza una cadena de símbolos de acuerdo a las reglas de gramática formal, la síntesis genera la salida expresada en el lenguaje objeto, está formado por varias combinaciones de fases de generación de codigo, normalmente codigo intermedio o de objeto. Fig.1 Un Ensamblador es un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador a un fichero objeto que contiene codigo maquia, ejecutable directamente por el micro procesador, es un lenguaje de programación de bajo nivel, consiste en mnemónicos que representan instrucciones básicas para computadores, micro controladores, micro procesadores y circuitos integrados programables. Fig.2 2 IFig.1Bloques de operación de un compilador Clocksin, William (1997). Clause and effect recuperado de: https://es.wikipedia.org/wiki/Com pilador Fig.2 Dominic Sweetman: See MIPS Run. Morgan Kaufmann Publishers, 1999. Recuperado de: https://es.wikipedia.org/wiki/Lenguaje_ens amblador 3.-Ventajas y desventajas: Ensamblador: Ventaja; eficiencia de tamaño, flexibilidad. Desventaja; Al ser un lenguaje primitivo tiene desventajas a los lenguajes de alto nivel; tiempo de programación, programas fuente grandes, peligro de afectar recursos inesperadamente, falta de portabilidad Compilador: Ventaja; autónomo y eficiente, optimización de hardware. Desventaja; especifico a un hardware, tiempos de compilación. 3 4.- ¿Por qué utilizar un lenguaje ensamblador en lugar de un lenguaje compilador? Como se puede ver en la realización de programas el lenguaje ensamblador es directamente traducible al lenguaje de máquina y viceversa, es una abstracción que facilita su uso para seres humanos, por lo que la computadora no entiende directamente el lenguaje ensamblador, es necesario traducirle al lenguaje máquina, sin embargo al ser tan directa la traducción aparecieron los programas ensambladores, que estos son traductores que convierten el codigo fuente en lenguaje ensamblador a codigo objeto, es decir lenguaje máquina, es así como surge la necesidad de facilitar al programador la tarea de trabajar con lenguaje maquina sin perder el control directo con el hardware 4 5.- ¿Para qué tipos de necesidades se utiliza el lenguaje ensamblador? La mayoría de las aplicaciones se escriben parcial o totalmente en lenguaje ensamblador, se ajustaban en un área pequeña de memoria y se ejecutaba de manera más eficiente en procesadores lentos, por lo tanto el lenguaje ensamblador se utiliza para optimizar ciertas secciones de los programas de aplicación con relación con la velocidad y así tener acceso al hardware. Controlador de dispositivo de hardware: Programa informático que permite al sistema operativo interaccionar con un periférico, haciendo una abstracción del hardware y proporcionando una interfaz (estandarizada) para utilizar el dispositivo. Sistemas embebidos: Programas cortos que almacenan una pequeña cantidad de memoria, en dispositivos de un solo propósito como; teléfonos, sistema de combustible y la ignición del automóvil, sistemas de control de aire acondicionado, sistema de seguridad, instrumentos para la adquisición de datos, tarjetas de video, tarjetas de sonido, discos duros, módems e impresoras. El lenguaje ensamblador es ideal para escribir programas embebidos, debido a que utilizan poca memoria. Consolas de videojuegos: Requieren que su software este optimizado para que se ejecute con rapidez, utilizando pocas líneas de codigo, el lenguaje ensamblador permite un acceso directo al hardware de la computadora y el codigo se puede optimizar de forma manual para máxima velocidad, ya que un lenguaje de alto nivel les da limitaciones, y uno de bajo nivel no. Aplicaciones en tiempo real: Simulaciones y monitoreo del hardware, ya que requieren de precisión en la sincronización y en respuestas, el lenguaje ensamblador nos permite especificar con precisión el codigo ejecutable de un programa. 5 6.- Principios del funcionamiento del lenguaje ensamblador El único lenguaje que entienden los micro controladores es el codigo máquina, formados por ceros y unos del sistema binario. El lenguaje ensamblador expresa las instrucciones de una forma más natural al hombre, a la vez muy cercana al micro controlador ya que cada una de esas instrucciones se corresponde con otra en codigo máquina. El lenguaje ensamblador trabaja con nemónicos, que son grupos de caracteres alfanuméricos que simbolizan las órdenes o tareas a realizar. La traducción de los nemónicos a codigo maquina entendible por el micro controlador la lleva a cabo un programa ensamblador El programa escrito en ensamblador se denomina codigo fuente *.asm, el programa ensamblador proporciona a partir de este fichero el correspondiente código máquina, que suele tener la extensión *.hex IALBERTO 08/12/19 recuperado de : https://www.unioviedo.es/ate/alberto/TEMA3Ensamblador.pdf 6 7.- Estructura básica de un programa en lenguaje ensamblador. Los ficheros de código fuente llevarán la extensión *.ASM Los ficheros de listado llevarán la extensión *.LST Los ficheros de código objeto llevarán la extensión *.OB] Los ficheros de errores llevarán la extensión *.ERR Los ficheros ejecutables en formato Intel Hex llevarán la extensión *.HEX Comentario descriptivo del programa (utilizar una cabecera estandarizada). Definir el micro controlador que se usará (con las directivas LIST e INCLUDE). Introducir las opciones de compilación (que serán vistas más adelante) (opcional). Establecer las constantes que se usarán (con la directiva EQU). Reservar espacios de memoria (directiva RES) (si es necesario). Configurar los puertos. Desarrollar el programa con comentarios, en lo posible explicando cada línea de código Los mnemónicos escritos en minúscula y las constantes y variables en mayúscula hacen que el código escrito sea más visible. Colocar las rutinas en el mismo sitio, todas contiguas. Dibujar diagramas de flujo o escribir seudocódigo. 7 8.- Diferencia entre un lenguaje ensamblador para Dos y para Windows. DOS: Disk Operating System, familia de sistemas operativos para computadoras personales, utilizaban procesadores Intel 8o86 y 8o88 de 16 bits, primer sistema operativo para QDOS, PC-DOS, MS-DOS de Microsoft. DOS Box emula el sistema operativo MsDos que es un sistema operativo de comandos, no de ventanas. Los programas hechos para MsDos corren para Windows 3, Windows 95, Windows xp. Se utiliza para compilar, ligar y ejecutar los programas que utilizamos. Windows: Un ensamblador es un tipo especial de compilador, también es un programa traductor que lee archivos en código fuente y proporciona como salida archivos en código objeto para ser ejecutados por el CPU. Un ensamblador es un traductor diseñado específicamente para traducir lo que llamamos lenguaje ensamblador en código objeto. Compiladores como Pascal o C++, realizan multitud de invisibles e inalterables procesos acerca de cómo una dada declaración del lenguaje será traducida en instrucciones de máquina. Ejemplo en una simple instrucción en Pascal que asigna el valor 42 a una variable numérica llamada I será: I:= 42; 8 9.- Diferencias de lenguaje ensamblador de arquitecturas de 16, 32 y 64 bits. x86-64 es una ampliación de la arquitectura x86, La arquitectura x86 fue lanzada por Intel con el procesador Intel 8086, como una arquitectura de 16 bits. Esta arquitectura de Intel evolucionó a una arquitectura de 32 bits cuando apareció el procesador Intel 80386, denominada inicialmente i386 o x86-32 y finalmente IA-32, AMD amplió esta arquitectura de 32 bits de Intel a una de 64 bits y la llamó x8664, posteriormente AMD64. Intel pronto adoptó las extensiones de la arquitectura de AMD bajo el nombre de IA-32e o EM64T, y finalmente la denominó Intel 64. Los procesadores con arquitectura x86-64 mantienen compatibilidad con los procesadores de la arquitectura IA-32 (x86-32). Por este motivo, disponen de los mismos modos de operación de la arquitectura IA-32, lo que permite CC-BY-SA • PID_00178132 12 Programación en ensamblador (x86-64) mantener la compatibilidad y ejecutar aplicaciones de 16 y 32 bits, pero además añaden un modo nuevo denominado modo extendido (o modo IA-32e, en el caso de Intel), dentro del cual se puede trabajar en modo real de 64 bits. El modo de 64 bits proporciona acceso a 16 registros de propósito general de 64 bits. En este modo se utilizan direcciones virtuales (o lineales) que por defecto son de 64 bits y se puede acceder a un espacio de memoria lineal de 264 bytes. El tamaño por defecto de los operados se mantiene en 32 bits para la mayoría de las instrucciones. El modo heredado de 16 y 32 bits es utilizado por los sistemas operativos de 16 y 32 bits. Cuando el sistema operativo utiliza los modos de 16 bits o de 32 bits, el procesador actúa como un procesador x86 y solo se puede ejecutar código de 16 o 32 bits. Este modo solo permite utilizar direcciones de 32 bits, de manera que limita el espacio de direcciones virtual a 4 GB. 9 10.-Conclusión El lenguaje ensamblador fue creado para facilitar al programador la tarea de estar traduciendo cada número binario etc. Así como para tareas específicas de requerimientos con un solo propósito y eficiencia, buscando optimizar cada tarea y espacio de memoria. La facilidad de hacer mejoras manualmente le da una buena utilización, la búsqueda de la velocidad y eficiencia dio con el lenguaje ensamblador así como los compiladores y lenguaje máquina. 10 11.-Bibliografías https://lignux.com/lenguaje-maquina/ https://es.wikipedia.org/wiki/Lenguaje_de_m%C3%A1quina https://es.wikipedia.org/wiki/Compilador https://es.wikipedia.org/wiki/Ensamblador https://techlandia.com/ventajas-desventajas-compiladores-info_103356/ https://www.monografias.com/trabajos14/leng-ensamblador/leng-ensamblador.shtml https://sites.google.com/site/principioslenguajeemsanblador/home/aplicaciones-modernas-eimportancia-del-lenguaje-ensamblador https://www.unioviedo.es/ate/alberto/TEMA3-Ensamblador.pdf https://www.monografias.com/trabajos76/estructura-programa-ensamblador/estructuraprograma-ensamblador.shtml https://wilsoneliseo.wordpress.com/2018/04/30/programando-en-ensamblador-con-nasm-ydosbox/#orgc22217f https://sites.google.com/site/principioslenguajeemsanblador/entornos-graficos-deprogramacion/dosbox http://www.utm.mx/~jjf/le/TEMA1.pdf 11