23
Universidad Rey Juan Carlos ESTRUCTURA Y TECNOLOG ESTRUCTURA Y TECNOLOGÍ A DE A DE COMPUTADORES COMPUTADORES Introducción a la programación en ensamblador del MC68000 Luis Rincón Córcoles Licesio J. Rodríguez-Aragón Introducción a la programación en ensamblador del MC68000 2 1. Introducción. 2. Directivas básicas de los ensambladores para MC68000. 3. MC68000 y las operaciones con bits. 4. MC68000 y los tipos de datos simples. 5. MC68000 y las variables simples. 6. MC68000 y la evaluación de expresiones aritméticas. 7. MC68000 y la evaluación de expresiones booleanas. 8. MC68000 y las sentencias de control. Programa

ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Embed Size (px)

Citation preview

Page 1: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Universidad

Rey Juan Carlos

ESTRUCTURA Y TECNOLOGESTRUCTURA Y TECNOLOGÍÍA DE A DE COMPUTADORESCOMPUTADORES

Introducción a la programación

en ensamblador del MC68000

Luis Rincón CórcolesLicesio J. Rodríguez-Aragón

Introducción a la programación en ensamblador del MC68000

2

1. Introducción.

2. Directivas básicas de los ensambladores para MC68000.

3. MC68000 y las operaciones con bits.

4. MC68000 y los tipos de datos simples.

5. MC68000 y las variables simples.

6. MC68000 y la evaluación de expresiones aritméticas.

7. MC68000 y la evaluación de expresiones booleanas.

8. MC68000 y las sentencias de control.

Programa

Page 2: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

3

D.A. PATTERSON, J.L HENNESSY. Estructura y diseño de computadores.Reverté, 2000.

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

1993F.G. McCABE. High-Level Programmer’s Guide to the 68000. Prentice-Hall, 1992.

Bibliografía

Introducción a la programación en ensamblador del MC68000

4

1. Introducción

Hasta ahora hemos estudiado los fundamentos del lenguaje ensamblador:• Repertorios de instrucciones.• Modos de direccionamiento.• Directivas de ensamblador.• Herramientas de traducción de programas.• Proceso de creación de un programa.

Ahora vamos a estudiar los fundamentos de la programación en ensamblador:• Uso de las directivas más habituales.• Manejo de bits individuales y datos simples.• Evaluación de expresiones aritméticas y booleanas.• Implementación de estructuras de control.

Más adelante trataremos conceptos más avanzados:• Implementación y manejo de estructuras de datos.• Gestión de subrutinas.• Bibliotecas de subprogramas.• Etc.

Page 3: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

5

Introducción

Los objetivos perseguidos son:• Aprender a programar en ensamblador.• Aprender cómo generan código los compiladores.

Los lenguajes de programación de alto nivel habitualmente no definen en sus estándares los tamaños exactos de los datos (al menos de los datos numéricos).

• Normalmente el entero base coincide en tamaño con la palabra del computador.• Diferentes compiladores del mismo lenguaje en una misma máquina manejan

tamaños de datos que pueden no coincidir.

Los computadores convencionales entienden los datos como ristras de bits:• El ensamblador no es un lenguaje tipado.• Ciertas instrucciones distinguen entre enteros con signo y enteros sin signo.• Instrucciones específicas para coma flotante de precisión simple o doble.• Algunas máquinas tienen instrucciones para vectores o tiras de caracteres.

Introducción a la programación en ensamblador del MC68000

6

IntroducciónMC68000: máquina de 16 bits.

• Se tomarán como base los tipos de TurboPascal y de TurboC.• Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de

16 bits.

Las implementaciones de las estructuras de control pueden realizarse mediante diferentes secuencias de código máquina.

• La secuencia concreta en código máquina es indiferente mientras el programa en alto nivel funcione correctamente.

Por otra parte, compiladores diferentes generan secuencias de instrucciones de máquina diferentes dependiendo de:

• Los convenios adoptados:Comprobaciones de la corrección de los cálculos.Ubicación y gestión de variables.Gestión de subprogramas.

• Las optimizaciones de código realizadas.

Page 4: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

7

2. Directivas básicas en MC68000

1. Manipulación del contador de dirección de ensamblaje.

2. Definición de símbolos explícitos.

3. Reserva de espacio en memoria (definición de variables).

4. Fin de traducción.

5. Alineamiento.

6. Inclusión de ficheros.

