Introducción
Regularmente el ingeniero informático está inmerso con los lenguajes de programación de alto nivel al estilo de Java, CS5 o .Net. Estos lenguajes de programación utilizan macroinstrucciones, compiladores, linkeadores y depuradores que hacen más accesible la programación y le permiten tener un mayor control al programador sobre el uso de variables, registros y estructuras de programación.
Por el contrario, el lenguaje de máquina y el lenguaje ensamblador son mucho más complejos, pues hacen uso del programa Debug o algún compilador de Assemble, como por ejemplo el macroensamblador de Microsoft -MASM. Sus instrucciones varían en cuanto al formato y el direccionamiento y posee grandes ventajas.
Pese a que la programación en lenguaje ensamblador no es el objetivo de esta unidad, si es necesario que se utilicen algunos de los principales elementos del lenguaje para la interpretación de las instrucciones, su procesamiento y la comprensión de los programas.
Propósitos de aprendizaje
Propósito General
Utilizar el lenguaje ensamblador como medio para identificar la interacción de los diferentes componentes de la CPU en la ejecución de los programas.
Propósitos específicos
- Conocer la clasificación de las instrucciones del lenguaje ensamblador, determinando su función y sintaxis.
- Identificar el formato del juego de instrucciones del lenguaje ensamblador.
- Desarrollar un programa sencillo en lenguaje ensamblador, como ejemplo de aplicación práctica, para la identificación de registros, datos y direcciones.
Lenguaje ensamblador
Es el lenguaje de trabajo por excelencia del computador, construido con base en unos y ceros y que es denominado código objeto. Un ensamblador no es más que un programa que permite leer un archivo de texto, escrito bajo normas sintácticas o código fuente, que contiene las instrucciones, datos y requerimientos del usuario para la solución de problemas informáticos.
El proceso ensamblador utiliza nemotécnicos para la representación de instrucciones en el código fuente, las cuales corresponden con un código en el lenguaje de máquina. De esta forma el ensamblador traduce los programas del código fuente al código objeto para permitir la ejecución del procesador.
En el caso de los lenguajes de alto nivel, el compilador tiene una función similar y es traducir las instrucciones escritas en el editor de texto al lenguaje de máquina correspondiente.
El código fuente que contiene las instrucciones nemotécnicamente escritas de acuerdo con las reglas sintácticas y puede ser escrito en cualquier editor de texto. El programa DEBUG incorpora un pequeño editor de líneas utilizado con este fin para generar el código objeto.
El archivo ejecutable final puede tener las extensiones .exe o .com, archivo ejecutable si se han determinado los segmentos de datos, código, pila y extra produciendo un código fuente bien estructurado. El programa DEBUG y cualquiera de los macroensambladores también pueden producir código fuente como archivos .com que si bien es cierto también es de tipo ejecutable, se encuentran poco estructurados, por esto también son llamados archivos de comando.
Conjunto de instrucciones
Las instrucciones o nemónicos con las que cuenta el lenguaje ensamblador se encuentran clasificadas de acuerdo con su función en instrucciones de transferencia, aritméticas, saltos, lógicas y misceláneas.
- Instrucciones de transferencia: permiten el movimiento, carga y descarga de los registros.
- Instrucciones aritméticas: encargadas de la aplicación de las pocas operaciones aritméticas que contiene el lenguaje.
- Instrucciones lógicas: encargadas de la aplicación de las operaciones lógicas, generalmente utilizan un solo operador.
- Instrucciones de salto: se caracterizan porque el operador contiene una dirección de memoria en la cual debe continuar la ejecución en el caso que la instrucción así lo determine.
- Instrucciones misceláneas: este pequeño conjunto de instrucciones consta de la instrucción para finalización del programa, la instrucción para el llamado a subrutinas de interrupción y la instrucción para leer una dirección efectiva.
El formato del set de instrucciones se caracteriza por un nemónico que determina el código de operación y una serie de operandos sobre los que se ejecutan dichas operaciones.
Modos de direccionamiento
Los modos de direccionamiento determinan la forma como los campos de operando interactúan con los registros y el procesador. Todas las instrucciones referencian en sus operadores de forma diferente los datos, posiciones de memoria, registros o alguna combinación entre ellos. Cada una de estas referencias determinan el modo en el que se direccionan las instrucciones y los resultados en el programa.
Los campos de operador de una instrucción se transforman en la dirección del operador a través del modo de direccionamiento apropiado, de esta forma el procesador establece donde encontrar la información para completar la ejecución de los instrucciones.
Existen otros modos de direccionamiento complejos; sin embargo, en este apartado solo se retomarán aquellos de explicación sencilla que corresponden con algunas imágenes explicativas. Éstos son: direccionamiento implícito, inmediato, directo, directo por registro indirecto e indirecto por registro.
El resultado de este proceso es la dirección efectiva la cual se cargará en el registro de direcciones MAR para la ejecución de la instrucción
El programa Debug
A los programas, que traducen las instrucciones del lenguaje Assembler a códigos de operación en el lenguaje máquina, se les denomina ensambladores. Existen algunas aplicaciones como el MASM o el TASM de Microsoft con algunas características especiales y algunas comodidades en el entorno gráfico hacia el usuario.
Sin embargo, el programa Debug, que viene incorporado con el sistema Windows en todas sus versiones, es una herramienta de enormes potencialidades didácticas para el estudio y comprensión de la estructura de procesamiento y almacenamiento de instrucciones.
Si bien es cierto que es un programa antiguo, también se trata de un programa muy potente para el manejo del procesador y la memoria; muestra de ello es que al emplearlo inadecuadamente con solo operar del comando W se puede borrar el contenido entero del disco duro.
Al igual que todos los aplicativos, el programa Debug contiene una serie de comandos que permiten realizar las acciones necesarias para la codificación, decodificación, ensamblaje y volcado de la memoria, entre otros.
Una forma de entender las acciones de cada instrucción es documentarlas a través de la utilización del punto y coma (;). Cualquier cosa a partir del carácter punto y coma (;) hasta el final de la línea, será ignorado. Por ejemplo:
; esto es un comentario
; programa Hola Mundo
Ensamblar y ejecutar programas
Una de las actividades didácticas, para el reconocimiento de diversos conceptos involucrados en el estudio del hardware interno y su interacción con el sistema operativo, es la de ensamblar y ejecutar programas en Debug. Pese a que no se pretende desarrollar competencias de programación en Assembler, el programa Debug permite generar la idea del procesamiento a través de los registros de propósito general en remplazo de las variables de los programas de alto nivel.
Generalmente, el programa se escribe en papel a través de la utilización de etiquetas que permiten referenciar las direcciones de memoria que representan a cada instrucción. Dichas etiquetas deberán ser remplazadas por las direcciones de memoria que entrega el programa Debug en el momento de su transcripción.
El manejo del lenguaje ensamblador, aparte de ser complejo, es monótono dado que la interfaz que maneja es poco amigable. Se trata de un editor de líneas que tiene serias limitantes y con algunos comandos que no se reconocen con facilidad dado que distan de los nemotécnicos del lenguaje de alto nivel.
Pese a ello, como se evidencia en el ejemplo, existen múltiples razones de índole didáctico, metodológico y funcional, que hacen que la experiencia del trabajo con el lenguaje ensamblador garantice la identificación de la importancia de la mayoría de conceptos analizados y expuestos en las unidades y apartados anteriores, lo cual determina un conocimiento adecuado del sistema informático y sus diversos componentes.
Uso de las interrupciones
Una interrupción, dada con la instrucción INT, suspende la ejecución del programa, llama la subrutina determinada por el operador, ejecuta las instrucciones de la subrutina en las que debe aparecer la instrucción RET, que es la que devuelve el control al programa original para seguir ejecutando sus instrucciones.
Existen dos tipos de interrupciones:
- Las del BIOS, que manejan los códigos del 00H a 1FH y
- Las del DOS, los códigos del 20H al 3FH.
Cada código de ejecución de interrupciones utiliza algunas funciones que permiten aplicaciones diversas; es decir, que una misma interrupción puede desarrollar funciones diferentes dependiendo del número empleado.
Por ejemplo, la interrupción 10H permite el control del vídeo; entonces el registro AH debe contener una de las cuatro funciones que acepta la interrupción para su manejo. El resto de registros de propósito general permiten determinar la colocación del cursor, el recorrido, repeticiones y el carácter de despliegue.
Resumen
El lenguaje ensamblador es un programa que permite llevar los códigos de operación y operandos en forma de instrucciones o nemónicos fácilmente entendibles e identificables por el programador a códigos de lenguaje máquina que se presentan con números hexadecimales en memoria.
El programa en lenguaje ensamblador se denomina código fuente, mientras que la traducción realizada por el ensamblador a lenguaje de máquina se denomina código objeto.
El código fuente se crea a partir de cualquier editor de texto incluso editores de línea como es el del programa Debug, el código objeto por el contrario se crea en el momento de la introducción de las instrucciones en el programa Debug, finalmente el mismo Debug genera el archivo ejecutable utilizando el comando apropiado.
El lenguaje ensamblador provee al programa Debug el conjunto de instrucciones requerido para escribir programas, dichas instrucciones pueden ser de transferencia, lógicas, aritméticas, de salto y unas muy especiales denominadas misceláneas.
Las instrucciones se componen de un código de operación y algunos operandos, los cuales dependiendo de los modos de direccionamiento, permiten establecer la forma como se deben interpretar los campos de los operandos para su ubicación en memoria, dado que un operando puede ser un número, una dirección de memoria, un registro o hasta un registro que contiene la dirección de memoria requerida.
Para el manejo de los programas en Assembler se pueden utilizar macroensambladores como MASM o TASM. Sin embargo, debido a sus aplicaciones didácticas, y a que viene incorporado en todas las versiones del sistema operativo Windows, se ha utilizado el programa Debug para los ejercicios de aplicación que incorpora la unidad.
Bibliografía ()
- Abel, P. (1996). Lenguaje ensamblador y programación para IBM PC y compatibles. Pearson Educación.
- Mano, M. M. (1994). Arquitectura de computadoras. Pearson Educación.
- Martínez, M. U. (2003). Arquitectura del PC (Vol. 1). Manuel Ujaldón Martínez.
- Martínez, M. U. (2003). Arquitectura del PC (Vol. 2). Manuel Ujaldón Martínez.
- Martínez, M. U. (2003). Arquitectura del PC (Vol. 3). Manuel Ujaldón Martínez.
- Martínez, M. U. (2003). Arquitectura del PC (Vol. 4). Manuel Ujaldón Martínez.
- Martínez, M. U. (2003). Arquitectura del PC (Vol. 5). Manuel Ujaldón Martínez.
- Stallings, W. (1997). Sistemas operativos (Vol. 732). Prentice Hall.
- Tocci, R. J., & Widmer, N. S. (2003). Sistemas Digitales. Principios y aplicaciones (8ª ed.). Naucalpan de Juárez, México.
- Vázquez, M. G., & López, J. M. L. (2006). Apuntes de organización de computadores. Universidad de Oviedo.
Referencias Web
- García de Celis, C. (s.f.). EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2. Recuperado el 12 de Marzo de 2013. Recuperado de: http://atc.ugr.es/docencia/udigital/




