Implementación y manejo de estructuras de datos en ensamblador.

Anuncio
Universidad
Rey Juan Carlos
ESTRUCTURA Y TECNOLOGÍA DE
COMPUTADORES
MC68000 y las estructuras de datos
Luis Rincón Córcoles
Licesio J. Rodríguez-Aragón
MC68000 y las estructuras de datos
Programa
1.
2.
3.
4.
Introducción.
Tiras de caracteres.
Vectores.
Matrices bidimensionales.
2
MC68000 y las estructuras de datos
Bibliografía
 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.
 F.G. McCABE. High-Level Programmer’s Guide to the 68000. Prentice-Hall, 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,
1993
3
MC68000 y las estructuras de datos
1. Introducción
 Una estructura de datos es una agrupación de datos simples bajo una
denominación única.
• Los datos simples pueden ser todos del mismo tipo o de tipos diferentes.
 El lenguaje ensamblador dispone de instrucciones que manejan únicamente
datos simples.
• El tratamiendo de estructuras de datos debe llevarse a cabo a través del
tratamiento individual de sus componentes simples, y mediante el auxilio de los
modos de direccionamiento disponibles.
 Se estudiará la definición y manejo de las siguientes estructuras de datos:
•
•
•
•
•
•
Tiras de caracteres
Vectores
Matrices
Estructuras de datos de tipo RECORD
Tablas
Listas encadenadas
 Los modos de direccionamiento a través de puntero cobran gran importancia
en el manejo de las estructuras de datos.
4
MC68000 y las estructuras de datos
2. Tiras de caracteres
 Las tiras o cadenas de caracteres son secuencias de caracteres almacenados
consecutivamente en memoria.
 PASCAL:
tira: ARRAY [ind_min .. ind_max] OF CHAR;
 C:
char tira[N];
• El índice del primer carácter de la tira siempre es 0.
• La cadena puede contener como máximo N caracteres.
• El final de la “parte legible de la tira” está marcado por la aparición de un carácter
ASCII nulo (ordinal 0).
5
MC68000 y las estructuras de datos
Tiras de caracteres
 Ejemplo: tira de 12 caracteres llamada T5, con el contenido “Hola”.
6
MC68000 y las estructuras de datos
MC68000 y las tiras de caracteres: definición
* Almacena como máximo 10 caracteres, contenido inicial indefinido
* Cuidado, habría que poner un nulo en el primer carácter
T1
DS.B
10
* Almacena como máximo 10 caracteres, tira vacía (comienza por nulo)
T2
DC.B
0
DS.B
9
* Almacena como máximo 5 caracteres, terminado en nulo
T3
DC.B
‘T’,’i’,’r’,’a’,0
* Almacena como máximo 17 caracteres, terminado en nulo
T4
DC.B
“Esto es una tira”,0
7
MC68000 y las estructuras de datos
MC68000 y las tiras de caracteres: manipulación
Cálculo de la longitud de una tira
CONST N = 10;
VAR t: ARRAY [0..N-1] OF CHAR;
lon: INTEGER;
BEGIN
lon := 0;
WHILE t[lon] <> CHR(0) DO
lon := lon+1;
END.
#define N 10
char t[N];
int lon;
lon = 0;
for ( ; t[lon]; )
lon := lon+1;
CONST
N
VAR
T
LON
EQU
EQU
EQU
DS.B
DS.W
...
CLR.W
WHILE EQU
LEA
MOVE.W
EXT.L
ADDA.L
TST.B
BEQ
BLOQUE ADDQ.W
BRA
FIN
EQU
*
10
*
N
1
LON
*
T,A0
LON,D0
D0
D0,A0
(A0)
FIN
#1,LON
WHILE
*
8
MC68000 y las estructuras de datos
3. Vectores
 Los vectores son secuencias unidimensionales de longitud definida que
contienen datos simples del mismo tipo y tamaño.
• Son como las tiras de caracteres, aunque en principio no tienen un dato delimitador
que marque dónde se encuentra el final del vector.
• Los elementos de un vector se encuentran almacenados consecutivamente en
memoria.
 PASCAL:
