68K notes - Instrucciones ensamblador - Motorola 68K PDF

Title 68K notes - Instrucciones ensamblador - Motorola 68K
Course Estructura de Computadores II
Institution Universitat de les Illes Balears
Pages 18
File Size 552.7 KB
File Type PDF
Total Downloads 82
Total Views 144

Summary

Instrucciones ensamblador - Motorola 68K...


Description

INTRODUCCIÓN A LA PROGRAMACIÓN EN ENSAMBLADOR (ENSAMBLADOR 68000)

Alberto Ortiz, Javier Antich, Manuel Barranco Estructura de Computadores 1 Grado en Ingeniería Informática Escola Politècnica Superior (UIB)

Estructura de Computadors 1

Escola Politècnica Superior (UIB)

Introducción a la programación en ensamblador Un procesador ejecuta instrucciones de su conjunto de instrucciones, expresadas en lenguaje máquina (1101001101) Para evitar la especificación de programas en binario y facilitar la programación: - lenguajes de alto nivel: proveen niveles de abstracción que permiten especificar operaciones complejas, agregación de datos en forma de estructuras de datos, construcciones complejas para el control de la ejecución de las operaciones, etc. requieren un programa compilador para generar el lenguaje máquina - lenguaje ensamblador: nivel inmediatamente anterior al lenguaje máquina, sustituye combinaciones binarias por mnemónicos e introduce símbolos asociados a los elementos hardware del procesador accesibles para el programador requirere un programa ensamblador para generar el lenguaje máquina Procesador Motorola 68000 Procesador de los años 80, pero con un conjunto de instrucciones moderno y potente. Es el primero de una familia de procesadores empleados en múltiples microordenadores de los años 80 (Macintosh, Amiga, etc.)

Alberto Ortiz

2

Estructura de Computadors 1

Escola Politècnica Superior (UIB)

El 68000 es un procesador de 16 bits en el sentido de que su bus de datos es de 16 bits, pero a nivel software es de 32 bits (registros y operaciones con 32 bits)  2 accesos a memoria por cada dato de 32 bits. Estructura de registros:

8 registros de datos (D0,…,D7) Para manipulación genérica de bytes, words y long words

8 registros de direcciones (A0, …, A7) Intervienen en un número inferior de instrucciones

El A7 actúa como puntero de pila (SP)

NOTA: La fase de fetch incrementa automáticamente el PC en 2 para que siempre apunte a la siguiente instrucción a ejecutar, incluso durante la ejecución de la instrucción actual

Alberto Ortiz

3

Estructura de Computadors 1

Escola Politècnica Superior (UIB)

Catálogo de instrucciones 7 grupos: TRANSFERENCIA DE DATOS ARITMÉTICA ENTERA OPERACIONES LÓGICAS DESPLAZAMIENTOS Y ROTACIONES MANIPULACIÓN DE BITS CONTROL DE PROGRAMA OTRAS INSTRUCCIONES Todas las instrucciones siguen el mismo patrón:

  - Indica la operación a realizar

 - Operandos que intervienen - Se indican mediante modos de direccionamiento: * Directo registro (datos): D0, D1, … * Directo registro (direcciones): A0, A1, … * Absoluto: A, Z, M1, VECTOR, … * Inmediato: #4, #$ABC, #%1001, #@764

→ [operando está en registro] →[ “ ] → [operando está en memoria (variable)] → [operando es una constante]

Instrucción MOVE Establece el contenido del operando destino a partir de una constante o el contenido de un registro/posición de memoria: MOVE a,b

Ejemplo 1:

b  [a] Lenguaje de transferencia de registros Habitual en descripciones de conjuntos de instrucciones !! * [x] = contenido de x * izda. flecha siempre dirección (nombre registro es su dirección) * dcha. flecha siempre valor

D3 Antes 3 Después 3

Alberto Ortiz

D4  [D3]

MOVE D3,D4 D4 ? 3

4

Estructura de Computadors 1 Ejemplo 2:

Escola Politècnica Superior (UIB) D0  [A]

MOVE A,D0 A Antes 20 Después 20

Ejemplo 3:

D0 ? 20

