Está en la página 1de 19

MICROPROCESADORES

Y
MICROCONTROLADORES

PRACTICA 1

Ingeniera Tcnica Industrial Electrnica

Juan Carlos Irigoyen Calvo

DNI:

C.A. Pamplona

1
ENUNCIADO PRCTICA

Se desea disear una subrutina para el M68000 que invierta el orden de un vector de datos en
memoria. Cada componente del vector ocupa un byte. El vector invertido debe quedar almacenado en las
mismas posiciones de memoria que el original. Por ejemplo, dado el vector de componentes [0A 0B 0C 0D
0E] expresado en hexadecimal, el resultado de la subrutina debera ser: [0E 0D 0C 0B 0A].
La subrutina se llamar INVERTIR, y recibir la direccin de comienzo del vector en el registro
A0 y el tamao del mismo en el registro D0. Se pide:

1. Especificar los argumentos de entrada y de salida a la subrutina mencionados en el enunciado, indicando


los tamaos elegidos para los mismos.
2. Realizar una descripcin textual del algoritmo propuesto.
3. Describir el algoritmo por pasos, indicando los datos intermedios utilizados.
4. Realizar un diagrama de flujo de la solucin propuesta.
5. Codificar en ensamblador del M68000 la subrutina pedida, comentando las sentencias utilizadas y
haciendo referencia a los pasos mencionados en el apartado 3.
6. Justificar la eleccin de los modos de direccionamiento empleados en el punto 5.
7. Codificar un programa en ensamblador que:
a. Disponga de una zona de datos en memoria para almacenar el vector, inicializndola con los valores del
ejemplo del enunciado. Etiquetar la direccin de comienzo de dicha zona de memoria como VECTOR. Es
recomendable que esta zona se halle detrs de la zona de cdigo del programa.
b. Cargue la etiqueta VECTOR en el registro A0, y el valor 5 en D0.
c. Efecte una llamada a la subrutina y seguidamente termine.
8. Escribir el programa y la subrutina en ensamblador y ensamblarlo.
9. Simular con Easy68K el cdigo objeto generado y obtener una traza de la ejecucin del mismo. La traza
incluir todos los registros involucrados (incluyendo el puntero de pila) y el contenido del vector en cada
instante, as como las variables utilizadas y el registro de estado.
10. Efectuar una nueva simulacin, esta vez con el siguiente vector: [DD CC BB AA] ayudndose de las
rdenes disponibles en el simulador, generando una traza similar a la del apartado anterior.

2
APARTADO 1- ARGUMENTOS DE ENTRADA Y SALIDA
Los argumentos de entrada a la subrutina INVERTIR sern la direccin apuntada por el registro A0,
donde se encuentra el vector a invertir y el tamao de dicho vector en bytes que se pasa a la subrutina a
travs del registro de datos D0.

La subrutina no tiene argumentos de salida como tal. Se limita a invertir el orden del vector dado en
la direccin apuntada por A0, dejndola en la misma direccin.

He limitado el tamao del vector a invertir a 65535, pues dentro de la subrutina las instrucciones con
los registros las he hecho con palabras de 16 bits.

Apunto que la subrutina devuelve el valor de A0 y D0 intactos pero modifica los registros D1, D2, D3,
D4 y D5 as que aunque yo no lo he hecho por no necesitarlo en este caso, habra que llamar a otra
subrutina antes que a sta donde se guardasen los valores de estos registros en memoria para luego
volver a recuperarlos.

APARTADO 2- DESCRIPCION TEXTUAL DEL ALGORITMO


Una vez recibida la direccin de la cadena a invertir, se realiza el proceso a lo largo de un bucle que
se repite un n de veces igual a la mitad de la longitud de la cadena (D0) , valor de n de iteraciones que
se guardar en otro registro de datos y que llamo fin de bucle

Durante la primera iteracin, se guardan en registros de datos intermedios los valores del primer y
ltimo dato en un primer paso para posteriormente pasar estos valores a la ltima posicin y la primera
(ya intercambiados). Se incrementan las posiciones a intercambiar en los pasos sucesivos del bucle, es
decir 2 y penltima, 3 y antepenltima y as sucesivamente mientras que no se llegue al fin de bucle.

Tras llegar al final de bucle tenemos ya pues los datos intercambiados en A0 y devolvemos el control
al programa principal.