Introducción a la programación en ensamblador del MC68000

8

MC68000: contador de dirección de ensamblajeEl 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)

El valor del CDE puede ser modificado a voluntad mediante la directiva ORG.

Sintaxis:ORG valor

Efecto: CDE = valor.

El nuevo valor asignado al CDE no debería ser inferior a su valor actual.

Page 5: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

9

MC68000: símbolos explícitosLa directiva EQU sirve para definir un símbolo explícito cuyo valor permanece

constante a lo largo del programa:

Sintaxis:SIMB EQU valor

Efecto: se inserta SIMB en la tabla de símbolos, con el valor especificado.

Una vez definido un símbolo mediante EQU, dicho símbolo no puede ser redefinido.

EQU se utiliza para definir constantes (igual que CONST en PASCAL).

En directivas EQU no se permiten referencias adelantadas.

.........

Valor del símboloTipo del símboloNombre del símbolo

.........

valorEQUSIMB

Introducción a la programación en ensamblador del MC68000

10

La directiva SET sirve para definir un símbolo explícito redefinible.• No se permiten referencias adelantadas.

Sintaxis:SIMB SET valor1

Efecto: se inserta SIMB en la tabla de símbolos, con el valor especificado.

Una vez definido un símbolo mediante SET, dicho símbolo puede ser redefinido tantas veces como se quiera únicamente mediante otras directivas SET.SIMB SET valor2

.........

Valor del símboloTipo del símboloNombre del símbolo

.........

valor1SETSIMB

.........

Valor del símboloTipo del símboloNombre del símbolo

.........

valor2SETSIMB

MC68000: símbolos explícitos

Page 6: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

11

Variables en un programa

En un programa de computador, una variable es un espacio en memoria utilizado para almacenar un dato cuyo valor puede ser modificado a lo largo del programa.

Tipos de variables:• Estáticas: creadas al inicio del programa, existen mientras el programa se

encuentra en ejecución.• Locales: propias de procedimientos y funciones, existen mientras se

ejecuta el procedimiento o función al que pertenecen.Se crean cuando arranca el procedimiento o función, y se destruyen en el momento en que éste termina de ejecutarse.

• Dinámicas: creadas a lo largo de la ejecución del programa, su existencia no está ligada (en sentido estricto) a la ejecución de ningún procedimiento o función.

Son creadas y destruidas mediante el gestor de memoria dinámica, perteneciente al sistema operativo.

Introducción a la programación en ensamblador del MC68000

12

Variables en un programa

Las variables estáticas ocupan espacio en el código objeto.

Una variable estática recibe un nombre que se asocia a la dirección que ocupa dentro de la zona de datos.

Ejemplo (PASCAL)

PROGRAM P (input, output);

VARV: INTEGER;

...

...

MemoriaDirecciones

...

Espacio ocupado por la variable V????dir (asociado al nombre V)

Page 7: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

13

Variables en un programa

El valor de una variable puede modificarse una o varias veces a lo largo del programa.

Ejemplo (PASCAL)

V := 5;

V := V+3;

Las directivas para reserva de espacio en memoria se suelen emplear para definir variables estáticas.

......

5dir (asociado al nombre V)

......

MemoriaDirecciones

......

8dir (asociado al nombre V)

......

MemoriaDirecciones

Introducción a la programación en ensamblador del MC68000

14

La directiva DS (Define Storage) reserva un espacio en memoria sin asignarle un valor inicial determinado.

Sintaxis:(suponemos que CDE = d)

[ETIQ] DS.t n Reserva n datos de tamaño t (t=B, W ó L)(ahora CDE = d+t*n, siendo t el tamaño de cada dato)

Efecto: se reservan en memoria n*t octetos para variables.

La etiqueta es opcional, y si existe se inserta en la tabla de símbolos como un símbolo implícito (tipo LABEL).

En esta directiva no se permiten referencias adelantadas.

...d+t*n

MemoriaDirecciones

...

Espacio reservado: t*n octetos????d (asociado al nombre ETIQ si existe la etiqueta)

MC68000: reserva de espacio en memoria

Page 8: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

15

La directiva DC (Define Constant) reserva un espacio en memoria asignándole un valor inicial determinado.

• El nombre es confuso, porque en realidad define una variable (espacio en memoria).

Sintaxis:(suponemos que CDE = d)

[ETIQ] DC.t val Reserva un dato de tamaño t (t=B, W ó L)(ahora CDE = d+t, siendo t el tamaño del dato reservado)