A es el nombre asignado a una posición de memoria, el ensamblador traducirá el nombre por la dirección de la posición.

D1  4

MOVE #4,D1

Variantes de MOVE: 



MOVE = MOVE.W copia valores de 16 bits (words), mientras que MOVE.B y MOVE.L copia valores de 8 (bytes) y 32 bits (long words) respectivamente. En el conjunto de instrucciones del 68K prácticamente todas las instrucciones contemplan la posibilidad de operar con bytes, words y long words. Si no se especifica nada, la operación se realiza sobre words. Las operaciones a nivel de byte o word se realiza con los bits menos significativos, sin alterar los bits restantes: MOVE.L #$00000000,D0 MOVE.W #$FFFF,D0 MOVE.B #0,D0

 

D0 0000 00 00 0000 FF FF 0000 FF 00

MOVE no puede emplear todos los modos de direccionamiento en los dos operandos, hay que mirar la tabla de instrucciones. Hay versiones rápidas de MOVE para direcciones y constantes: MOVEA a, An

An  [a]

MOVEQ #k, Dn

Dn  k

k es una constante con signo de 8 bits no hay extensión de signo

Instrucciones ADD y SUB En general: ADD.S a, b

b  [b] + [a]

SUB.S a, b

b  [b] - [a]

S = B, W, L

Pero, en realidad, no todos los direccionamientos están disponibles para los dos operandos, lo que da lugar a diversas variantes, las mismas para ambas instrucciones: ADD.S Dm, b SUB.S Dm, b S = B, W, L b  [b] + [Dm] b  [b] - [Dm] ADD.S a, Dn SUB.S a, Dn S = B, W, L Dn  [Dn] + [a] Dn  [Dn] - [a] ADDA.S a, An SUBA.S a, An S = W, L An  [An] + [a] An  [An] - [a] ADDI.S #k, b SUBI.S #k, b S = B, W, L b  [b] + k b  [b] - k ADDQ.S #k, b SUBQ.S #k, b b  [b] + k b  [b] - k S = B, W, L, k  {1,…,7}

Alberto Ortiz

5

Estructura de Computadors 1

Escola Politècnica Superior (UIB)

NOTA: ADD.S #k, Dn es correcta pero restringe el destino a únicamente registros de datos; por esta razón existe ADDI.S #k, b. ADDQ es una version rápida de ADDI limitada a k < 8, útil para programar contadores con paso inferior a 8. PROGRAMA EJEMPLO 1 *----------------------------------------------------------* Program : Example 1 * Written by : A. Ortiz (UIB) * Date : 10/02/2012 * Description: C.W = A.W + B.W, D.W = A.W - B.W *----------------------------------------------------------ORG $1000 A B C D

DC.W DC.W DS.W DS.W

40 13 1 1

; labels without ‘:’ must always start in column 1 !!! ; labels with ‘:’ can start at any column !!!

START:

; first instruction of program MOVE.W A,D0 ADD.W B,D0 MOVE.W D0,C MOVE.W A,D0 SUB.W B,D0 MOVE.W D0,D MOVE.B TRAP

#9,D0 #15

; halt simulator, ALSO STOP #$2000

* Variables and Strings END

START

; last line of source

Instrucción CMP También hay diversas variantes, aunque menos que para ADD y SUB (no todos los direccionamientos están disponibles para los dos operandos): CMP.S a, Dn CMPA.S a, An CMPI.S #k, b

[Dn] - [a] [An] - [a] [b] - k

S = B, W, L S = W, L S = B, W, L

Esta instrucción tiene como único objetivo modificar los flags N, Z, C y V (no modifica X) a través de la resta que realiza, lo cual permite implementar comparaciones sin necesidad de incluir un comparador en la ALU. N=1 Z=1 C=1 V=1 X=1

Alberto Ortiz

si última operación ALU < 0 si última operación ALU = 0 Cout de última operación ALU si última operación ALU provocó desbordamiento igual que C, pero le afectan menos instrucciones (está pensado para implementar suma y resta de más de 32 bits)

Ojo!! CMP no modifica este flag

6

Estructura de Computadors 1

Escola Politècnica Superior (UIB)

Instrucción BEQ Provoca un salto en el programa si Z = 1: BEQ etiqueta