3
APARTADO 3- DESCRIPCION DEL ALGORITMO POR PASOS
En este apartado se describen los pasos de la subrutina INVERTIR:

1- D1 D0 El contenido de D0 se guarda en D1 (N de elementos a ordenar)


2- D1 D1/2 Desplazamiento de un bit a la derecha de D2, que es como dividir entre dos. Esta
variable ser el FIN DE BUCLE.
3- D4 D0 N de elementos en D4
4- D4 D4 -1 Se decrementa el valor de D4. Este registro har de puntero a los elementos de la
derecha (ELEMENTO DERECHA).
5- D2 0 Se pone a cero el registro D2 que ser el puntero de los elementos de la izquierda
(ELEMENTO IZQUIERDA) . Se utiliza tambin como contador de bucle.

BUCLE

6- D3 (A0 + D2) Elemento de la izquierda a registro D3


7- D5 (A0 + D4) Elemento de la derecha a registro D5
8- (A0 + D4) D3 El elemento de la izquierda guardado en D3 pasa a la derecha
9- (A0 + D2) D5 El elemento de la derecha guardado en D5 pasa a la izquierda
10- D4 D4 1 D4 apuntar a anterior elemento de la derecha
11- D2 D2 + 1 D2 apuntar a siguiente elemento de la izuierda e incrementa contador bucle
12- CMP D2, D1 Compara el valor de contador de bucle con el de fin de bucle
13- Si no se ha llegado a fin de bucle se repite
14- Retorno a programa principal

4
APARTADO 4- DIAGRAMA DE FLUJO DE LA SUBRUTINA INVERTIR

INICIO

D1 D0

D1 D1 / 2

D4 D0

D4 D4 - 1

D2 0

D3 (A0 + D2)

D5 (A0 + D4)

(A0 + D4) D3

(A0 + D2) D5 NO

D4 D4 - 1

D2 D2 + 1

D2 > D1

SI

RETORNO

5
APARTADO 5- CODIFICACION EN ENSAMBLADOR DE SUBRUTINA INVERTIR

*-----------------------------------------------------------
* ZONA DE SUBRUTINA
*-----------------------------------------------------------
SUBR ORG $3000

INVERTIR MOVE.W D0,D1 Carga n de elementos en D1


LSR #1,D1 Divide D1/2 (elimina resto) Ser el FIN DE BUCLE
MOVE.W D0,D4 carga n de elemnetos en D4
SUB.W #1,D4 D4=D4-1 (apuntar ELEMENTO DERECHA)
MOVE.L #$0,D2 Pone D2 a cero (contador bucle) y apuntar
A ELEMENTO IZQUIERDA.

*-----------------------------------------------------------
* Comienza bucle
*-----------------------------------------------------------

BUCLE MOVE.B (A0,D2),D3 Elemento izquierda a D3


MOVE.B (A0,D4),D5 Elemento derecha a D5
MOVE.B D3,(A0,D4) Elemento izquierda pasa a derecha
MOVE.B D5,(A0,D2) Elemento derecha pasa a izquierda
SUB.W #1,D4 Decrementa puntero ELEMENTO DERECHA
ADD.W #1,D2 Incrementa puntero ELEMENTO IZQUIERDA
CMP D2,D1 Comprueba fin de bucle
BGT BUCLE Repite bucle si no se ha terminado de invertir

RTS Retorno a programa principal


END START

6
APARTADO 6- MODOS DE DIRECCIONAMIENTO
Se han utilizado para la subrutina diferentes tipos de direccionamiento:

1- Direccionamiento inmediato, en todas las instrucciones en que se incrementaban o


decrementaban los registros de datos que hacan de punteros. Tambin para cargar valores
conocidos en tiempo de diseo o realizar desplazamientos de bits en registros. Las instrucciones
en que se ha empleado son:
LSR #1,D1
SUB.W #1,D4
MOVE.L #$0,D2
SUB.W #1,D4
ADD.W #1,D2.

2- Direccionamiento directo en registro de datos, para pasar valores de un registro a otro y as


operar con ellos sin cambiar el registro original, o para realizar la comparacin para repeticin del
bucle. Se ha empleado en las siguientes instrucciones:
MOVE.W D0,D1
MOVE.W D0,D4
CMP D2,D1