Efecto: se reserva en memoria un dato de t bytes para una variable, y se le asigna un valor inicial.

La etiqueta es opcional, y si existe se inserta en la tabla de símbolos como un símbolo implícito (tipo LABEL).

...d+t

MemoriaDirecciones

...

Espacio reservado: t octetosvald (asociado a ETIQ si hay etiqueta)

MC68000: reserva de espacio en memoria

Introducción a la programación en ensamblador del MC68000

16

Para abreviar, con DC se pueden definir varias variables, todas ellas del mismo tamaño, separando sus valores por comas.

• La etiqueta, si existe, se asocia únicamente al primer dato de la lista.

(suponemos que CDE = d)[ETIQ] DC.t val1,val2,val3,...,valN

(ahora CDE = d+t*N, siendo t el tamaño de cada dato)

t octetosval3d+2*t (asociado a ETIQ+2*t si hay etiqueta)

t octetosvalNd+t*(N-1) (asociado a ETIQ+(N-1)*t si hay etiqueta)

t octetosval2d+t (asociado a ETIQ+t si hay etiqueta)

......

...d+t*N

MemoriaDirecciones

...

t octetosval1d (asociado a ETIQ si hay etiqueta)

MC68000: reserva de espacio en memoria

Page 9: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

17

La directiva END indica al traductor que ha llegado el final del programa fuente, y que no debe seguir traduciendo.

• Lo que vaya detrás de una directiva END se ignora.

Sintaxis:END [dir]

Efecto: la traducción del programa finaliza.

Cuando lleva un operando, esta directiva se usa para indicar la dirección de comienzo del programa principal (o la etiqueta de la primera instrucción que queremos ejecutar al iniciar el programa, si la tiene).

MC68000: directiva de fin de traducción

Introducción a la programación en ensamblador del MC68000

18

En las máquinas con restricciones de alineamiento, la definición de variables en posiciones indebidas puede dar lugar a errores de ejecución de los programas.

A veces los traductores realizan el alineamiento de los objetos correctamente a fin de evitar dichos errores de ejecución.

En el MC68000 se usa la directiva EVEN para alinear en una posición par el objeto que se encuentra inmediatamente a continuación de la directiva.

Sintaxis:EVEN

Efecto: si el CDE tiene valor impar, le suma 1; en caso contrario no tiene efecto ninguno.

MC68000: directivas de alineamiento

Page 10: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

19

3. MC68000 y las operaciones con bits

Dependiendo de su tipo de datos, las variables utilizadas en los programas pueden tener diferentes tamaños.

• En general el tamaño mínimo de una variable es un octeto.

En ocasiones es preciso actuar sobre bits concretos de un operando, obviando sus bits restantes.

Existen computadores que disponen de instrucciones que permiten acceder a: • Un bit concreto de un operando (sin acceder al resto).• Un subconjunto (campo) de varios bits contiguos del operando.

El MC68000 dispone de instrucciones de acceso a bit:• BCLR: pone a 0 un bit del operando destino.• BSET: pone a 1 un bit del operando destino.• BCHG: invierte un bit del operando destino.• BTST: testea un bit del operando destino y afecta al bit Z del CCR.

El MC68000 no tiene instrucciones que manejen campos de bits, aunque otros procesadores de la familia sí disponen de ellas (del MC68020 en adelante).

Introducción a la programación en ensamblador del MC68000

20

MC68000 y las operaciones con bitsUna máscara de bits se puede entender como un dato binario (normalmente

constante) que permite actuar selectivamente sobre ciertos bits de otro dato a través de una operación lógica (AND, OR, EOR).

Convenientemente utilizadas, las máscaras de bits pueden emplearse para actuar sobre subconjuntos de bits (no necesariamente contiguos) de un operando.

• Poner bits a 0: AND máscara,dato• Poner bits a 1: OR máscara,dato• Invertir bits: EOR máscara,dato

Si la máscara es constante, se almacena en un dato inmediato.

Si la máscara es variable, debe almacenarse en un registro o variable dememoria.

Las máscaras pueden escribirse en cualquier base de numeración.• Lo normal es usar base binaria o hexadecimal.

Page 11: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

21

MC68000 y las operaciones con bitsAND máscara,dato: permite poner a 0 un conjunto de bits de un dato, dejando

inalterados los restantes.• Ejemplo: borrar los bits 2, 3, 5 y 7 del registro D2, dejando intactos los demás