SI Z = 1 ENTONCES PC  dirección de memoria correspondiente a ‘etiqueta’ en el programa ( la siguiente instrucción a ejecutar es la indicada por ‘etiqueta’) SI Z = 0 ENTONCES se ejecuta la siguiente instrucción del programa

PROGRAMA EJEMPLO 2 *----------------------------------------------------------* Program : Example 2 * Written by : A. Ortiz (UIB) * Date : 10/02/2012 * Description: set C.W to 0 if A.W = B.W, and to 1 otherwise *----------------------------------------------------------ORG $1000 A B C

DC.W DC.W DS.W

40 13 1

START:

; first instruction of program MOVE.W A,D0 CMP.W B,D0 BEQ ET0 MOVE.W #1,C MOVE.B TRAP

ET0:

#9,D0 #15

; halt simulator

MOVE.W #0,C MOVE.B TRAP

#9,D0 #15

; halt simulator

END

START

; last line of source

Tras ensamblarlo, obtenemos el siguiente fichero (extensión .L68): 00001006 Starting Address Assembler used: EASy68K Editor/Assembler v5.9.0 Created On: 10/02/2012 8:44:01 00000000 00000000 00000000 00000000 00000000 00000000 00001000 00001000 00001000= 0028 00001002= 000D 00001004

Alberto Ortiz

1 2 3 4 5 6 7 8 9 10 11

*---------------------------------------------* Program : Example 2 * Written by : A. Ortiz (UIB) * Date : 10/02/2012 * Description: set C.W to 1 if A.W = B.W, and t *---------------------------------------------ORG $1000 A B C

DC.W DC.W DS.W

40 13 1

7

Estructura de Computadors 1 00001006 00001006 00001006 0000100A 0000100E 00001012 00001018 00001018 0000101C 0000101E 0000101E 00001024 00001024 00001028 0000102A 0000102A 0000102A

3038 B078 6700 31FC

Escola Politècnica Superior (UIB) 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30

1000 1002 000E 0001 1004

103C 0009 4E4F 31FC 0000 1004 103C 0009 4E4F

START:

; first instruc MOVE.W A,D0 CMP.W B,D0 BEQ ET0 MOVE.W #1,C MOVE.B TRAP

ET0:

#9,D0 #15

; halt simulato

MOVE.W #0,C MOVE.B TRAP

#9,D0 #15

; halt simulato

* Variables and Strings END START

; last line of

No errors detected No warnings generated SYMBOL TABLE INFORMATION Symbol-name Value ------------------------A 1000 B 1002 C 1004 ET0 101E START 1006

O de otra manera: A: B: C: START:

ET0:

Alberto Ortiz

dirección 1000 1002 1004

contenido 0028 000D ????

1006 1008

3038 1000

MOVE.W

100A 100C

B078 1002

CMP.W

100E 1010

6700 000E

BEQ ET0

--------------!

1012 1014 1016

31FC 0001 1004

MOVE.W

B tras CMP B, A A  B tras CMP B, A

Expresión lógica basada en flags C+Z=0 C+Z=1 C=0 C=1 C=0 C=1 Z=0 Z=1 V=0 V=1 N =0 N=1 NV=0 NV=1 Z+NV=0 Z+NV=1

Instrucción BRA Provoca un salto incondicional: BRA etiqueta

Alberto Ortiz

PC  dirección de memoria correspondiente a ‘etiqueta’ en el programa

9

Estructura de Computadors 1

Escola Politècnica Superior (UIB)

PROGRAMA EJEMPLO 3 *----------------------------------------------------------* Program : Example 3 * Written by : A. Ortiz (UIB) * Date : 10/02/2012 * Description: set C.W to 0 if A.W = B.W, and to 1 otherwise *-----------------------------------------------------------

A B C

ORG

$1000

DC.W DC.W DS.W

40 13 1

START:

; first instruction of program MOVE.W A,D0 CMP.W B,D0 BEQ ET0 MOVE.W #1,C BRA FINISH

ET0:

MOVE.W #0,C

FINISH: MOVE.B TRAP END

#9,D0 #15

; halt simulator

START

; last line of source

