el programa ensamblador - Escuela de Ingenierías Industriales

Anuncio
Escuela de Ingenierías Industriales (Badajoz)
Universidad de Extremadura
Programación en Lenguaje Ensamblador
para el Procesador MC68000
Estructura de los Microprocesadores
(2º I.T.I. Electrónico)
José Ignacio Suárez Marcelo
Escuela de Ingenierías Industriales (Badajoz) - UEx
Estructura de los Microprocesadores
Introducción a la Programación en Ensamblador
1. Lenguaje Máquina
El lenguaje que utiliza y entiende un procesador digital está formado exclusivamente por unos y ceros
(transistores trabajando en corte/saturación a alta velocidad). Los datos y las instrucciones son un conjunto de unos y
de ceros almacenados en memoria. Por tanto, el procesador sólo entiende programas escritos con unos y ceros. Este
“idioma” que es capaz de entender el procesador recibe el nombre de lenguaje máquina.
2. Lenguaje Ensamblador
Sería una tarea muy engorrosa y tediosa para los programadores escribir el código correspondiente al
programa usando unos y ceros, es decir, usando el lenguaje máquina. Además, se podrían cometer muchos errores.
Los programas escritos en lenguaje máquina serían difíciles de entender y de depurar. En lugar de ello, los
fabricantes de procesadores facilitan al programador las instrucciones escritas en un lenguaje cercano a la máquina,
pero más fácilmente entendible por el ser humano, que recibe el nombre de lenguaje ensamblador. Este lenguaje usa
valores simbólicos, en lugar de binarios, llamados nemónicos, es decir, códigos mnemotécnicos1 (fáciles de
memorizar) que identifican su funcionalidad, (por ejemplo, MOVE representa una instrucción de movimiento de
datos). El lenguaje ensamblador conserva las principales ventajas del lenguaje máquina, ya que, cada instrucción en
ensamblador se corresponde con una instrucción en lenguaje máquina. Además, el lenguaje ensamblador presenta
ciertas ventajas adicionales, como por ejemplo, que se pueden definir zonas de memoria y sus contenidos, se pueden
utilizar comentarios, macros, etc. de tal forma que se ayude a estructurar el programa y a la comprensión del mismo.
3. Programa Ensamblador
La traducción del código mnemónico o lenguaje ensamblador al código máquina se realiza con ayuda de un
ordenador sobre el que corre un software llamado programa ensamblador.2 El código que corresponde al programa
escrito en lenguaje ensamblador y que va a ser traducido a lenguaje máquina recibe el nombre de código fuente. Y el
código en lenguaje máquina generado por el programa ensamblador recibe el nombre de código objeto.
1
La Real Academia de la Lengua Española define “mnemotécnico” como “perteneciente o relativo a la mnemotecnia” y “mnemotecnia” como
“procedimiento de asociación mental para facilitar el recuerdo de algo”.
2
Conviene advertir que la palabra ensamblador, que se utiliza tanto para denominar al lenguaje de programación como al programa que lo
traduce, tiene dos acepciones diferentes que no deben ser confundidas.
Programación en Lenguaje Ensamblador para el Microprocesador MC68000
1
Escuela de Ingenierías Industriales (Badajoz) - UEx
Estructura de los Microprocesadores
Cuando el ordenador que se utiliza para el ensamblado es el mismo o tiene el mismo procesador que el
sistema en el que se va a ejecutar el código máquina resultante, se dice que el programa ensamblador utilizado es un
autoensamblador. Pero, si el procesador destino es diferente al procesador del ordenador donde corre el programa
ensamblador, entonces se habla de un ensamblador cruzado (cross assembler). En estas prácticas se emplea un
“ensamblador cruzado de 68000” ya que el ordenador que soporta al programa ensamblador corre en un ordenador
personal compatible IBM (plataforma Intel o AMD) y el procesador destino es un MC68000 de Motorola.
4. Programa Montador de Enlaces
En general, el código objeto producido por el programa ensamblador, aunque está en código máquina,
todavía no es directamente ejecutable en el procesador. Esto es debido a que el fichero con el código objeto incluye
información adicional que será empleada por otro programa llamado montador de enlaces. El montador de enlaces
utiliza esta información para organizar el código máquina procedente de uno o varios códigos objeto, con el fin de
generar un programa ejecutable.
El programador, por tanto, en lugar de generar un programa muy extenso, puede optar por dividirlo varios
módulos más pequeños, de tamaño razonable, de forma que el programa completo tenga una mayor facilidad de
comprensión y depuración. Además, con esta forma de trabajo se pueden insertar otros módulos, llamados
bibliotecas (en inglés, libraries), desarrollados para otras aplicaciones, ya depurados y probados, con lo cual se
reduce el tiempo de desarrollo. En muchas ocasiones es el propio fabricante del procesador quien facilita dichas
bibliotecas.
CÓDIGO
FUENTE
1
CÓDIGO
FUENTE
2
ENSAMBLADOR
CÓDIGO
OBJETO
LINKADOR
CÓDIGO
EJECUTABLE
CÓDIGO
FUENTE
n
Programación en Lenguaje Ensamblador para el Microprocesador MC68000
2
Escuela de Ingenierías Industriales (Badajoz) - UEx
Estructura de los Microprocesadores
El ensamblador 68000 (IDE68K)
1. Características Generales
•
Es un ensamblador cruzado.
•
El código fuente debe estar escrito en código ASCII.
Las líneas del programa o sentencias están divididas en tres campos:
[Etiqueta]
[Código[Operando(s) ]]
[Comentario]
Campo de Etiquetas:
La etiqueta es un nombre inventado por el programador que sirve para definir posiciones de memoria
específicas o valores constantes. Liberan al programador de recordar datos numéricos, posiciones de memoria, etc.
−
Reglas para la definición de etiquetas:
Cadena de caracteres de cualquier longitud, aunque sólo los 15 primeros son significativos.
Puede ser cualquier código ASCII mayor de 32 (espacio), salvo: + - 1 & ! | ^ < > ( ).
El primer carácter no puede ser un número ni los símbolos $, ni %.
Mayúsculas y minúsculas se consideran caracteres diferentes.
Tienen que estar en la primera columna de texto, salvo que terminen con el carácter : ( dos
puntos), en cuyo caso, sí puede haber espacios delante de ellas.
Ejemplos de etiquetas válidas
Ejemplos de etiquetas no válidas
Esto_es_una_etiqueta
LAZO1
SALTO:
Bucle_n1
bucle_n1
1LB12 (empieza por número)
LAZO&1 (contiene carácter ilegal)
Programación en Lenguaje Ensamblador para el Microprocesador MC68000
3
Escuela de Ingenierías Industriales (Badajoz) - UEx
Estructura de los Microprocesadores
Campo de Códigos:
En el campo de códigos pueden aparecer:
•
Instrucciones: las pertenecientes al juego de instrucciones del ensamblador.
•
Directivas del Ensamblador: son códigos mnemónicos que actúan sobre el programa ensamblador y
que, por tanto, no tienen traducción al código máquina.
−
Reglas para la definición de códigos:
El campo de código debe estar separado del margen izquierdo con, al menos, un espacio
(normalmente se usa una tabulación).
Pueden ser todos los mnemónicos del juego de instrucciones así como las directivas del
ensamblador.
No se hace distinción entre mayúsculas o minúsculas.
Los sufijos utilizados para indicar el tamaño de los datos son: .B (byte), .W (palabra) y .L (doble
palabra).
Para la instrucción BRA, donde el salto puede ser de 8 ó 16 bits, se usan los sufijos .S (short) y .L
(long), respectivamente. A pesar de esto, se recomienda no usar este sufijo, ya que el programa
ensamblador se encarga de seleccionar el tipo de salto que mejor se adapte a cada caso.
−
Operandos:
Dentro del campo de códigos puede aparecer el campo de operandos, donde se ubicarán los
operandos que utilicen las instrucciones o las directivas del ensamblador. La sintaxis, cuando son
operandos de instrucciones, es la ya vista en los modos de direccionamiento. Existen variantes en los
direccionamientos relativos al PC:
Dir. Relativo al PC con desplazamiento:
Dsp(PC) o Etiqueta Relativa
Dir. Relativo al PC con índice (Dm) y desplazamiento (dsp):
Dsp(PC,Dm.X) o Etiqueta Relativa(PC,Dm.X )
Si para una instrucción determinada no usamos el tamaño de operando adecuado, el ensamblador
nos dará un mensaje de error.
El ensamblador reconoce al puntero de pila, A7, como SP (Stack Pointer).
Si utilizamos un direccionamiento inmediato tendremos que usar el carácter # (almohadilla).
Además, si el dato es:
Programación en Lenguaje Ensamblador para el Microprocesador MC68000
4
Escuela de Ingenierías Industriales (Badajoz) - UEx
Estructura de los Microprocesadores
binario, usaremos %.
hexadecimal, el carácter $.
decimal, no será necesario ningún prefijo (excepto #).
código ASCII, se utilizarán comillas simples. Por ejemplo: #'A'
Los operandos también pueden ser representados mediante etiquetas. Por ejemplo:
move.b #valor,D0
Se pueden utilizar expresiones aritméticas y lógicas para definir el valor numérico de un operando.
Las operaciones permitidas son:
O lógica (OR): |
O exclusiva (XOR): ^
Y lógica: &
Suma de enteros: +
Resta de enteros: −
División entera de enteros: /
Desplazamiento lógico a derecha: >
Desplazamiento lógico a izquierda: <
Signo: + −
Negación: !
Paréntesis sin límites de nivel: ( )
Campo de Comentarios:
Este campo debe estar separado del anterior por, al menos, un espacio.
En el caso de sentencias que únicamente contengan comentarios, el primer carácter puede ser un punto y
coma (;), y en este caso, tiene que coincidir con la primera columna, o también puede ser un asterisco (*).
El uso de comentarios es fundamental para la buena interpretación de un programa en ensamblador, su
depuración y el entendimiento de dicho programa por una persona distinta a quien lo programó.
Programación en Lenguaje Ensamblador para el Microprocesador MC68000
5
Escuela de Ingenierías Industriales (Badajoz) - UEx
Estructura de los Microprocesadores
2. Directivas del ensamblador
Únicamente vamos a ver las directivas más importantes y son las siguientes:
Directiva “ORG”: (program ORiGing)
Indica al ensamblador la posición de memoria inicial a partir de la cual debe situar el código que se genere
detrás de esta directiva. Por ejemplo: ORG $25000.
Directiva “DC”: (Define Constant data)
Define constantes. Se usa para crear datos constantes en memoria, por ejemplo, tablas, texto y números. Su
sintaxis es la siguiente:
[Etiqueta]
DC[.B] [.W] [.L]
[Operando1] [, Operando2] [, ...]
Reserva e inicializa una o varias posiciones consecutivas de memoria del tamaño indicado (bytes, palabras
o dobles palabras) cuyos valores vienen indicados por los operandos. Si no se indica nada se supone “.W”. Si es
necesario los datos numéricos son truncados para adaptarse al tamaño indicado. Se pueden generar hasta 256 bytes
con una simple directiva DC.
Si no se incluye ningún operando, entonces se reserva e inicializa a cero.
La etiqueta tiene asignada la dirección del primer dato almacenado.
Ejemplos:
ETIQ1
ETIQ
DC.B
10, 5, 7
ETIQ2
MEMORIA
ETIQ →
2N
2N+1
10
7
5
Programación en Lenguaje Ensamblador para el Microprocesador MC68000
DC.B ‘A’, ‘B’
DC.W $2A34
DC.L
MEMORIA
2N
ETIQ1 →
‘A’
$2A
ETIQ2 → $00
$00
2N+1
‘B’
$34
$00
$00
6
Escuela de Ingenierías Industriales (Badajoz) - UEx
Estructura de los Microprocesadores
Directiva “DS”: (Define Storage)
Define una zona de variables. Esta directiva es usada para reservar memoria para propósitos específicos. Su
sintaxis es la siguiente:
[Etiqueta]
DS[.B] [.W] [.L]
longitud
Reserva en memoria tantas posiciones como indique longitud del tamaño definido por el sufijo de la
etiqueta (bytes, palabras o dobles palabras), y los inicializa a cero. Si no se indica nada se supone “.W”.
Ejemplo:
ETIQ
DS.W
3
MEMORIA
ETIQ →
2N
2N+1
$00
$00
$00
$00
$00
$00
Directiva “EQU”: (EQUal)
Iguala. Define un valor simbólico (el definido en el campo de Etiqueta) cuyo valor es el del campo
“expresión”. Su sintaxis es la siguiente:
Etiqueta
EQU
expresión
Asigna el valor de expresión a etiqueta.
Ejemplos:
num
dir
EQU
EQU
$32A0
(dir1+dir2)/2
Directiva “END”: (END of source code)
Final del código fuente. Indica al programa ensamblador dónde termina el programa. Todo lo que se escriba
detrás de esta directiva no será ensamblado. Si no se encuentra se ensambla todo. Su sintaxis es la siguiente:
END
[punto de entrada]
Se puede especificar un parámetro opcional, el punto de entrada (entry point), es decir, la dirección de inicio del
programa.
Programación en Lenguaje Ensamblador para el Microprocesador MC68000
8
Descargar