ANDI.B #%10010011,D2

OR máscara,dato: permite poner a 1 un conjunto de bits de un dato, dejando inalterados los restantes.

• Ejemplo: poner a 1 los bits 1, 2 y 4 del registro D1, dejando intactos los demás

ORI.B #%00010110,D3

EOR máscara,dato: permite invertir un conjunto de bits de un dato, dejando inalterados los restantes.

• Ejemplo: invertir los bits 4, 5, 6 y 7 del registro D4, dejando intactos los demás

EORI.B #%11110000,D4

Introducción a la programación en ensamblador del MC68000

22

MC68000 y las operaciones con bitsLas máscaras pueden emplearse en datos de cualquier tamaño:

• Ejemplo: ANDI.L #$00FFFFFF,D5 pone a 0 los 8 bits superiores de D5.

Las operaciones AND, OR y EOR afectan a los biestables Z y N del CCR, y ponen a 0 los bits V y C.

• Tras usarlas es posible tomar decisiones mediante instrucciones condicionales.• Condiciones susceptibles de ser utilizadas: EQ, NE, PL y MI.

Las máscaras pueden emplearse para realizar tareas tan complejas como se desee.

Page 12: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

23

4. MC68000 y los tipos de datos simples

El MC68000 considera tres tipos de datos según su tamaño: .B, .W y .L.

A nivel de máquina, el MC68000 considera que los datos que maneja son numéricos, o a lo sumo ristras de bits.

• A veces se distingue entre datos en binario puro (unsigned) o en complemento a 2 (signed).

• Hay algunas instrucciones que usan operandos codificados en BCD.• No existe un tipo específico para caracteres, ni tampoco para datos booleanos.

El MC68000 no maneja datos en coma flotante, salvo que cuente con un coprocesador 68881 asociado.

Vamos a estudiar la correspondencia entre los tipos de datos simples en TurboPascal y su definición y manejo en el MC68000.

Introducción a la programación en ensamblador del MC68000

24

MC68000 y los tipos de datos simplesEquivalencia de tipos en TurboPascal, TurboC y MC68000 (máquina de 16 bits):

Puntero

Booleano

Carácter

Entero con signo 32 bits

Entero con signo 16 bits

Entero con signo 8 bits

Entero sin signo 32 bits

Entero sin signo 16 bits

Entero sin signo 8 bits

Comentarios

Xunsigned int

unsigned shortWORD

Xunsigned longNo existe

^Tipo

BOOLEAN

CHAR

LONGINT

INTEGER

SHORTINT

BYTE

Turbo Pascal

Tipo *

?

charsigned char

unsigned char

long

int, short

signed char

unsigned char

TurboC

X

X

X

X

X

X

X

.L.W.B

No se han considerado datos en BCD ni en coma flotante

Page 13: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

25

MC68000 y los tipos de datos simples

Las variables de los programas se ubicarán en memoria.

Los registros de datos del MC68000 se utilizarán generalmente para almacenar resultados intermedios de cálculos.

Los registros de direcciones del MC68000 servirán como punteros temporales a variables o estructuras de datos residentes en memoria.

El acceso a datos almacenados en memoria es notablemente más lento que el acceso a datos ubicados en registros.

Mantener variables en registros aumenta la velocidad de ejecución y disminuye el tamaño de las instrucciones, pero el MC68000 hay muy pocos registros.

• Se puede complicar mucho la gestión de variables (los compiladores hacen mejor esta tarea que los programadores).

Introducción a la programación en ensamblador del MC68000

26

5. MC68000 y las variables simples

Analizaremos la definición y el manejo de los tipos de datos simples del lenguaje PASCAL (en la implementación de TurboPascal) trasladados al lenguaje ensamblador del MC68000.

Se analizarán los siguientes tipos:

• Entero con signo de 8 bits: SHORTINT, signed char.

• Entero con signo de 16 bits: INTEGER, int, short.

• Entero con signo de 32 bits: LONGINT, long.

• Carácter de 8 bits: CHAR, char.

• Booleano de 1 bit: BOOLEAN.

• Puntero de 32 bits.

Page 14: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

27

MC68000 y los enteros con signo

LONGINT

INTEGER

SHORTINT

Turbo Pascal

long

int, short

signed char

C

Entero con signoX

Entero con signoX

Entero con signoX

Comentarios.L.W.B

