Universidad
Rey Juan Carlos
ESTRUCTURA Y TECNOLOGESTRUCTURA Y TECNOLOGÍÍA DE A DE COMPUTADORESCOMPUTADORES
Traducción de programas en ensamblador
a código máquina en el MC68000
Luis Rincón CórcolesLicesio J. Rodríguez-Aragón
Traducción de programas en ensamblador a código máquina en el MC68000
2
1. Introducción.
2. Algunos conceptos básicos.
3. Ensamblaje y montaje de un programa sin referencias externas.
Programa
Traducción de programas en ensamblador a código máquina en el MC68000
3
P. DE MIGUEL. Fundamentos de los computadores. 7ª edición. Paraninfo, 1999.
J. SEPTIÉN, H. MECHA, R. MORENO, K. OLCOZ. La familia del MC68000.Síntesis, 1995.
C. CERRADA, V. FELIU. Estructura y Tecnología de Computadores I. UNED, 1993
M68000 8/16/32 Bit Microprocessors User’s Manual. 9th edition. Motorola, 1993.
Motorola M68000 Family Programmer’s Reference Manual. Motorola, 1992.
A. CLEMENTS. Microprocessor Systems Design. 3rd edition, ITP - PWS Publishing Company, 1997.
Bibliografía
Traducción de programas en ensamblador a código máquina en el MC68000
4
1. Introducción
Proceso de traducción de un programa fuente a su versión ejecutable:
LinkerCompilerProgram Assembler Computer
High-level language program
Assembly language program
Traducción de programas en ensamblador a código máquina en el MC68000
5
IntroducciónEl proceso de traducción de un programa de ensamblador a código máquina
consta de dos etapas:• Traducción de los módulos fuente en ensamblador a módulos objeto.• Montaje de los módulos objeto para formar el programa ejecutable.
El traductor toma el código ensamblador y lo traduce a código máquina creando un módulo objeto no ejecutable directamente.
• Le pueden faltar referencias cruzadas, código de otros módulos, reubicar direcciones, etc.
El montador genera el código ejecutable reuniendo los módulos objeto, resolviendo las referencias cruzadas y reubicando el código.
En este tema estudiaremos:• Algunas directivas no estudiadas aún.• El proceso de traducción de un módulo ensamblador a módulo objeto.• El proceso de montaje estático de un programa ejecutable.
Los sistemas operativos con bibliotecas dinámicas (DLL) exigen montaje dinámico.
Traducción de programas en ensamblador a código máquina en el MC68000
6
2. Algunos conceptos básicos
Contador de dirección de ensamblaje.
Tabla de códigos de operación.
Tabla de símbolos.
Tabla de reubicación.
Referencias adelantadas.
Tipos de traductores de ensamblador.
Traducción de programas en ensamblador a código máquina en el MC68000
7
Contador de dirección de ensamblaje (CDE)Variable propia del traductor a código máquina utilizada para asignar
direcciones de memoria a los objetos del programa (datos e instrucciones).•El CDE lleva la cuenta de la dirección asignada al último objeto traducido.•La dirección asignada por el CDE a un objeto viene a ser la dirección de memoria en la que se encontrará cuando el programa esté en ejecución.•El CDE se puede usar como operando en instrucciones y directivas como una constante que en cada momento tiene un valor diferente (¡!).•Dentro de un programa en ensamblador el CDE se identifica por el símbolo *.
El valor del CDE se va modificando a medida que se traduce el programa, de acuerdo con el tamaño de los objetos traducidos (datos o instrucciones).
(suponemos que CDE = d)
OBJETO (instrucción o definición de datos, con sus operandos)
(ahora CDE = d+t, siendo t el tamaño de la instrucción o de los datos en octetos)
Si un módulo en ensamblador tiene secciones, cada una de ellas cuenta con su propio CDE.
Traducción de programas en ensamblador a código máquina en el MC68000
8
Tabla de códigos de operación (TCO)Tabla que contiene los nemotécnicos correspondientes a los códigos de
operación del repertorio de instrucciones del computador objetivo, así como los de las pseudoinstrucciones y directivas.
Esta tabla también deberá contener indicaciones acerca de cómo debe procesarse cada instrucción, pseudoinstrucción o directiva.
Es una tabla estática, es decir, existe antes de comenzar a traducir el programa fuente, y es independiente del código que éste contiene.
Traducción de programas en ensamblador a código máquina en el MC68000
9
Tabla de símbolos (TS)Es una tabla en la cual el traductor va almacenando los símbolos definidos en el
programa.•Cuando aparece en el programa una definición de un símbolo, el programa traductor ensamblador lo inserta en la tabla de símbolos, junto con la información correspondiente.•Si un símbolo está definido más de una vez en un módulo, normalmente el traductor devolverá un mensaje de error.
La información para cada símbolo incluirá:•La cadena de caracteres ASCII que compone en nombre del símbolo.•El tipo de símbolo: absoluto, reubicable (relativo) o redefinible.•Indicación de si el símbolo está ya definido o no (si su valor es conocido o no).•El valor del símbolo.•Estatus del símbolo: importado, exportado o privado.•Otras informaciones: tamaño del símbolo, líneas de código donde es referenciado, etc.
Traducción de programas en ensamblador a código máquina en el MC68000
10
Tabla de reubicación (TR)Es una tabla que contiene referencias a todos los datos u operandos de
instrucciones en un programa cuyo valor puede ser reubicado en el montaje.
Esta tabla a veces recibe el nombre de tabla de direcciones absolutas (TDA).
Ejemplo: fragmento de código para el MC68000
Tabla de símbolos (TS)
.........
Valor del símbolo
Tipo del símbolo
Nombre del símbolo
VRelativoS1
V+2RelativoS2
S1,D0MOVE.WW
...
25DC.LS2V+2
S2,A0LEAW+6
33DC.WS1V
Valor del CDE
OperandosNemotécnicoEtiqueta
...
Tabla de reubicación (TR)
......
Tamaño del objetoDirección del objeto
4W+2
4W+8
Traducción de programas en ensamblador a código máquina en el MC68000
11
Referencias adelantadas
Se produce una referencia adelantada cuando un símbolo aparece en un programa en una sentencia previa a la sentencia en la que está definido.
Todos los traductores de ensamblador deben contemplar obligatoriamente la posible aparición de referencias adelantadas.
•En ensamblador no siempre es posible eliminar todas las apariciones de referencias adelantadas.
El tratamiento de las referencias adelantadas será diferente dependiendo del tipo de traductor utilizado.
Una sentencia con una referencia adelantada no puede ser traducida completamente hasta que dicha referencia adelantada sea resuelta, es decir, hasta que se conozca el valor de todos los símbolos que participan en ella.
En ciertas situaciones, las referencias adelantadas no están permitidas.
Traducción de programas en ensamblador a código máquina en el MC68000
12
Traductores de ensamblador
Los traductores de ensamblador convierten a código máquina las sentencias de un programa escrito en ensamblador.
• Al traducir un programa de ensamblador se genera un fichero con el código objeto equivalente al código fuente completo, junto con información necesaria para el montaje.
Tipos de traductores de ensamblador:• Ensamblador cruzado.• Ensamblador residente.• Ensamblador de una fase.• Ensamblador de dos fases.• Ensamblador de una pasada.• Ensamblador de dos pasadas.• Macroensamblador.
Traducción de programas en ensamblador a código máquina en el MC68000
13
Traductores de ensamblador
ENSAMBLADOR CRUZADO
Es un traductor de ensamblador en el cual la máquina de desarrollo y la máquina objetivo tienen diferentes repertorios de instrucciones.
ENSAMBLADOR RESIDENTE
Es un traductor de ensamblador que se ejecutan en la misma máquina para la cual generan el código objeto, es decir, la máquina de desarrollo y la máquina objetivo coinciden (o tienen el mismo repertorio de instrucciones).
Traducción de programas en ensamblador a código máquina en el MC68000
14
Traductores de ensambladorENSAMBLADOR DE UNA FASE
Es un traductor de ensamblador que va leyendo las líneas del programa fuente y las va traduciendo directamente.
Problema: referencias adelantadas:• Las líneas de código con referencia adelantada se retienen en memoria para ser
procesadas más adelante, cuando la referencia sea resuelta.• Para simplificar el diseño del traductor se suelen introducir ciertas restricciones
en cuanto a la aparición de referencias adelantadas.
ENSAMBLADOR DE DOS FASES
Es un traductor de ensamblador que realiza la traducción en dos pasos para resolver el problema de las referencias adelantadas.
Enfoques:• Ensamblador de una pasada.• Ensamblador de dos pasadas.
Traducción de programas en ensamblador a código máquina en el MC68000
15
Ensamblador de dos pasadas
Es un traductor de ensamblador en dos fases que realiza las siguientes tareas:
Primera fase• El traductor lee el programa fuente y se ocupa de construir la tabla de
símbolos, calculando los valores que corresponden a todos los símbolos presentes en el código.
• Al concluir esta fase, la tabla de símbolos está completamente rellena.
Segunda fase• El traductor vuelve a leer el programa fuente y genera el código objeto línea
por línea.• Todos los símbolos han sido ya calculados en la primera fase de ensamblaje,
por tanto el problema de las referencias adelantadas está resuelto.
Comentarios• La implementación de cada una de las fases es bastante sencilla.• Se procesa el código fuente dos veces, por lo que un ensamblador de dos
pasadas es más lento que un ensamblador de una pasada.
Traducción de programas en ensamblador a código máquina en el MC68000
16
3. Ensamblaje y montaje de un programa sin referencias externas
Los traductores de ensamblador leen el programa fuente línea por línea, y dentro de cada una analizan los campos que la componen por separado.
La descomposición de la línea de código fuente en campos es muy sencilla, puesto que éstos se encuentran demarcados por delimitadores.
Las líneas de código fuente pueden ser de varios tipos:• Instrucciones de ensamblador.• Pseudoinstrucciones: se expanden por el traductor en una secuencia de
instrucciones de ensamblador.• Directivas: cada una exige un tratamiento diferenciado.• Comentarios o líneas en blanco: se ignoran.
Traducción de programas en ensamblador a código máquina en el MC68000
17
Ensamblaje y montaje de un programa sin referencias externas: ejemplo ORG $400
BEGIN EQU *MOVE.L #TERMINO,N
CAUX SET 1MOVE.W #CAUX,D0MOVE.W #CAUX,F
CAUX SET 2MOVE.L #CAUX,I
WHILE EQU *MOVE.L I,D7CMP.L N,D7BGT FINMOVE.W F,D1ADD.W D0,FMOVE.W D1,FANTADDQ.L #1,IBRA WHILE
FIN EQU *MOVE.B #9,D0TRAP #15
* Variables y constantesTERMINO EQU 5N DS.L 1F DS.W 1I DC.L 2
END BEGIN
Estudaremos el proceso de traducción y montaje mediante un ejemplo.
•En él supondremos que no es posible utilizar directivas de enlace entre módulos, y por tanto el programa sólo puede constar de un único módulo.
Código fuente del ejemplo:
Traducción de programas en ensamblador a código máquina en el MC68000
18
Ensamblaje sin referencias externas: 1ª pasada
Se realiza la primera fase de la traducción.
Función: construir la tabla de símbolos general.
Supondremos que el módulo no tiene secciones, y que no pueden usarse directivas de enlace entre módulos.
Inicialmente, CDE = 0.
Traducción de programas en ensamblador a código máquina en el MC68000
19
1ª pasada sin referencias externas: ejemplo (I)
Incrementar CDE8#CAUX,FMOVE.W00040E6
2
4
-
2
6
2
6
6
4
6
6
-
10
-
4
-
10
-
-
Tamaño
#15
#9,D0
*
WHILE
#1,I
D1,D0
D0,F
F,D1
FIN
N,D7
I,D7
*
#CAUX,I
2
#CAUX,D0
1
#TERMINO,N
*
$400
Incrementar CDETRAP00044A20
Incrementar CDEMOVE.B00044619
Insertar en TSEQUFIN00044618
Incrementar CDEBRA00044417
Incrementar CDEADDQ.L00043E16
Incrementar CDEMOVE.W00043C15
Incrementar CDEADD.W00043614
Incrementar CDEMOVE.W00043013
Incrementar CDEBGT00042C12
Incrementar CDECMP.L00042611
Incrementar CDEMOVE.L00042010
Insertar en TSEQUWHILE0004209
Incrementar CDEMOVE.L0004168
Modificar el valor de CAUX en TSSETCAUX0004167
Incrementar CDEMOVE.W00040A5
Insertar en TSSETCAUX00040A4
Incrementar CDEMOVE.L0004003
Insertar en TSEQUBEGIN0004002
Modificar CDEORG0000001
AcciónLínea de códigoCDE (hex.)Línea
Traducción de programas en ensamblador a código máquina en el MC68000
20
1ª pasada sin referencias externas: ejemplo (II)
Incrementar CDE42DC.LI00045226
-
2
4
-
-
-
Tamaño
BEGIN
1
1
5
Fin de la primera faseEND00045627
Incrementar CDEDS.WF00045025
Insertar en TSDS.LN00044C24
Insertar en TSEQUTERMINO00044C23
Línea de comentario: se ignora* Variables y constantes00044C22
Línea en blanco: se ignora00044C21
AcciónLínea de códigoCDELínea
250x000450RelativoF
7 (modifica la entrada de línea 4, que insertaba el símbolo con valor 1)
2 (valor final)Redefinible
absolutoCAUX
90x000420RelativoWHILE
180x000446RelativoFIN
235AbsolutoTERMINO
240x00044CRelativoN
Tabla de símbolos del módulo
0x000452
0x000400
Valor del símbolo
26
2
Línea en que se produjo la inserción
RelativoI
Tipo del símboloNombre del símbolo
RelativoBEGIN
Traducción de programas en ensamblador a código máquina en el MC68000
21
1ª pasada sin referencias externas: instrucciones
1. Si existe etiqueta, añadirla a la TS y asignarle el valor del CDE.• Si el símbolo contiene caracteres no válidos, dar un mensaje de error.• Si el símbolo existía previamente en la TS, dar un mensaje de error (salvo que se
permitan etiquetas locales).• Campos de la tabla:
Valor = CDE (el símbolo es implícito).Tipo: relativo.
2. Identificar el código de operación a partir de la tabla de códigos, y determinar la longitud de la instrucción.
• Si el nemotécnico no aparece en la TCO, dar un mensaje de error y pasar a lasiguiente línea de código.
3. Incrementar el CDE con la longitud de la instrucción.
Traducción de programas en ensamblador a código máquina en el MC68000
22
DIRECTIVA ORG
Esta directiva lleva un único operando y normalmente no admite etiqueta.
Efecto: actualizar el CDE con el valor del operando.• Si el valor del operando es menor que el valor actual del CDE, dar un mensaje de error.• El operando puede ser una expresión absoluta sin referencias no resueltas.
DIRECTIVA END
No admite etiqueta.
A veces acepta un único operando.
Efecto: finaliza la primera fase de traducción.
1ª pasada sin referencias externas: directivas (I)
Traducción de programas en ensamblador a código máquina en el MC68000
23
Tipos de símbolosSímbolo implícito: el traductor le asigna automáticamente un valor igual al del
contenido del CDE al traducir el objeto al cual está asociado.
Símbolo explícito: el programador le asigna su valor mediante una directiva específica.
Símbolo reubicable o relativo: su valor se puede alterar en la fase de montaje. Son símbolos reubicables (relativos):
• El valor del contador de dirección de ensamblaje• Los símbolos definidos con EQU y SET cuyos operandos sean relativos.• Las etiquetas de las demás sentencias.
Símbolo absoluto: su valor no se altera en la fase de montaje. Son símbolos absolutos:
• Las constantes numéricas.• Las etiquetas de directivas que hayan sido definidas con EQU y SET cuyos
valores sean absolutos.
Traducción de programas en ensamblador a código máquina en el MC68000
24
ExpresionesLas expresiones pueden ser absolutas o relativas.
Expresiones absolutas válidas:• Formada por cualquier combinación válida de símbolos absolutos.• Expresión relativa – Expresión relativa
Expresiones relativas válidas:• Un símbolo relativo.• Expresión relativa + Expresión absoluta• Expresión relativa - Expresión absoluta• Expresión absoluta + Expresión relativa
Expresiones NO válidas:• Expresión relativa + Expresión relativa• Expresión absoluta - Expresión relativa• Las que contengan símbolos relativos y algún operador distinto de “+” ó “-”.• Cualquier expresión que incluya un símbolo externo definido en otro módulo.
Traducción de programas en ensamblador a código máquina en el MC68000
25
DIRECTIVAS DE RESERVA DE DATOS (DS, DC)
1. Si existe etiqueta, añadirla a la TS y asignarle el valor del CDE.• Si el símbolo contiene caracteres no válidos, dar un mensaje de error.• Si el símbolo existía previamente en la TS, dar un mensaje de error (salvo que se
permitan etiquetas locales).• Campos de la tabla:
Valor = CDE (el símbolo es implícito).Tipo: relativo
2. Determinar la longitud del espacio reservado.• Restricciones en directivas DS:
Una directiva de tipo DS no puede contener referencias no resueltas en el operando: si es el caso, dar un mensaje de error.Se puede exigir que en directivas DS el operando esté definido mediante una expresión absoluta.
3. Incrementar el CDE con la longitud del espacio reservado.
1ª pasada sin referencias externas: directivas (II)
Traducción de programas en ensamblador a código máquina en el MC68000
26
DIRECTIVAS DE DEFINICIÓN DE CONSTANTES: EQU
La etiqueta es obligatoria.
El operando no puede contener referencias adelantadas.• Si es el caso, dar un mensaje de error.
La etiqueta se añade a la TS y se le asigna el valor del operando.• Si el símbolo contiene caracteres no válidos, dar un mensaje de error.• Si el símbolo existía previamente en la TS, dar un mensaje de error.• Si el símbolo contiene alguna referencia no resuelta y no puede calcularse su
valor, dar un mensaje de error.• El símbolo es explícito.• Campos de la tabla:
Valor: el resultante de evaluar la expresión que aparece como operando.Tipo: el mismo que el de la expresión que define el valor del símbolo (absoluta o relativa).
1ª pasada sin referencias externas: directivas (III)
Traducción de programas en ensamblador a código máquina en el MC68000
27
DIRECTIVAS DE DEFINICIÓN DE CONSTANTES REDEFINIBLES: SET
La etiqueta es obligatoria.
El operando no puede contener referencias adelantadas.• Si es el caso, dar un mensaje de error.
La etiqueta se añade a la TS y se le asigna el valor del operando.• Si el símbolo contiene caracteres no válidos, dar un mensaje de error.• Si el símbolo existía previamente en la TS y no era de tipo redefinible, dar un
mensaje de error.• Si el símbolo contiene alguna referencia no resuelta y no puede calcularse su
valor, dar un mensaje de error.• El símbolo es explícito.• Campos de la tabla:
Valor: el resultante de evaluar la expresión que aparece como operando.Tipo: redefinible absoluto o relativo, dependiendo de la expresión que define el valor del símbolo.
1ª pasada sin referencias externas: directivas (IV)
Traducción de programas en ensamblador a código máquina en el MC68000
28
DIRECTIVAS DE ALINEAMIENTO: EVEN
No pueden llevar etiqueta.
Efecto:• Si el valor del CDE está alineado, no surte ningún efecto.• Si el valor del CDE no está alineado, lo alinea al siguiente múltiplo del valor de
alineamiento.
1ª pasada sin referencias externas: directivas (V)
Traducción de programas en ensamblador a código máquina en el MC68000
29
SEGUNDA PASADA
Se realiza la segunda fase de la traducción.
Funciones:• Traducir el código fuente completo.• Generar la tabla de reubicación (TR).• Generar el módulo objeto como un fichero en disco, incluyendo las
tablas anteriores.• Generar un fichero de listado.
Inicialmente, CDE = 0 (el módulo no tiene secciones).
Ensamblaje sin referencias externas: 2ª pasada
Traducción de programas en ensamblador a código máquina en el MC68000
30
2ª pasada sin referencias externas: ejemplo (I)
Generar código33FC 0001 0000 0450#CAUX,FMOVE.W00040E6
4E4F
103C 0009
-
60DA
52B9 0000 0452
3001
D179 0000 0450
3239 0000 0450
6E00 0018
BEB9 0000 044C
2E39 0000 0452
-
23FC 0000 0002 0000 0452
-
303C 0001
-
23FC 0000 0005 0000 044C
-
-
Código máquina generado (hex.)
#15
#9,D0
*
WHILE
#1,I
D1,D0
D0,F
F,D1
FIN
N,D7
I,D7
*
#CAUX,I
2
#CAUX,D0
1
#TERMINO,N
*
$400
Generar códigoTRAP00044A20
Generar códigoMOVE.B00044619
EQU: se ignoraEQUFIN00044618
Generar códigoBRA00044417
Generar códigoADDQ.L00043E16
Generar códigoMOVE.W00043C15
Generar códigoADD.W00043614
Generar códigoMOVE.W00043013
Generar códigoBGT00042C12
Generar códigoCMP.L00042611
Generar códigoMOVE.L00042010
EQU: se ignoraEQUWHILE0004209
Generar códigoMOVE.L0004168
Modificar CAUX en TSSETCAUX0004167
Generar códigoMOVE.W00040A5
Modificar CAUX en TSSETCAUX00040A4
Generar códigoMOVE.L0004003
EQU: se ignoraEQUBEGIN0004002
Generar códigoORG0000001
AcciónLínea de códigoCDE (hex.)Línea
Traducción de programas en ensamblador a código máquina en el MC68000
31
2ª pasada sin referencias externas: ejemplo (II)
Generar dato0000 00022DC.LI00045226
-
XX XX
XX XX XX XX
-
-
-
Código máquina generado (hex.)
BEGIN
1
1
5
Fin de la segunda faseEND00045627
Dejar espacio: 2 octetosDS.WF00045025
Dejar espacio: 4 octetosDS.LN00044C24
EQU: se ignoraEQUTERMINO00044C23
Línea de comentario: se ignora* Variables y constantes00044C22
Línea en blanco: se ignora00044C21
AcciónLínea de códigoCDELínea
Tabla de reubicación (palabras subrayadas en las tablas del código)
4 octetos000438
4 octetos000412
4 octetos00041C
4 octetos000422
4 octetos000428
4 octetos000432
4 octetos000440
Tamaño del objetoDirección del objeto (hex.)
4 octetos000406
Tabla de símbolos del módulo (no visible para el montador)
0x00000450RelativoF
0X00000002(valor final)
Redefinibleabsoluto
CAUX
0x00000420RelativoWHILE
0x00000446RelativoFIN
0x00000005AbsolutoTERMINO
0x0000044CRelativoN
0x00000452
0x00000400
Valor del símbolo
RelativoI
Tipo del símboloNombre del símbolo
RelativoBEGIN
Traducción de programas en ensamblador a código máquina en el MC68000
32
1. Si existe etiqueta, se ignora.
2. Obtener el nemotécnico de la instrucción.
3. Analizar y evaluar los operandos de la instrucción, usando la TS si es preciso.
4. Localizar el código de operación en la tabla de códigos.• Si no existe, se pasa a la siguiente línea sin dar mensaje de error.
5. Determinar los direccionamientos y los tamaños y valores de los operandos.• Si un operando tiene direccionamiento absoluto o inmediato y viene dado por un símbolo o
expresión relativa, incluir una entrada en la TR.
6. Aplicar el tratamiento correspondiente para generar el código binario de la instrucción. • Si los modos de direccionamiento o los tamaños de los operandos son incorrectos, generar el
correspondiente mensaje de error.
7. Incrementar el CDE con la longitud de la instrucción.
2ª pasada sin referencias externas: instrucciones
Traducción de programas en ensamblador a código máquina en el MC68000
33
DIRECTIVA ORG
Efecto: actualizar el CDE con el valor del operando.
DIRECTIVA END
No admite etiqueta.
A veces acepta un único operando.
Efectos:• Finaliza la segunda fase de traducción.• Si existe operando, se evalúa la expresión y se asigna como dirección de arranque
del programa ejecutable.
2ª pasada sin referencias externas: directivas (I)
Traducción de programas en ensamblador a código máquina en el MC68000
34
DIRECTIVAS DE RESERVA DE DATOS (DS, DC)
1. Si existe etiqueta, se ignora.
2. Determinar la longitud del espacio reservado.
3. En directivas DC, generar el código objeto correspondiente al valor inicial de las posiciones de memoria indicadas.
4. Incrementar el CDE con la longitud del espacio reservado.
2ª pasada sin referencias externas: directivas (II)
Traducción de programas en ensamblador a código máquina en el MC68000
35
DIRECTIVAS DE DEFINICIÓN DE CONSTANTES REDEFINIBLES: SET
Se analiza la etiqueta, y se escribe el valor del operando en la TS.
DIRECTIVAS DE DEFINICIÓN DE CONSTANTES: EQU
Se ignoran.
DIRECTIVAS DE ALINEAMIENTO: EVEN, ALIGN
Igual que en la primera fase
2ª pasada sin referencias externas: directivas (III)
Traducción de programas en ensamblador a código máquina en el MC68000
36
Fichero de listado (LST)Contiene información muy valiosa para:• Encontrar e interpretar los errores sintácticos presentes en el programa.• Conocer el código máquina generado por cada instrucción y directiva.
El fichero de listado suele incluir opcionalmente:• La tabla de símbolos privados del módulo.
Un símbolo es privado si está definido en el propio módulo y no es visible desde otros módulos.
• La tabla de símbolos exportables.Un símbolo es exportable si está definido en el propio módulo y es visible desde otros módulos.
• La tabla de símbolos importados.Un símbolo es importado si está definido en un módulo externo y es visible desde nuestro propio módulo.
• La tabla de reubicación.
Existen directivas de ensamblador destinadas a:• Indicar qué información aparece en el fichero de listado.• Formatear el fichero de listado.
Traducción de programas en ensamblador a código máquina en el MC68000
37
MC68000: directivas para listados e informesLIST: incluir información en el fichero de listado.
Sintaxis:LIST
Efecto: a partir de ella se incluye información en el fichero de listado.
NOLIST: interrumpir la inclusión de información en el fichero de listado.Sintaxis:
NOLISTEfecto: a partir de ella se deja de incluir información en el fichero de listado.
FAIL: incluir un mensaje de error en el listado.Sintaxis:
FAIL expresiónEfecto: genera un mensaje de error e imprime el resultado de la expresión como número del error.
Traducción de programas en ensamblador a código máquina en el MC68000
38
MC68000: directivas para listados e informesTITLE (NAME): insertar un título en todas las páginas.
Sintaxis:TITLE
Efecto: se inserta un título en todas las páginas del fichero de listado.
PAGE (SPAGE): saltar de página.Sintaxis:
PAGEEfecto: se inserta un salto de página en el fichero de listado.
SYMBOLS (TABLE): insertar información sobre la tabla de símbolos.Sintaxis:
SYMBOLSEfecto: inserta información de la tabla de símbolos en el fichero de listado, o bien en el código objeto para que aparezca en el fichero de referencias cruzadas.
Traducción de programas en ensamblador a código máquina en el MC68000
39
Fichero de listado (LST)1 000400 ORG $4002 0000 0400 BEGIN EQU *3 000400 23FC 0000 0005 0000 MOVE.L #TERMINO,N
044C 4 0000 0001 CAUX SET 15 00040A 303C 0001 MOVE.W #CAUX,D06 00040E 33FC 0001 0000 0450 MOVE.W #CAUX,F7 0000 0002 CAUX SET 28 000416 23FC 0000 0002 0000 MOVE.L #CAUX,I
0452 9 0000 0420 WHILE EQU *
10 000420 2E39 0000 0452 MOVE.L I,D711 000426 BEB9 0000 044C CMP.L N,D712 00042C 6E00 0018 BGT FIN13 000430 3239 0000 0450 MOVE.W F,D114 000436 D179 0000 0450 ADD.W D0,F15 00043C 3001 MOVE.W D1,D016 00043E 52B9 0000 0452 ADDQ.L #1,I17 000444 60DA BRA WHILE18 0000 0446 FIN EQU *19 000446 103C 0009 MOVE.B #9,D020 00044A 4E4F TRAP #1521 22 * Variables y constantes23 0000 0005 TERMINO EQU 524 00044C N DS 425 000450 F DS 226 000452 0000 0002 I DL 227 000456 END BEGIN
Lines Assembled : 27 Assembly Errors : 0
Traducción de programas en ensamblador a código máquina en el MC68000
40
Montadores y cargadores
El código objeto procedente del traductor normalmente no puede ejecutarse directamente, ya que le suele faltar cierta información que lo impide.
• Código objeto procedente de bibliotecas predefinidas.• Código objeto procedente de la traducción de otros módulos.• Referencias cruzadas entre objetos de diferentes módulos.• Información dependiente del sistema operativo.
El montador se encarga de:• Resolver las referencias entre elementos de varios módulos.• Asignar direcciones a los diferentes módulos del programa.• Buscar las rutinas de biblioteca y añadirlas como módulos objeto.• Unir todos los módulos generando un fichero conteniendo el módulo ejecutable.
Los montadores pueden generar código de dos tipos:• Código absoluto: el montador asignará direcciones absolutas a las instrucciones y
los datos.• Código reubicable: el montador genera un módulo ubicable en diferentes
direcciones de memoria, adjuntando la información necesaria para la reubicación (la tabla de reubicación global).
Traducción de programas en ensamblador a código máquina en el MC68000
41
Montaje del programa ejecutable
Object file
Instructions
Relocationrecords
main:jal ???
···
jal ???
call, subcall, printf
Executable file
main:jal printf
···
jal subprintf:
···
sub:···
Object file
sub:···
C library
print:···
Linker
Traducción de programas en ensamblador a código máquina en el MC68000
42
Fichero de referencias cruzadas (MAP)Contiene información referida a las tareas realizadas por el montador.
El fichero de referencias cruzadas suele incluir:• La dirección de comienzo, dirección de fin y tamaño de cada módulo y de
cada uno de los fragmentos o secciones que lo componen.• La tabla de símbolos exportables de cada módulo.• La tabla de símbolos global.• A veces se incluye la tabla de símbolos privada de cada módulo.
Existen directivas de ensamblador destinadas a:• Indicar qué información aparece en el fichero de referencias cruzadas.• Formatear el fichero de referencias cruzadas.
Traducción de programas en ensamblador a código máquina en el MC68000
43
Montaje: ejemploEn este ejemplo, la tarea del montador es sencilla, ya que sólo hay un
módulo:
1. Determinar la dirección de carga del módulo.• La dirección de carga se puede especificar en la orden de montaje.• Si la dirección de carga no se especifica en la orden de montaje, se asume que es
la especificada en el fichero objeto.
2. Reubicar las direcciones y operandos relativos del módulo mediante la TR sumando la dirección de carga.
• El montador no recibe la TS, porque puede contener símbolos privados que no deben ser visibles.
3. Escribir en disco un fichero ejecutable y un fichero de referencias cruzadas (MAP).
En el ejemplo supondremos que en la orden de montaje se especifica la dirección de carga $001000.
Traducción de programas en ensamblador a código máquina en el MC68000
44
Global Symbol Name Global Value
BEGIN 001400CAUX 000002F 001450FIN 001446I 001452N 00144CTERMINO 000005WHILE 001420
******************************************************************************* L O A D M A P ******************************************************************************** Section Name Starting Address Ending Address Size ******************************************************************************** EJ1.OBJ ** CODE 001400 00144B 00004C ** 001452 001455 000004 *******************************************************************************
Linker Output Filename : ej1.recDisk Listing Filename : ej1.map
Link Errors : 0 Output Format : Motorola S28
Fichero MAP
Traducción de programas en ensamblador a código máquina en el MC68000
45
Código reubicado: ejemplo
XX XX XX XX1DS.LN00144C
XX XX1DS.WF001450
0000 00022DC.LI001452
-BEGINEND001456
4E4F#15TRAP00144A
Reubicado 2º operando33FC 0001 0000 1450#1,FMOVE.W00140E
103C 0009
60DA
52B9 0000 1452
3001
D179 0000 1450
3239 0000 1450
6E00 0018
BEB9 0000 144C
2E39 0000 1452
23FC 0000 0002 0000 1452
303C 0001
23FC 0000 0005 0000 144C
Código máquina generado (hex.)
#9,D0
WHILE
#1,I
D1,D0
D0,F
F,D1
FIN
N,D7
I,D7
#2,I
#1,D0
#5,N
MOVE.BFIN001446
BRA001444
Reubicado 2º operandoADDQ.L00143E
MOVE.W00143C
Reubicado 2º operandoADD.W001436
Reubicado 1er operandoMOVE.W001430
BGT00142C
Reubicado 1er operandoCMP.L001426
Reubicado 1er operandoMOVE.LWHILE001420
Reubicado 2º operandoMOVE.L001416
MOVE.W00140A
Reubicado 2º operandoMOVE.LBEGIN001400
AcciónLínea de códigoDirección final (hex.)
El montador no tiene constancia de que existan etiquetas (se muestran para ayudar)
Traducción de programas en ensamblador a código máquina en el MC68000
46
Fichero ejecutableContiene información necesaria y suficiente para cargar en memoria y ejecutar
un programa.
La estructura de un fichero ejecutable puede ser similar a la de un fichero objeto, con la diferencia de que el ejecutable no puede contener referencias sin resolver.
• Excepción: programas para sistemas operativos capaces de gestionar bibliotecas dinámicas.
Ciertos formatos de programas ejecutables se estructuran en bloques con:• Cabecera• Dirección de carga.• Tamaño.• Código y/o datos.• Información redundante de paridad.
Si el programa va a ser depurado mediante una herramienta adecuada, necesita información extra.
• Esta información puede estar grabada en el propio ejecutable o en un fichero aparte.
Traducción de programas en ensamblador a código máquina en el MC68000
47
Formato de registros S28• Este es un fichero de texto legible.• Lo normal es que los ejecutables no sean legibles con editores de texto.
S21400140023FC000000050000144C303C000133FCB7S21400141000010000145023FC0000000200001452DBS2140014202E3900001452BEB90000144C6E0000188DS214001430323900001450D17900001450300152B9EES2100014400000145260DA103C00094E4F09S208001452000000028FS804001400E7
Código ejecutable
Tipo delregistro
Tamaño del registro
Dirección Código
Paridad