vector: ARRAY [ind_min .. ind_max] OF tipodato;
 C:
tipodato vector[N];
• El vector tiene N elementos.
• El índice del primer elemento del vector siempre es 0.
9
MC68000 y las estructuras de datos
Vectores
 Ejemplo: vector V con N elementos de t octetos cada uno.
10
MC68000 y las estructuras de datos
MC68000 y los vectores: definición
* Definición para
valores iniciales:
* Definición 1
LV1
EQU
TV1
EQU
V1
DS.B
un
vector
de
10
2
LV1*TV1
10
datos
de
tamaño
palabra, sin
Número de elementos del vector
Tamaño de un elemento del vector
Reserva
* Vector de 10 datos de 32 bits en complemento a 2 con valor inicial
V2
EQU
*
DC.L
10,3300,-2342,90,0,3333333,-27688,$B2001234,4,-21
TEV2
EQU
4
Tamaño de un elemento del vector
LV2
EQU
10
Número de elementos del vector
11
MC68000 y las estructuras de datos
MC68000 y los vectores: manipulación
Acceso a un elemento conocido de un vector
CONST N = 10;
VAR v: ARRAY [0..N-1] OF INTEGER;
el: INTEGER;
BEGIN
el := v[5];
END.
#define N 10
int v[N];
int el;
CONST
N
VAR
V
TEV
EL
EQU
EQU
EQU
DS.W
EQU
DS.W
...
LEA
MOVE.W
*
10
*
N
2
1
V,A0
5*TEV(A0),EL
el = v[5];
12
MC68000 y las estructuras de datos
MC68000 y los vectores: manipulación
Acceso a un elemento genérico de un vector
CONST N = 10;
VAR v: ARRAY [0..N-1] OF INTEGER;
el: INTEGER;
i: INTEGER;
BEGIN
el := v[i];
END.
CONST
N
VAR
V
TEV
EL
I
#define N 10
int v[N];
int el, i;
EQU
EQU
EQU
DS.W
EQU
DS.W
DS.W
...
LEA
MOVE.W
MULU
MOVE.W
*
10
*
N
2
1
1
V,A0
I,D0
#TEV,D0
0(A0,D0.L),EL
el = v[i];
13
MC68000 y las estructuras de datos
MC68000 y los vectores: manipulación
Suma de los elementos de un vector
CONST N = 10;
VAR v: ARRAY [0..N-1] OF INTEGER;
suma, i: INTEGER;
BEGIN
suma := 0;
FOR i:= 0 TO N-1 DO
suma := suma+v[i];
END.
CONST
N
VAR
V
TEV
I
SUMA
EQU
EQU
EQU
DS.W
EQU
DS.W
DS.W
*
10
*
N
2
1
1
CLR.W
EQU
CLR.W
MOVE.W
SUBQ.W
CMP.W
BLT
BRA
INC
ADDQ.W
BLOQUE EQU
LEA
MOVE.W
MULS
MOVE.W
ADD.W
CMP.W
BNE
FIN
EQU
FOR
SUMA
*
I
#N,D7
#1,D7
I,D7
FIN
BLOQUE
#1,I
*
V,A5
I,D6
#TEV,D6
0(A5,D6.L),D5
D5,SUMA
I,D7
INC
*
14
MC68000 y las estructuras de datos
4. Matrices bidimensionales
 Una matriz bidimensional es una agrupación de tamaño definido, organizada
por n filas y m columnas, que contiene datos simples del mismo tipo y tamaño.
• Una matriz es un vector de n vectores, todos ellos de la misma longitud y con
elementos del mismo tipo.
 PASCAL:
matriz: ARRAY [minfil .. maxfil, mincol .. maxcol] OF tipodato;
 C:
tipodato matriz[NF][NC];
•
•
•
•
El índice de la primera fila siempre es 0.
El índice de columna del primer elemento de columa siempre es 0.
Cada fila tiene NF elementos.
Cada columna tiene NC elementos.
15
MC68000 y las estructuras de datos
Matrices bidimensionales
 En las matrices definidas en Pascal
y C, los elementos se almacenan en
memoria consecutivamente por filas.
 Las matrices definidas en Fortran