* Definición de variables SHORTINTAS DC.B -5 Valor inicial: -5BS DC.B 20 Valor inicial: 20CS DC.B $80 Valor inicial: –128DS DC.B $7F Valor inicial: 127ES DS.B 1 Valor inicial indeterminado* Definición de variables INTEGERAI DC.W -5 Valor inicial: -5BI DC.W 20 Valor inicial: 20CI DC.W $8000 Valor inicial: –32768DI DC.W $7FFF Valor inicial: 32767EI DS.W 1 Valor inicial indeterminado* Definición de variables LONGINTAL DC.L -5 Valor inicial: -5BL DC.L 20 Valor inicial: 20CL DC.L $80000000 Valor inicial: –2147483648DL DC.L $7FFFFFFF Valor inicial: 2147483647EL DS.L 1 Valor inicial indeterminado

Introducción a la programación en ensamblador del MC68000

28

MC68000 y los enteros con signoSuma y resta

• Instrucciones: ADD y SUB (o derivados).• Condiciones para enteros con signo:GT, GE, LT, LE, PL, MI, EQ, NE, VS, VC.

Producto: instrucción MULS.• Operandos fuente: 16 bits (tipo INTEGER de TurboPascal)

•Resultado: 32 bits (tipos LONGINT en TurboPascal)

División: instrucción DIVS.• Dividendo: 32 bits (tipo LONGINT en TurboPascal).• Divisor y cociente: 16 bits (tipo INTEGER de TurboPascal)

•Resto: 16 bits en mitad superior (para usarlo como un dato de tipo INTEGER hay que intercambiar antes las dos mitades del registro resultado con SWAP).

Extensión de signo: EXT.• No se puede hacer extensión de signo de 8 a 32 bits directamente.

EXT.W D0 Extensión de signo de 8 bits a 16 sobre D0EXT.L D0 Extensión de signo de 16 bits a 32 sobre D0

Cambio de signo: instrucción NEG (un solo operando).

Page 15: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

29

MC68000 y los enteros con signo

sf opdbf Dn,etiqueta / dbra Dn,etiquetaF (false)Falso

st opdbt Dn,etiqueta

sgt opbgt etiquetadbgt Dn,etiqueta

sge opbge etiquetadbge Dn,etiqueta

sne opbne etiquetadbne Dn,etiqueta

seq opbeq etiquetadbeq Dn,etiqueta

sle opble etiquetadble Dn,etiqueta

slt opblt etiquetadblt Dn,etiqueta

Instrucciones

GT (greater than)Mayor que

GE (greater or equal than)Mayor o igual que

EQ (equal)Igual que

NE (not equal)Distinto a

LE (less or equal than)Menor o igual

T (true)Cierto

LT (less than)Menor que

NemotécnicoCondición

Introducción a la programación en ensamblador del MC68000

30

MC68000 y las variables carácter

CHAR

Turbo Pascal

char - signed char - unsigned char

C

CarácterX

Comentarios.B

Correspondencia caracteres - enteros: un carácter se corresponde con el ordinal que tiene asignado en su código de representación.

• Ordinal en PASCAL: función ORD (devuelve un número en binario puro).• Ordinal en C: número con signo (dato unsigned char) o sin signo (signed char).

En C los enteros y los caracteres pueden intercambiarse: los caracteres son enteros de 8 bits con o sin signo.

* Definición de variables CHARC1 DC.B ‘A’ Asignado el carácter ‘A’C2 DC.B ‘a’ Asignado el carácter ‘a’C3 DC.B $9A Asignado el carácter con ordinal 154C4 DC.B %10011010 Asignado el carácter con ordinal 154C5 DC.B 20 Asignado el carácter con ordinal 20C6 DC.B ‘A’+3 Asignado el carácter ‘D’C7 DS.B 1 Sin valor inicial asignado

En ensamblador (como en C) los caracteres se pueden utilizar en operaciones aritméticas como números enteros de 8 bits con o sin signo.

Page 16: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

31

MC68000 y las variables booleanas

Para almacenar una variable booleana es suficiente con un bit, pero en el MC68000 las variables ocupan un mínimo de 8 bits.

Se pueden definir las siguientes constantes:TRUE EQU 1FALSE EQU 0

* Definición de variables booleanasA DC.B TRUE Asignado valor 1 (TRUE)B DC.B FALSE Asignado valor 0 (FALSE)C DC.B 1 Asignado valor 1 (TRUE)D DS.B 1 Sin valor inicial asignado