3- Direccionamiento indirecto a registro con ndice y desplazamiento. Se usa


para recorrer el vector con los datos situados en la direccin A0. A0 es
la base y el registro de datos en cada caso es la cantidad a sumar a esta
direccin para calcular la direccin efectiva donde se encuentra el dato
a leer o a escribir en memoria. Se ha empleado en las siguientes
instrucciones:
MOVE.B (A0,D2),D3
MOVE.B (A0,D4),D5
MOVE.B D3,(A0,D4)
MOVE.B D5,(A0,D2)

7
APARTADO 7-8 CODIFICACION DEL PROGRAMA Y LLAMADA A
SUBRUTINA
En el programa principal situamos una zona de datos en la direccin
hexadecimal 4000 con la etiqueta vector donde reservamos e
inicializamos con los valores que nos pide el enunciado [0A 0B 0C 0D 0E].
La rutina principal cargar en A0 la direccin de VECTOR y el tamao
del mismo en D0 y llamar a la subrutina INVERTIR, tras la cual
tendremos en la direccin A0 el vector invertido.
El cdigo fuente con este vector cargado y la subrutina se encuentra
en el archivo P1.X68

*-----------------------------------------------------------
* Program : Invertir
* Written by : Juan Carlos Irigoyen Calvo
* Date : 23 de febrero de 2008
* Description: Toma los datos de memoria y los invierte
*-----------------------------------------------------------
START ORG $1000
MOVEA.W #VECTOR,A0 Carga direccion de vector
MOVEQ #5,D0 Carga n de elementos
BSR INVERTIR Llama a subrutina Invertir
STOP #$2000

*-----------------------------------------------------------
* ZONA DE DATOS
*-----------------------------------------------------------
DATOS ORG $4000
VECTOR DC.B $0A,$0B,$0C,$0D,$0E Inicializa Vector con valores

*-----------------------------------------------------------
* ZONA DE SUBRUTINA
*-----------------------------------------------------------
SUBR ORG $3000

INVERTIR MOVE.W D0,D1 Carga n de elementos en D1


LSR #1,D1 Divide D1/2 (elimina resto) Ser el FIN DE BUCLE
MOVE.W D0,D4 carga n de elemnetos en D4
SUB.W #1,D4 D4=D4-1 (apuntar ELEMENTO DERECHA)
MOVE.L #$0,D2 Pone D2 a cero (contador bucle) y apuntar
A ELEMENTO IZQUIERDA.

*-----------------------------------------------------------
* Comienza bucle
*-----------------------------------------------------------

BUCLE MOVE.B (A0,D2),D3 Elemento izquierda a D3


MOVE.B (A0,D4),D5 Elemento derecha a D5
MOVE.B D3,(A0,D4) Elemento izquierda pasa a derecha
MOVE.B D5,(A0,D2) Elemento derecha pasa a izquierda
SUB.W #1,D4 Decrementa puntero ELEMENTO DERECHA
ADD.W #1,D2 Incrementa puntero ELEMENTO IZQUIERDA
CMP D2,D1 Comprueba fin de bucle
BGT BUCLE Repite bucle si no se ha terminado de invertir
RTS Retorno a programa principal
END START

8
APARTADO 9- SIMULACION Y TRAZA CON VECTOR 0A 0B 0C 0D 0E
El archivo de texto con la traza para esta simulacin se llama
Traza P1. Aqu adjunto una copia:

EASy68K execution log file: 15/04/2008 19:09:47

***** Reset Program Pressed *****


EASy68K execution log file: 15/04/2008 19:12:23

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000000 D4=00000000 A0=00000000 A4=00000000 T_S__INT___XNZVC


D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=01000000
PC=00001000 Code=307C 4000 Line= 8
MOVEA.W #VECTOR,A0 Carga direccion de vector

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000000 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=01000000
PC=00001004 Code=7005 Line= 9
MOVEQ #5,D0 Carga n de elementos

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=01000000
PC=00001006 Code=6100 1FF8 Line= 10
BSR INVERTIR Llama a subrutina Invertir

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000

9
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003000 Code=3200 MOVEW

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000005 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003002 Code=E249 SHIFT_ROT

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000010001
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003004 Code=3800 MOVEW

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000005 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000010000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003006 Code=5344 SUBQ

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000004 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003008 Code=7400 Line= 30
MOVE.L #$0,D2 Pone D2 a cero (contador bucle) y apuntar
ELEMENTO IZQUIERDA

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000004 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC

