Pá
gi
na
7
CLASE #06
LENGUAJE ESAMBLADOR.
LENGUAJE DE ALTO NIVEL.
Objetivo:
Conocer la estructura del lenguaje Ensamblador, el sistema básico de entrada y salida, los procedimientos y técnicas de programación.
INTRODUCCIÓN:
Un programa en lenguaje máquina carece de sentido inmediato para un ser humano, quien sólo ve una lista de valores numéricos sin sentido lógico. Además, la escritura de programas en lenguaje máquina puede resultar muy pesada, tediosa y esta sujeta a errores.
Para evitar esto, se han desarrollado una serie de lenguajes de alto nivel cuyo objetivo es hacer más agradable la programación de µP y microcomputadores desde el punto de vista del usuario.
LENGUAJE DE ALTO NIVEL. LENGUAJE ENSAMBLADOR.
Los lenguajes de programación pueden dividir, a grosso modo, en las siguientes jerarquías:
Lenguajes de microprogramación. Lenguajes de máquina.
Lenguajes ensambladores. Lenguajes de alto nivel.
Pá
gi
na
7
El lenguaje ensamblador (o assembly) y los lenguajes de alto nivel (pascal, cobol, basic, etc.) consisten en una serie de instrucciones especiales que son más fáciles de entender por las personas que las del lenguaje máquina o en código objeto.
Para poder ser comprendidos por el µP, estas instrucciones deben ser convertidas a lenguaje máquina por medio de un programa de computador, llamado traductor, como se muestra a continuación.
Conversión de lenguaje ensamblador o de alto nivel a lenguaje máquina. El programa traductor que convierte el lenguaje ensamblador en lenguaje máquina se denomina ensamblador o assembler y el que convierte un lenguaje de alto nivel en el lenguaje máquina se denomina intérprete o compilador. El lenguaje (ensamblador o de alto nivel) que entra en un traductor se denomina código fuente y el que sale del mismo, se denomina código objeto.
El lenguaje ensamblador es similar, en principio, al lenguaje máquina y utiliza el mismo conjunto de instrucciones. Es decir, es un lenguaje máquina traducido. Por esta razón, el ensamblador no es considerado como un lenguaje de alto nivel si se le compara, por ejemplo con el pascal, el cual su estructura, está mas orientado a las personas que a las máquinas mismas.
CARACTERISTICAS DEL ENSAMBLADOR.
El ensamblador posee varias e importantes características que hacen de un programa escrito en un lenguaje as fácil de leer, escribir e interpretar que uno escrito en lenguaje máquina. Algunas de las características más importantes y claves tenemos:
1. En lugar de números, cada instrucción ejecutable (op-code) se representa mediante una abreviatura llamada nemónico, fácil de recordar, la cual define la operación realizada. Normalmente consta de 2 o 4 letras, y corresponden, usualmente a las iniciales o abreviatura de palabra o palabras en ingles que describen la función (MOV, ADD, HLT).
Código fuente.
(Programa en Ensamblador, Pascal, Basic, etc.)
Traductor.
(Ensamblador, compilador, intérprete, etc.)
Código Objeto.
Pá
gi
na
7
2. Las direcciones absolutas de memoria se representan también por nemónicos llamados rótulos o etiquetas (labels), que son símbolos o grupos de símbolos que definen el usuario. Algunos programas ensambladores exigen que el primer carácter sea una letra y el rótulo en sí no tenga mas de 5 ó 6 caracteres de largo. Generalmente terminan en dos puntos (:), lo cual obvia la necesidad de conocer, durante la escritura del programa, la dirección especifica de la memoria donde quedará almacenada la instrucción que hace referencia a cada etiqueta, ejemplo de esto, es cuando requerimos de hacer un salto o jump a una dirección etiquetada en el programa.
3. Se pueden usar neumónicos llamados seudo-códigos de operación (pseudo-ops) para facilitar la labor de programación. Estos seudo-códigos, aunque parecen códigos de operación, no son códigos de operaciones ejecutables, es decir, no son convertidos por el ensamblador a lenguaje máquina. Sin embargo, proporcionan información importante que necesita el ensamblador en el proceso de traducción. Los pseudo-ops se denominan también directivas del ensamblador, ejemplos de estos tenemos ORG que representa el origen o indica la ubicación de la primera instrucción ejecutable del programa y EQU (equivale a …), utilizado para asignar símbolos a valores numéricos con el fin de que estos últimos posean un significado más evidente ante nosotros.
ESCRITURA EN EL LENGUAJE ENSABLADOR.
Los programas en el lenguaje ensamblador deben de ser escritos de una forma estándar con el fin de que puedan ser fácilmente convertidos a lenguaje máquina por el programa ensamblador. Desde este punto de vista, una instrucción en lenguaje ensamblador consta de cuatro secciones o campos.
ETIQUETA OP-CODE OPERANDOS COMENTARIOS
Pá
gi
na
7
El primer campo corresponde a la etiqueta, y en el se refieren las direcciones que no son específicamente conocidas y terminan en (:) para separarla de los otros campos, ejemplos: LOOP:, NAME:, etc. y casi siempre no se usa.
El segundo campo corresponde al op-code o código de operación de la instrucción a ser ejecutada. Cada µP tiene su propio conjunto de códigos nemónicos para designar cada una de las instrucciones a las que responde. Algunos ejemplos tenemos MOV, ADD, SUB, JMP, CALL, IN, OUT, HALT, etc.
El tercer campo corresponde a los operandos o parámetros requeridos por la instrucción. Contiene separados por comas (,), las designaciones de los registros y/o los datos o direcciones sobre los cuales actúa la misma.
Por ejemplo, la instrucción MOV A,B; transfiere el contenido del registro B al registro A. En este caso, MOV es el código de operación y A y B los operandos. B actúa como registro fuente y A como registro de destino.
El cuarto campo corresponde a los comentarios. En esta área se escriben, entre otras cosas, notas especiales que sirven de referencia no sólo al programador sino a cualquier persona que consulte el programa en un futuro o explicaciones de lo que hace cada instrucción o grupo de instrucciones desde el punto de vista explicativo.
Pá
gi
na
7
LENGUAJE DE MÁQUINA LENGUAJE ENSAMBLADOR (CÓDIO OBJETO) (CÓDIGO FUENTE)
DIAGRAMAS DE FLUJO.
Aunque el lenguaje ensamblador representa una ayuda sustancial en la codificación de los programas, sigue siendo difícil crear inmediatamente el código necesario para nuestras aplicaciones particulares. Una herramienta básica para la solución de problemas la constituyen los diagramas de flujo.
Mediante un diagrama de flujo, un problema dado puede representarse en forma grafica y sencilla, dibujando los pasos que requiere su solución y el orden en que deben ejecutarse. Estos diagramas son mucho mas claros y fáciles de comprender que las instrucciones escritas en lenguaje ensamblador.
Dirección Instrucciones,datos
instrucciones no ejecutables
0010H 3E
0011H 08
001 2H 06
0013H 07
001 4H 80
0015H 32
001 6H 20
001 7H 00
001 8H 76
Etiqueta (Nemónico)OP-CODE Operando Comentarios
ORG OOOOH ; Empezar en 0000H
SUM 1: EQU 08H ; Hacer SUM 1 = 08H
SUM 2: EQU 07H ; Hacer SUM 2 = 07H
RESUL: EQU 0020H ; Hacer RESUL = 0020H
MVI A, SUM1 ; Cargar A con primer dato
MVI B, SUM2 ; Cargar B con segundo dato
ADD * B ; Sumar A con B
STA RESUL ; Llevar resultado de la suma ala posición RESUL convenida
Pá
gi
na
7
La mayoría de programadores, antes de escribir un programa en ensamblador, lo representan primero gráficamente en un diagrama de flujo. Algunos programadores experimentados dibujan el diagrama de flujo después de completar el programa y lo hacen solo con fines explicativos.
Un diagrama de flujo bien elaborado no debe hacer referencia explicita al lenguaje ensamblador de una maquina especifica. Por tanto, puede ser utilizado para escribir un programa para cualquier microprocesador.
Diagramas de Flujo.
Pá
gi
na
7
enlace son siempre unidireccionales. Es esta la razón por lo cual se utilizan flechas para indicar el sentido que se sigue en la ejecución de las instrucciones.
Siempre que haya que elegir una opción, se, utiliza un símbolo de decisión, en forma de rombo, diamante o hexágono aplanado. Como en el caso anterior, el control fluye por un solo camino, pero puede discurrir en una de dos direcciones según el resultado de la condición. Los símbolos auxiliares se utilizan para dar mayor comprensión y claridad.
El símbolo marcado como terminal (un ovalo) muestra indistintamente tanto el principio como el fin de programa. El conector de partes se utiliza para reemplazar las líneas de flujo donde resulta conveniente por razones de espacio o claridad.
El conector de páginas se usa cuando en un mismo diagrama llega a ocupar más de una hoja. Representa una gran ventaja, en cuanto a claridad y comodidad se refiere, utilizar un conector en lugar de una línea de flujo para conectar puntos del diagrama representados en diferentes páginas.
Como norma general, todo programa debe ser concebido en términos de sus diagramas de flujo, antes de ser codificados. Tal práctica asegura que el flujo de control del programa siga su secuencia lógica y evita la creación de espaguetis, es decir, programas en los que el flujo de control se desvía en forma indiscriminada y confusa.
Asignación de autogestión:
- Observe el formato de las instrucciones y ubique en ellas los diferentes campos (etiqueta, nemónico, operando y comentarios).
- Identifique las directivas del Ensamblador.
- Elabore un programa en diagrama de flujo que obtenga la cuenta regresiva de un número N.