Booleano

Tipo

1 bit

MIPS

BOOLEAN

Pascal

?

C

Introducción a la programación en ensamblador del MC68000

32

MC68000 y las variables booleanasEn lenguaje C no existen variables booleanas, ya que todos los datos los

maneja como cantidades numéricas (igual que el lenguaje ensamblador).

El lenguaje C sí tiene operadores booleanos para realizar operaciones lógicas.• AND lógico bit a bit: &• OR lógico bit a bit: |• OR exclusivo bit a bit: ^• Negación lógica bit a bit:! • Comparaciones: =, !=, >, <, >=, <=

Evaluación booleana de un dato en C:• Si el dato tiene todos sus bits a 0 se considera que es falso.• Si el dato tiene uno o más bits distintos de 0 se considera que es cierto.

Esto concuerda con la instrucción Scond operando del MC68000:• Si cond es cierta, operando toma el valor $FF (tamaño octeto, todos los bits a 1).• Si cond es falsa, operando toma el valor $00 (tamaño octeto, todos los bits a 0).

Page 17: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

33

MC68000 y los punteros

En los lenguajes de alto nivel, los punteros son un concepto abstracto en cuanto a que no se especifican sus características ni su rango válido de valores.

Físicamente, un puntero es un valor numérico que no contiene un dato en sí, sino la dirección de una variable que está ubicada en memoria.

En lenguaje PASCAL el uso de los punteros está muy limitado.• Asignaciones• Comparaciones de igualdad.• Creación o borrado dinámico de una variable apuntada por un puntero (S.O.).

En C los punteros se pueden usar en expresiones aritméticas como los enteros.

En el MC68000 la noción de puntero variable coincide con la de registro de direcciones.

• Los registros de direcciones se pueden usar en operaciones aritméticas.

Los punteros pueden tener 16 bits o preferentemente 32 bits.

Introducción a la programación en ensamblador del MC68000

34

6. MC68000 y las expresiones aritméticas

Las expresiones aritméticas se pueden evaluar mediante el modelo de notación polaca inversa con la ayuda de una pila.

• En el MC68000 la pila de evaluación se puede sustituir total o parcialmente por los registros de datos.

Expresión en PASCAL con variables enteras: x:=(x*y+z*z) DIV (x-y);

Expresión en C con variables enteras: x=(x*y+z*z)/(x-y);

Evaluación de la expresión en ensamblador:MOVE.W X,D7 xMULS Y,D7 x*yMOVE.W Z,D6 zMULS D6,D6 z*zADD.W D6,D7 x+y+z*zMOVE.W X,D6SUB.W Y,D6 x-yEXT.L D7DIVS D6,D7 valor en D7MOVE.W D7,X valor almacenado en x

Page 18: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

35

MC68000 y las expresiones aritméticasMOVE.W X,D7 xMULS Y,D7 x*yCMPI.L #$0000FFFF,D7BHI DESBORDEMOVE.W D7,D0EOR.W X,D0EOR.W Y,D0BTST #15,D0BNE DESBORDEMOVE.W Z,D6 zMULS D6,D6 z*zCMPI.L #$0000FFFF,D7BHI DESBORDEMOVE.W D7,D0EOR.W X,D0EOR.W Y,D0BTST #15,D0BNE DESBORDEADD.W D6,D7 x+y+z*zBVS DESBORDEMOVE.W X,D6SUB.W Y,D6 x-yBVS DESBORDEBEQ DIV_0EXT.L D7DIVS D6,D7 valor en D7BVS DESBORDEMOVE.W D7,X valor almacenado en x

Los compiladores de PASCAL generan código para comprobar posibles desbordamientos en cálculos o en índices, no así los de C.

Expresión en PASCAL con variables enteras: x:=(x*y+z*z) DIV (x-y);

Expresión en C con variables enteras:x=(x*y+z*z)/(x-y);

Introducción a la programación en ensamblador del MC68000

36

7. MC68000 y las expresiones booleanasAl igual que las expresiones aritméticas, las expresiones booleanas se pueden

evaluar mediante el modelo de notación polaca inversa.

Expresión en PASCAL con variables: zb := (x > y) AND (NOT xb OR yb);• xb, yb y zb son variables booleanas; x e y son variables INTEGER.• FALSE: dato con todos sus bits a 0.• TRUE: dato con uno o varios bits a 1, preferentemente igual a $FF.• Expresión en C (todas las variables enteras): zb = (x > y) && (!xb || yb);

