traducción de programas en ensamblador a código máquina

24
Universidad Rey Juan Carlos ESTRUCTURA Y TECNOLOG ESTRUCTURA Y TECNOLOGÍ A DE A DE COMPUTADORES COMPUTADORES Traducción de programas en ensamblador a código máquina en el MC68000 Luis Rincón Córcoles Licesio 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

Upload: truongduong

Post on 12-Feb-2017

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Traducción de programas en ensamblador a código máquina

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

Page 2: Traducción de programas en ensamblador a código máquina

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

Page 3: Traducción de programas en ensamblador a código máquina

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.

Page 4: Traducción de programas en ensamblador a código máquina

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.

Page 5: Traducción de programas en ensamblador a código máquina

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

Page 6: Traducción de programas en ensamblador a código máquina

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.

Page 7: Traducción de programas en ensamblador a código máquina

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.

Page 8: Traducción de programas en ensamblador a código máquina

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.

Page 9: Traducción de programas en ensamblador a código máquina

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.

Page 10: Traducción de programas en ensamblador a código máquina

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

Page 11: Traducción de programas en ensamblador a código máquina

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)

Page 12: Traducción de programas en ensamblador a código máquina

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.

Page 13: Traducción de programas en ensamblador a código máquina

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)

Page 14: Traducción de programas en ensamblador a código máquina

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)

Page 15: Traducción de programas en ensamblador a código máquina

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

Page 16: Traducción de programas en ensamblador a código máquina

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

Page 17: Traducción de programas en ensamblador a código máquina

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)

Page 18: Traducción de programas en ensamblador a código máquina

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.

Page 19: Traducción de programas en ensamblador a código máquina

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.

Page 20: Traducción de programas en ensamblador a código máquina

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).

Page 21: Traducción de programas en ensamblador a código máquina

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.

Page 22: Traducción de programas en ensamblador a código máquina

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

Page 23: Traducción de programas en ensamblador a código máquina

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.

Page 24: Traducción de programas en ensamblador a código máquina

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