Instrucción JMP También provoca un salto incondicional: JMP etiqueta

PC  dirección de memoria correspondiente a ‘etiqueta’ en el programa

Diferencias entre JMP y BRA 1) BRA no permite saltar a cualquier posición de la memoria, al contrario que JMP. De hecho BRA implementa un salto relativo al PC: BRA.S d

PC  [PC] + d d  [-128 .. 127] (desplazamiento con signo de 8 bits)

BRA.L d

PC  [PC] + d d  [-32768 .. 32767] (desplazamiento con signo de 16 bits)

Cualquier otra instrucción Bxx opera de la misma manera. Por ello, se denominan instrucciones de salto corto, frente a JMP que sería una instrucción de salto largo. 2) Bxx tiene como parámetro un desplazamiento constante, mientras que JMP admite expresar la dirección de salto tanto mediante un direccionamiento absoluto como mediante otros direccionamientos que veremos a continuación (no todos los direccionamientos son aplicables, ver tabla de instrucciones). En Alberto Ortiz

10

Estructura de Computadors 1

Escola Politècnica Superior (UIB)

este segundo caso, la dirección de salto puede variar cada vez que se ejecuta la instrucción JMP, ya que los mencionados direccionamientos hacen referencia al contenido de posiciones de memoria. PROGRAMA EJEMPLO 4 *-------------------------------------------------------------* Program : Example 4 * Written by : A. Ortiz (UIB) * Date : 10/02/2012 * Description: Calculate the sum of the N first natural numbers *--------------------------------------------------------------

N SUM

ORG

$1000

EQU DS.L

5 1

START:

; assume N fits in a word ; assume SUM fits in a long word ; first instruction of program

CLR.L D0 CLR.L SUM LOOP: ADD.L D0,SUM ADDQ.W #1,D0 CMP.W #N,D0 BLS LOOP MOVE.B TRAP

#9,D0 #15

; halt simulator

END

START

; last line of source

Instrucción DBRA Facilita la implementación de bucles cuando el número de iteraciones es conocido: DBRA Dn, etiqueta

Dn  [Dn] – 1 SI [Dn]  -1 ENTONCES PC  [PC] + d d  [-32768 .. 32767] (desplazamiento con signo de 16 bits)

PROGRAMA EJEMPLO 5A *-------------------------------------------------------------* Program : Example 5A * Written by : A. Ortiz (UIB) * Date : 10/02/2012 * Description: Calculate the sum of the N first natural numbers *--------------------------------------------------------------

N SUM

ORG

$1000

EQU DS.L

5 1

START:

; assume N fits in a word ; assume SUM fits in a long word ; first instruction of program

MOVE.L #N,D0 CLR.L SUM

Alberto Ortiz

11

Estructura de Computadors 1

Escola Politècnica Superior (UIB)

LOOP: ADD.L D0,SUM DBRA D0,LOOP MOVE.B TRAP

#9,D0 #15

; halt simulator

END

START

; last line of source

Hay una variante de DBRA que permite salir del bucle y decrementar el registro de forma selectiva: DBcc Dn, etiqueta

SI no(c) ENTONCES Dn  [Dn] – 1 SI [Dn]  -1 ENTONCES PC  [PC] + d d  [-32768 .. 32767] (desplazamiento con signo de 16 bits)

Se implementan las mismas condiciones que en el caso de Bcc, por lo que se dispone de las instrucciones DBHI, DBLS, DBCC, DBCS, DBNE, DBEQ, DBVC, DBVS, DBPL, DBMI, DBGE, DBLT, DBGT y DBLE. Por ejemplo, el siguiente código sólo completa 3 iteraciones de las 4: PROGRAMA EJEMPLO 5B *----------------------------------------------------------* Program : Example 5B * Written by : A. Ortiz (UIB) * Date : 10/02/2012 * Description: Calculate P = A*B, except if A*B > MX *----------------------------------------------------------ORG $1000 MX A B P

EQU DC.W DC.W DS.W

10 4 4 1

START:

; first instruction of program MOVE.W B,D0 SUBQ.W #1,D0 MOVE.W A,D1 CLR.W P