MOVE.W X,D7 xCMP.W Y,D7 Comparar x con ySGT D7 Resultado parcial en zbTST.B XB xbSNE D6NOT.B D6 NOT xbTST.B YB ybSNE D5OR.B D5,D6 NOT xb OR ybAND.B D6,D7 Resultado final en D7MOVE.B D7,ZB Resultado final en zb

Page 19: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

37

MC68000 y las expresiones booleanasLas expresiones se pueden evaluar mediante cortocircuito: puede ser que el

resultado final se conozca sin necesidad de evaluar la expresión completamente.

PASCAL: zb := (x > y) AND (NOT xb OR yb);(xb, yb y zb son variables booleanas; x e y son variables INTEGER)

C: zb = (x > y) && (!xb || yb);(Se asume que todas las variables son enteras)

MOVE.W X,D7 xCMP.W Y,D7 Comparar x con ySGT D7 Resultado parcial en D7BLE FIN CortocircuitoMOVE.B XB,D7 xbSNE D7NOT.B D7 NOT xbBNE FIN CortocircuitoTST.B YB Testear ybSNE D7 Resultado final en D7

FIN MOVE.B D7,ZB Resultado final en zb

Introducción a la programación en ensamblador del MC68000

38

8. MC68000 y las sentencias de control

Analizaremos las sentencias de control sencillas del lenguaje PASCAL trasladadas al lenguaje ensamblador del MC68000.

Se analizarán las siguientes sentencias de control:

• Selección IF - THEN.

• Selección IF - THEN - ELSE.

• Bucle REPEAT - UNTIL.

• Bucle WHILE - DO.

• Bucle FOR - TO.

• Bucle FOR - DOWNTO.

Page 20: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

39

MC68000: sentencia IF - THEN

¿COND?

BLOQUE_THEN

FALSA

CIERTA

Ensamblador MC68000:

IF EQU *MOVE.W X,D7CMP.W Y,D7BLT FINADDQ.W #2,XSUBQ.W #2,Y

FIN EQU *

PASCAL (variablesenteras):

IF x >= yTHEN

BEGINx := x+2;y := y-2;

END;

C (variables enteras):

if (x >= y) {x = x+2;y = y-2;

};

Introducción a la programación en ensamblador del MC68000

40

MC68000: sentencia IF - THEN - ELSE

Ensamblador MC68000:

IF EQU *MOVE.W X,D7CMP.W Y,D7BGE THEN

ELSE SUBQ.W #2,XSUBQ.W #2,YBRA FIN

THEN ADDQ.W #2,XADDQ.W #2,Y

FIN EQU *

¿COND?

BLOQUE_ELSE

CIERTA

FALSA

BLOQUE_THEN

PASCAL(variables enteras):

IF x >= yTHEN

BEGINx := x+2;y := y+2;

END;ELSE

BEGINx := x-2;y := y-2;

END;

C (variables enteras):

if (x >= y) {x = x+2; y = y+2;

}else {

x = x-2; y = y-2;}

Page 21: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

41

MC68000: sentencia REPEAT - UNTIL

Ensamblador MC68000:

MOVE.W #81,AMOVE.W #18,B

REPEAT EQU *MOVE.W B,MCDCLR.L D7MOVE.W A,D7DIVS B,D7SWAP D7MOVE.W D7,RESTOMOVE.W B,AMOVE.W RESTO,B

UNTIL TST.W RESTOBNE REPEAT

FIN EQU *

¿COND?

BLOQUE_REPEAT

FALSA

CIERTA

Algoritmo del ejemplo: cálculo del máximo común divisor.

PASCAL (variables enteras):a := 81;b := 18;REPEAT

mcd := b;resto := a MOD b;a := b;b := resto;

UNTIL resto = 0;

C (variables enteras):a = 81;b = 18;do {mcd = b;resto = a % b;a = b;b = resto;

} while (resto <> 0);

Introducción a la programación en ensamblador del MC68000

42

MC68000: sentencia WHILE - DOEnsamblador MC68000:

MOVE.W #5,NMOVE.W #1,FANTMOVE.W #1,FMOVE.W #2,I

WHILE EQU *MOVE.W I,D7CMP.W N,D7BGT FINMOVE.W F,FAUXMOVE.W FANT,D6ADD.W D6,FMOVE.W FAUX,FANTADDQ.W #1,IBRA WHILE

