Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Y
MICROCONTROLADORES
PRACTICA 1
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:
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.
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:
BUCLE
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
*-----------------------------------------------------------
* Comienza bucle
*-----------------------------------------------------------
6
APARTADO 6- MODOS DE DIRECCIONAMIENTO
Se han utilizado para la subrutina diferentes tipos de direccionamiento:
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
*-----------------------------------------------------------
* Comienza bucle
*-----------------------------------------------------------
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:
00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---
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 -------------
---
00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---
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 -------------
---
00004000: 0A 0B 0C 0D 0E FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0A 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
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 -------------
---
00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0E 0B 0C 0D 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
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 -------------
---
00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
13
00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
00004000: 0E 0D 0C 0B 0A FF FF FF FF FF FF FF FF FF FF FF -------------
---
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.
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
15
PC=00003002 Code=E249 SHIFT_ROT
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: DD CC BB AA FF FF FF FF FF FF FF FF FF FF FF FF ----------------
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 ----------------
00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
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 ----------------
00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA CC BB DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA CC CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
18
00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00004000: AA BB CC DD FF FF FF FF FF FF FF FF FF FF FF FF ----------------
19