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