FIN EQU *

Algoritmo del ejemplo: cálculo del término enésimo de la serie de Fibonacci.

¿COND?

BLOQUE_WHILE

FALSA

CIERTA

PASCAL (variables enteras):n := 5; fant := 1;f := 1; i := 2;WHILE i <= n DOBEGIN

faux := f;f := f + fant;fant := faux;i := i+1;

END;

C (variables enteras):n = 5; fant = 1;f = 1; i = 2;for ( ; i <= n; ) {

faux = f;f = f + fant;fant = faux;i = i+1;

END;

Page 22: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

43

MC68000: sentencia FOR - TO

Ensamblador MC68000 (versión PASCAL):

MOVE.W #5,NMOVE.W #1,FANTMOVE.W #1,F

FOR EQU *MOVE.W #2,IMOVE.W N,D7CMP.W I,D7BLT FINBRA BLOQUE

INC ADDQ.W #1,IBLOQUE EQU *

MOVE.W F,FAUXMOVE.W FANT,D6ADD.W D6,FMOVE.W FAUX,FANTCMP.W I,D7BNE INC

FIN EQU *

En PASCAL estándar, el valor final del contador es indefinido, y además el contador no debería ser modificado dentro del bucle (¡puede haber resultados inesperados!).

El límite final no cambia a lo largo de la ejecución del bucle (aun cuando sea una variable y ésta se modifique en el bucle).

i:= valor inicial

FALSO

CIERTO

i := i+1

BLOQUE FOR

CIERTO FALSO¿i > límite final?

¿i <> límite final?

PASCAL (variables enteras):n := 5;fant := 1;f := 1;FOR i := 2 TO n DOBEGIN

faux := f;f := f + fant;fant := faux;

END;

C (variables enteras):n = 5; fant = 1; f = 1;for (i=2; i<=n; i++) {faux := f;f := f + fant;fant := faux;

}

Introducción a la programación en ensamblador del MC68000

44

MC68000: sentencia FOR - DOWNTOEnsamblador MC68000

(versión PASCAL):MOVE.W #5,NMOVE.W #1,FANTMOVE.W #1,F

FOR EQU *MOVE.W N,IMOVE.W #2,D7CMP.W I,D7BGT FINBRA BLOQUE

DEC SUBQ.W #1,IBLOQUE EQU *

MOVE.W F,FAUXMOVE.W FANT,D6ADD.W D6,FMOVE.W FAUX,FANTCMP.W I,D7BNE DEC

FIN EQU *

i:= valor inicial

FALSO

CIERTO

i := i-1

BLOQUE FOR

CIERTO FALSO¿i < límite final?

¿i <> límite final?

PASCAL (variables enteras):n := 5;fant := 1;f := 1;FOR i := n DOWNTO 2 DOBEGIN

faux := f;f := f + fant;fant := faux;

END;

C (variables enteras):n = 5;fant = 1;f = 1;for (i=n; i<=2; i--) {faux = f;f = f + fant;fant = faux;

}

Page 23: ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES · • Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits. ÂLas implementaciones de las estructuras de control

Introducción a la programación en ensamblador del MC68000

45

Comentarios sobre sentencias de controlEn cualquier caso, las condiciones que regulan el comportamiento de las sentencias de

control pueden evaluarse de forma completa o mediante cortocircuito.

Las implementaciones presentadas para los bucles FOR corresponden con el comportamiento demostrado por el FOR de TurboPascal.

• El límite final para el contador queda prefijado al inicio del bucle.• Si se modifica el contador en el cuerpo del bucle pueden obtenerse resultados inesperados.• En PASCAL estándar, al terminar un FOR el valor del contador es indefinido.

Un bucle FOR es un bucle WHILE con una condición dependiente de un contador que se incrementa o decrementa unitariamente, y con un límite final prefijado al comienzo del bucle.

Los bucles WHILE pueden dar problemas con condiciones del tipo <= o >= si el valor del límite final coincide con un extremo del rango.

• ¿Qué sucede si se pide calcular el término 32767 de la serie de Fibonacci en el ejemplo?• Ejercicio: proponer e implementar posibles soluciones (aumentar el tamaño de la variable del

contador, reestructurar el bucle, etc).

Sentencia CASE:• Puede implementarse mediante estructuras IF-THEN-ELSE anidadas.• Es más eficiente (y complicado) implementarla mediante tablas de saltos.