10
PC=0000300A Code=1630 2000 Line= 35 BUCLE
MOVE.B (A0,D2),D3 Elemento izquierda a D3

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000004 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=0000000A D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000300E Code=1A30 4000 Line= 36
MOVE.B (A0,D4),D5 Elemento derecha a D5

00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000004 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000E A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=0000000A D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003012 Code=1183 4000 Line= 37
MOVE.B D3,(A0,D4) Elemento izquierda pasa a derecha

00004000: 0A 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000004 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000E A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=0000000A D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003016 Code=1185 2000 Line= 38
MOVE.B D5,(A0,D2) Elemento derecha pasa a izquierda

00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000004 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000E A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=0000000A D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301A Code=5344 Line= 39
SUB.W #1,D4 Apunta anterior elemento por la derecha

00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000E A1=00000000 A5=00000000 SR=0010000000000000

11
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=0000000A D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301C Code=5242 Line= 40
ADD.W #1,D2 Apunta siguiente elemento por la izquierda

00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000E A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=0000000A D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301E Code=B242 Line= 41
CMP D2,D1 Comprueba fin de bucle

00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000E A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=0000000A D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003020 Code=6EE8 Line= 42
BGT BUCLE Repite bucle si no se ha terminado de invertir

00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000E A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=0000000A D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000300A Code=1630 2000 Line= 35 BUCLE
MOVE.B (A0,D2),D3 Elemento izquierda a D3

00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000E A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=0000000B D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000300E Code=1A30 4000 Line= 36
MOVE.B (A0,D4),D5 Elemento derecha a D5

00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

12
D0=00000005 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC
D1=00000002 D5=0000000D A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=0000000B D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003012 Code=1183 4000 Line= 37
MOVE.B D3,(A0,D4) Elemento izquierda pasa a derecha

00004000: 0E 0B 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000D A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=0000000B D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003016 Code=1185 2000 Line= 38
MOVE.B D5,(A0,D2) Elemento derecha pasa a izquierda

00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000D A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=0000000B D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301A Code=5344 Line= 39
SUB.W #1,D4 Apunta anterior elemento por la derecha

00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000D A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=0000000B D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301C Code=5242 Line= 40
ADD.W #1,D2 Apunta siguiente elemento por la izquierda

00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000D A1=00000000 A5=00000000 SR=0010000000000000
D2=00000002 D6=00000000 A2=00000000 A6=00000000
D3=0000000B D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301E Code=B242 Line= 41
CMP D2,D1 Comprueba fin de bucle

13
00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000D A1=00000000 A5=00000000 SR=0010000000000100
D2=00000002 D6=00000000 A2=00000000 A6=00000000
D3=0000000B D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003020 Code=6EE8 Line= 42
BGT BUCLE Repite bucle si no se ha terminado de invertir

00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000D A1=00000000 A5=00000000 SR=0010000000000100
D2=00000002 D6=00000000 A2=00000000 A6=00000000
D3=0000000B D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003022 Code=4E75 Line= 45
RTS Retorno a programa principal

00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---

D0=00000005 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=0000000D A1=00000000 A5=00000000 SR=0010000000000100
D2=00000002 D6=00000000 A2=00000000 A6=00000000
D3=0000000B D7=00000000 A3=00000000 A7=00FF0000 SS=01000000
PC=0000100A Code=4E72 2000 Line= 11
STOP #$2000

14
APARTADO 10- SIMULACION Y TRAZA CON VECTOR DD CC BB AA
El cdigo fuente con el vector cargado se llama P1-BIS.X68 y la
traza en el archivo de texto Traza P1-Bis.

EASy68K execution log file: 15/04/2008 19:31:13

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000000 D4=00000000 A0=00000000 A4=00000000 T_S__INT___XNZVC


D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=01000000
PC=00001000 Code=307C 4000 Line= 8 MOVEA.W
#VECTOR,A0 Carga direccion de vector

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000000 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=01000000
PC=00001004 Code=7004 Line= 9 MOVEQ
#4,D0 Carga n de elementos

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=01000000
PC=00001006 Code=6100 1FF8 Line= 10 BSR
INVERTIR Llama a subrutina Invertir

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003000 Code=3200 MOVEW

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000004 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC

15
PC=00003002 Code=E249 SHIFT_ROT

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000000 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003004 Code=3800 MOVEW

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000004 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003006 Code=5344 SUBQ

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003008 Code=7400 MOVEQ

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000300A Code=1630 2000 Line= 34 BUCLE MOVE.B
(A0,D2),D3 Elemento izquierda a D3

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=00000000 A1=00000000 A5=00000000 SR=0010000000001000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=000000DD D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000300E Code=1A30 4000 Line= 35 MOVE.B
(A0,D4),D5 Elemento derecha a D5

00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000AA A1=00000000 A5=00000000 SR=0010000000001000

16
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=000000DD D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003012 Code=1183 4000 Line= 36 MOVE.B
D3,(A0,D4) Elemento izquierda pasa a derecha

00004000: DD CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000AA A1=00000000 A5=00000000 SR=0010000000001000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=000000DD D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003016 Code=1185 2000 Line= 37 MOVE.B
D5,(A0,D2) Elemento derecha pasa a izquierda

00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000003 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000AA A1=00000000 A5=00000000 SR=0010000000001000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=000000DD D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301A Code=5344 Line= 38 SUB.W
#1,D4 Apunta anterior elemento por la derecha

00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000AA A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=000000DD D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301C Code=5242 Line= 39 ADD.W
#1,D2 Apunta siguiente elemento por la izquierda

00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000AA A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=000000DD D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301E Code=B242 Line= 40 CMP D2,D1
Comprueba fin de bucle

00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000AA A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=000000DD D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC

17
PC=00003020 Code=6EE8 Line= 41 BGT BUCLE
Repite bucle si no se ha terminado de invertir

00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000AA A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=000000DD D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000300A Code=1630 2000 Line= 34 BUCLE MOVE.B
(A0,D2),D3 Elemento izquierda a D3

00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000AA A1=00000000 A5=00000000 SR=0010000000001000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=000000CC D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000300E Code=1A30 4000 Line= 35 MOVE.B
(A0,D4),D5 Elemento derecha a D5

00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000BB A1=00000000 A5=00000000 SR=0010000000001000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=000000CC D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003012 Code=1183 4000 Line= 36 MOVE.B
D3,(A0,D4) Elemento izquierda pasa a derecha

00004000: AA CC CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000BB A1=00000000 A5=00000000 SR=0010000000001000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=000000CC D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003016 Code=1185 2000 Line= 37 MOVE.B
D5,(A0,D2) Elemento derecha pasa a izquierda

00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000002 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000BB A1=00000000 A5=00000000 SR=0010000000001000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=000000CC D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301A Code=5344 Line= 38 SUB.W
#1,D4 Apunta anterior elemento por la derecha

18
00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000001 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000BB A1=00000000 A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000 A6=00000000
D3=000000CC D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301C Code=5242 Line= 39 ADD.W
#1,D2 Apunta siguiente elemento por la izquierda

00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000001 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000BB A1=00000000 A5=00000000 SR=0010000000000000
D2=00000002 D6=00000000 A2=00000000 A6=00000000
D3=000000CC D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000301E Code=B242 Line= 40 CMP D2,D1
Comprueba fin de bucle

00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000001 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000BB A1=00000000 A5=00000000 SR=0010000000000100
D2=00000002 D6=00000000 A2=00000000 A6=00000000
D3=000000CC D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003020 Code=6EE8 Line= 41 BGT BUCLE
Repite bucle si no se ha terminado de invertir

00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000001 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000BB A1=00000000 A5=00000000 SR=0010000000000100
D2=00000002 D6=00000000 A2=00000000 A6=00000000
D3=000000CC D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00003022 Code=4E75 Line= 44 RTS
Retorno a programa principal

00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------

D0=00000004 D4=00000001 A0=00004000 A4=00000000 T_S__INT___XNZVC


D1=00000002 D5=000000BB A1=00000000 A5=00000000 SR=0010000000000100
D2=00000002 D6=00000000 A2=00000000 A6=00000000
D3=000000CC D7=00000000 A3=00000000 A7=00FF0000 SS=01000000
PC=0000100A Code=4E72 2000 Line= 11 STOP
#$2000

19

También podría gustarte