LOOP: ADD.W D1,P CMP.W #MX,P DBHI D0,LOOP MOVE.B TRAP

#9,D0 #15

; halt simulator

END

START

; last line of source

Otros modos de direccionamiento El procesador 68000 dispone de un total de 12 modos de direccionamiento, entre los que se encuentran los 5 ya descritos directo registro (datos y direcciones), absoluto (largo y corto), e inmediato. Veamos un

Alberto Ortiz

12

Estructura de Computadors 1

Escola Politècnica Superior (UIB)

ejemplo que demuestra que los anteriores direccionamientos no permiten resolver ciertos casos de manera eficiente: PROGRAMA EJEMPLO 6: Poner a 0 el bloque de memoria comprendido entre $1000 y $10FF (256 bytes). Solución A. Repetir una instrucción MOVE.B tantas veces como sea necesario.

V

ORG

$1000

DS.B

256

V

START:

ORG

$1000

DS.B

256

START: MOVE.B #0,$1000 MOVE.B #0,$1001 MOVE.B #0,$1002

MOVEA.L #$1000,A0 LOOP: MOVE.B #0,(A0) ADDA.L #1,A0 CMPA.L #$1100,A0 BNE LOOP

... MOVE.B #0,$10FE MOVE.B #0,$10FF

(I)

Solución B. Evitar la repetición de la instrucción MOVE.B implementando un bucle que itera sobre la dirección, a base de utilizar direccionamiento registro indirecto.

MOVE.B TRAP

#9,D0 #15

END

START

MOVE.B TRAP

#9,D0 #15

END

START

MODO INDIRECTO REGISTRO (de direcciones) (An)

Acceso a memoria: Dirección efectiva (EA) = [An] Operando = [[An]]

Ejemplo: MOVE (A0),D1

A0 0432 hex =========>

(II)

3F31

0432h

=======>

3F31

D1

MODO (indirecto registro) POSTINCREMENTO (para procesar posiciones contiguas de memoria) (An)+

Alberto Ortiz

(1) Acceso a memoria Dirección efectiva (EA) = [An] 13

Estructura de Computadors 1

Escola Politècnica Superior (UIB) Operando = [[An]] (2) Actualización de An An  An + B B = 1, 2 ó 4 según ”tamaño” de la operación

(III)

MODO (indirecto registro) PREDECREMENTO (para procesar posiciones contiguas de memoria) -(An)

(1) Actualización de An An  An - B B = 1, 2 ó 4 según ”tamaño” de la operación (2) Acceso a memoria Dirección efectiva (EA) = [An] Operando = [[An]]

PROGRAMA EJEMPLO 6.C: *----------------------------------------------------------* Program : Example 6C * Written by : A. Ortiz * Date : 10/02/2012 * Description: Clear a memory block *-----------------------------------------------------------

V

ORG

$1000

DS.B

256

START:

; first instruction of program MOVEA.L #$1000,A0

LOOP: MOVE.B #0,(A0)+ CMPA.L #$1100,A0 BNE LOOP MOVE.B TRAP END

(IV)

#9,D0 #15 START

; halt simulator ; last line of source

MODO INDEXADO BÁSICO (para procesar posiciones contiguas de memoria, p.e. vectores) X(An)

Acceso a memoria: Dirección efectiva (EA) = [An] + X Operando = [[An] + X] X  constante con signo de 16 bits 31

15

7

0

An X + EA

Alberto Ortiz

14

Estructura de Computadors 1 (V)

Escola Politècnica Superior (UIB)

MODO INDEXADO COMPLETO (para procesar posiciones contiguas de memoria, p.e. vectores) X(An, Rk.S)

31

Acceso a memoria: Dirección efectiva (EA) = [An] + [Rk] + X Operando = [[An] + [Rk] + X] X  constante con signo de 8 bits S  W o L para restringir los bits de Rk (=Dk o Ak) utilizados para indexar (W por defecto) 15

7

0

An Rk.W X + EA

31

15

7

0

An Rk.L X + EA

Ejemplo: D0 LIST START:

ORG DC.W

$1000 4, 5, 6, 7

MOVEA.L MOVE.W ADDQ.L MOVE.W

#0,A0 LIS...


Similar Free PDFs