se almacenan por columnas.
16
MC68000 y las estructuras de datos
MC68000 y las matrices: definición
* Dos definiciones para matriz de 3x4 elementos de tamaño palabra
* Definición 1
NFILM1
EQU
3
Número de filas
NCOLM1
EQU
4
Número de columnas
TEM1
EQU
2
Tamaño de un elemento
M1
DS.B
NFILM1*NCOLM1*TEM1
* Definición 2
M2
EQU
*
DC.W
3,-1,$C430,32
Fila 0
DC.W
0,3451,20831,-333
Fila 1
DC.W
-23,99,4,55
Fila 2
NFILM2
EQU
3
Número de filas
NCOLM2
EQU
4
Número de columnas
TEM2
EQU
2
Tamaño de un elemento
17
MC68000 y las estructuras de datos
MC68000 y las matrices: manipulación
Acceso a un elemento conocido de una matriz
CONST NF = 5;
NC = 6;
VAR
m: ARRAY [0..NF-1,0..NC-1] OF INTEGER;
el: INTEGER;
BEGIN
el := m[2,3];
END.
#define NF 5
#define NC 6
int m[NF,NC];
int el;
CONST
NF
NC
VAR
TEM
M
EL
EQU
EQU
EQU
EQU
EQU
DS.B
DS.W
...
LEA
MOVE.W
*
5
6
*
2
NF*NC*TEM
1
M,A0
(2*NC+3)*TEM(A0),EL
el = m[2,3];
18
MC68000 y las estructuras de datos
MC68000 y las matrices: manipulación
Acceso a un elemento genérico de una matriz
CONST NF = 5;
NC = 6;
VAR
m: ARRAY [0..NF-1,0..NC-1] OF INTEGER;
el, i, j: INTEGER;
BEGIN
el := m[i,j];
END.
CONST
NF
NC
VAR
TEM
M
EL
I
J
#define NF 5
#define NC 6
int m[NF,NC];
int el, i, j;
el = m[i,j];
EQU
EQU
EQU
EQU
EQU
DS.B
DS.W
DS.W
DS.W
...
LEA
MOVE.W
MULS
CLR.L
MOVE.W
ADD.L
ASL.L
MOVE.W
*
5
6
*
2
NF*NC*TEM
1
1
1
M,A0
I,D0
#NC,D0
D1
J,D1
D1,D0
#1,D0
0(A0,D0.L),EL
19
MC68000 y las estructuras de datos
MC68000 y las matrices: manipulación
Suma de los elementos de una matriz
CONST NF = 5; NC = 6;
VAR i, j, suma: INTEGER;
m: ARRAY [0..NF-1,0..NC-1] OF INTEGER;
BEGIN
suma := 0;
FOR i:= 0 TO NF-1 DO
FOR j := 0 TO NC-1 DO
suma := suma+m[i,j];
END.
CONST
NF
NC
VAR
I
J
SUMA
M
TEM
EQU
EQU
EQU
EQU
DS.W
DS.W
DS.W
DS.W
EQU
*
5
6
*
1
1
1
NF*NC
2
FORI
INCI
BLOQUEI
FORJ
INCJ
BLOQUEJ
FINJ
FINI
CLR.W
CLR.W
MOVE.W
SUBQ.W
CMP.W
BLT
BRA
ADDQ.W
EQU
CLR.W
MOVE.W
SUBQ.W
CMP.W
BLT
BRA
ADDQ.W
LEA
MOVE.W
MULS
CLR.L
MOVE.W
ADD.L
ASL.L
MOVE.W
ADD.W
CMP.W
BNE
EQU
CMP.W
BNE
EQU
SUMA
I
#NF,D7
#1,D7
I,D7
FINI
BLOQUEI
#1,I
*
J
#NC,D6
#1,D6
J,D6
FINJ
BLOQUEJ
#1,J
M,A0
I,D0
#NC,D0
D1
J,D1
D1,D0
#1,D0
0(A0,D0.L),D2
D2,SUMA
J,D6
INCJ
*
I,D7
INCI
*
20
Descargar