El Computador simple 2

Anuncio
Estructura de Computadores
El computador simple
------------------------------------------------------------------------Autores: David Guerrero. Alberto Molina e Isabel Gómez
Usted es libre de copiar, distribuir y comunicar públicamente la obra y de hacer obras derivadas siempre que se cite la fuente y se respeten las condiciones
de la licencia Attribution-Share alike de Creative Commons.
Texto completo de la licencia: http://creativecommons.org/licenses/by-nc-sa/3.0/es/
--------------------------------------------------------------------------
Guión
El punto de partida: La calculadora
Automatización en la ejecución (CS1)
Almacenamiento de los datos y ampliación
de modos de direccionamiento (CS2)
Diversificación de instrucciones. Ejecución
no secuencial (CS3)
2
CS2
Es necesario aumentar la capacidad de almacenamiento de
datos del sistema y que no quede únicamente limitada a sus 8
registros.
Para ello se ampliará la arquitectura anterior y al nuevo
sistema le llamaremos el computador simple 2 (CS2).
Existen dos opciones
almacenamiento de datos:
para
dotar
al
sistema
de
Utilizar un único sistema de memoria para datos e
instrucciones lo que se denomina arquitectura Von Neumann.
Utilizar sistemas de memoria distintos para datos e
instrucciones, lo que es denominado arquitectura Harvard.
3
CS2
En la arquitectura Harvard, las características de las memorias y los
buses de interconexión de las mismas pueden diferir. Normalmente los
datos requieren memoria de lectura y escritura
En la arquitectura de Von Neuman el sistema de memoria es único y por
lo tanto tanto memoria como buses son únicos.
El disponer de dos sistemas de memoria separados dota de eficiencia al
sistema ya que normalmente es el acceso a memoria lo que enlentece su
funcionamiento y en este caso se puede estar accediendo a instrucciones
y datos simultáneamente.
Las CPU modernas incorporan aspectos de ambas arquitecturas. La
memoria cache interna a la CPU se separa en dos (datos e
instrucciones), pero la memoria principal es única. Desde el punto de
vista del programador se trata de una arquitectura de Von Neumann,
pero desde el punto de vista del hardware es Harvard.
4
CS2
El CS2 dispondrá
Harvard.
de
una
arquitectura
El conjunto de instrucciones debe ser
ampliado ya que se requiere manejar los
datos almacenados en la memoria.
5
CS2
Conjunto de instrucciones (ISP) del CS2
CO
SINTAXIS
FUNCIÓN
00000
00001
00010
00011
11111
01000
01010
11010
01111
10111
ST Y o Z,Rf
LD Rd, Y o Z
STS dir, Rf
LDS Rd,dir
LDI Rd,dato
ADD Rd,Rf
SUB Rd,Rf
SUBI Rd,dato
MOV Rd,Rf
STOP
MEMDAT(Y o Z)←Rf
Rd←MEMDAT(Y o Z)
MEMDAT(dir)←Rf
Rd←MEMDAT(dir)
Rd←dato
Rd←Rd+Rf
Rd←Rd-Rf
Rd←Rd-dato
Rd←Rf
NOP
Las 4 primeras instrucciones son para intercambio de datos con la
memoria.
Es necesario aumentar los bits del código de operación.
Se han añadido nuevas formas de acceso a los operandos (modos de
direccionamiento).
6
CS2
Conjunto de instrucciones (ISP) del CS2
CO
SINTAXIS
FUNCIÓN
00000
00001
00010
00011
11111
01000
01010
11010
01111
10111
ST Y o Z,Rf
LD Rd, Y o Z
STS dir, Rf
LDS Rd,dir
LDI Rd,dato
ADD Rd,Rf
SUB Rd,Rf
SUBI Rd,dato
MOV Rd,Rf
STOP
MEMDAT(Y o Z)←Rf
Rd←MEMDAT(Y o Z)
MEMDAT(dir)←Rf
Rd←MEMDAT(dir)
Rd←dato
Rd←Rd+Rf
Rd←Rd-Rf
Rd←Rd-dato
Rd←Rf
NOP
Arquitectura load/store
No se opera contra la
Memoria. Solo Se intercambian datos con
ella en sentido memoria->registros
O registros->memoria
7
CS2
Conjunto de instrucciones (ISP) del CS2
CO
SINTAXIS
FUNCIÓN
00000
00001
00010
00011
11111
01000
01010
11010
01111
10111
ST X o Y,Rf
LD Rd, X o Y
STS dir, Rf
LDS Rd,dir
LDI Rd,dato
ADD Rd,Rf
SUB Rd,Rf
SUBI Rd,dato
MOV Rd,Rf
STOP
MEMDAT(Y o Z)←Rf
Rd←MEMDAT(Y o Z)
MEMDAT(dir)←Rf
Rd←MEMDAT(dir)
Rd←dato
Rd←Rd+Rf
Rd←Rd-Rf
Rd←Rd-dato
Rd←Rf
NOP
Las operaciones de suma y resta
se realizan sólo con datos guardados
En registros
8
CS2
Conjunto de instrucciones (ISP) del CS2
CO
SINTAXIS
FUNCIÓN
00000
00001
00010
00011
11111
01000
01010
11010
01111
10111
ST Y o Z,Rf
LD Rd, X o Y
STS dir, Rf
LDS Rd,dir
LDI Rd,dato
ADD Rd,Rf
SUB Rd,Rf
SUBI Rd,dato
MOV Rd,Rf
STOP
MEMDAT(Y o Z)←Rf
Rd←MEMDAT(Y o Z)
MEMDAT(dir)←Rf
Rd←MEMDAT(dir)
Rd←dato
Rd←Rd+Rf
Rd←Rd-Rf
Rd←Rd-dato
Rd←Rf
NOP
Se ha aumentado el número de bits del código
de operación. Pero no se utilizan todas las combinaciones
posibles que serían 32.
9
CS2
Conjunto de instrucciones (ISP) del CS2
CO
SINTAXIS
FUNCIÓN
00000
00001
00010
00011
11111
01000
01010
11010
01111
10111
ST Y o Z,Rf
LD Rd, X o Y
STS dir, Rf
LDS Rd,dir
LDI Rd,dato
ADD Rd,Rf
SUB Rd,Rf
SUBI Rd,dato
MOV Rd,Rf
STOP
MEMDAT(Y o Z)←Rf
Rd←MEMDAT(Y o Z)
MEMDAT(dir)←Rf
Rd←MEMDAT(dir)
Rd←dato
Rd←Rd+Rf
Rd←Rd-Rf
Rd←Rd-dato
Rd←Rf
NOP
Formas de direccionar
Directamente con el valor de la dirección de la memoria de datos
Con un dato guardado en un registro que tiene el valor de la dirección
Contenido del registro
Con el dato que esta guardado en la propia instrucción
10
CS2
Modos de direccionamiento del CS2:
Directo de registro:
MOV Rd,Rf
El dato se encuentra en un registro.
Indirecto de registro:
ST Yo Z,Rf
El dato se encuentra en una posición de memoria cuya
dirección está almacenada en un registro denominado
“registro base”. (En este caso dos de los 8 que tiene la
arquitectura, R6 o Y; R7 o Z).
STS dir, Rf
Absoluto:
El dato se encuentra en una posición de memoria cuya
dirección se da como operando.
Inmediato: SUBI Rd,dato
El dato se encuentra en la propia instrucción.
11
MOV Rd,Rf
MOV R6,R2
ST Yo Z,Rf
ST Y,R2
STS dir, Rf
STS $2,R2
Antes de la ejecución
Pos cont
$03 R6 $00 $34
$58 R2 $01 $56
$02 $78
$03 $00
Memoria
Antes de la ejecución
Pos cont
$03 R6 $00 $34
$58 R2 $01 $56
$02 $78
$03 $00
Memoria
Antes de la ejecución
Pos cont
$03 R6 $00 $34
$58 R2 $01 $56
$02 $78
$03 $00
Memoria
Después de la ejecución
Pos cont
$58 R6 $00 $34
$58 R2 $01 $56
$02 $78
$03 $00
Memoria
Después de la ejecución
Pos cont
$03 R6 $00 $34
$58 R2 $01 $56
$02 $78
$03 $58
Memoria
Después de la ejecución
Pos cont
$03 R6 $00 $34
$58 R2 $01 $56
$02 $58
$03 $00
Memoria
12
SUBI Rd,dato
SUBI R6,7
Antes de la ejecución
Pos cont
$03 R6 $00 $34
$58 R2 $01 $56
$02 $78
$03 $00
Memoria
Después de la ejecución
Pos cont
$FC R6 $00 $34
$58 R2 $01 $56
$02 $78
$03 $00
Memoria
13
CS2
Formato de instrucción del CS2
formato
15
14
13
12
11
10
9
8
Este formato es necesario para los modos de
direccionamiento absoluto e inmendiato.
Campo para guardar la dirección o el dato
de 8 bits.
7
6
5
4
3
-
-
-
-
-
A
instrucción con
operando
registro
B
instrucción con
operando
memoria o
inmediato
código de operación
2
1
0
registro operando 2
(registro base en
ST/LD)
registro destino
(fuente en ST)
dato inmediato / dirección del dato
Las instrucciones son de 16 bits y siguen ocupando una palabra de memoria. En el
CS2 el ancho de la memoria de código será de 16 bits. También será necesario que
el registro IR sea de este tamaño.
14
CS2
Formato de instrucción del CS2
formato
15
14
13
12
11
10
9
8
7
6
5
4
3
-
-
-
-
-
A
instrucción con
operando
registro
B
código de operación
instrucción con
operando
memoria o
inmediato
2
1
0
registro operando 2
(registro base en
ST/LD)
registro destino
(fuente en ST)
dato inmediato / dirección del dato
MOV R3,R2
ST Y,R2
STS $F3,R2
01111 011 - - - - - 010
00000 010 - - - - - 110
00010 010 1111 0011
15
CS2
Implementación del CS2
3
0
1
2
3
4
5
6
7
8
8
210
SA
0
1
2
3
4
5
6
7
8
R0
R1
R2
R3
R4
R5
R6 - Y
R7 - Z
COMANDOS
A LA
UNIDAD DE DATOS
WREG
w0
w1
w2
w3
w4
w5
w6
w7
0
1
2
3
4
5
6
7
2
1
0
IR[10:8]
SA
5
data
3
CODMEM
256x16
IR[7:0]
8
dir
INM
OUT
8
PC[8]
S (OUT=A+B)
R (OUT=A-B)
TA (OUT=A)
TB ( UT=B)
WMAR
W MEM RMEM
DATMEM
256x8
dir
IPC
CL PC
MAR[8]
B
W IR
16
IR[2:0]
8
A
IR[15:11]
IR[16]
SB
START
STOP
16
210
0
1
UNIDAD DE CONTROL
DEL CS2
8
AC[8]
WAC
RAC
Registro visible
8
Registro oculto
16
CS2
Implementación del CS2
3
0
1
2
3
4
5
6
7
8
8
210
SA
0
1
2
3
4
5
6
7
8
R0
R1
R2
R3
R4
R5
R6 - Y
R7 - Z
COMANDOS
A LA
UNIDAD DE DATOS
WREG
w0
w1
w2
w3
w4
w5
w6
w7
0
1
2
3
4
5
6
7
2
1
0
IR[10:8]
SA
5
data
3
CODMEM
256x16
IR[7:0]
8
dir
INM
OUT
8
PC[8]
S (OUT=A+B)
R (OUT=A-B)
TA (OUT=A)
TB ( UT=B)
WMAR
WMEM RMEM
DATMEM
256x8
dir
IPC
CL PC
MAR[8]
B
WIR
16
IR[2:0]
8
A
IR[15:11]
IR[16]
SB
START
STOP
16
210
0
1
UNIDAD DE CONTROL
DEL CS2
8
AC[8]
WAC
RAC
Registro visible
8
Registro oculto
Parte añadida con objeto de guardar mas datos
Además de los guardados en la pila de registros
17
CS2
Implementación del CS2
3
0
1
2
3
4
5
6
7
8
8
210
SA
0
1
2
3
4
5
6
7
8
R0
R1
R2
R3
R4
R5
R6 - Y
R7 - Z
COMANDOS
A LA
UNIDAD DE DATOS
WREG
w0
w1
w2
w3
w4
w5
w6
w7
0
1
2
3
4
5
6
7
2
1
0
IR[10:8]
SA
5
data
3
CODMEM
256x16
IR[7:0]
8
dir
INM
OUT
8
PC[8]
S (OUT=A+B)
R (OUT=A-B)
TA (OUT=A)
TB ( UT=B)
WMAR
W MEM RMEM
DATMEM
256x8
dir
IPC
CL PC
MAR[8]
B
W IR
16
IR[2:0]
8
A
IR[15:11]
IR[16]
SB
START
STOP
16
210
0
1
UNIDAD DE CONTROL
DEL CS2
8
AC[8]
WAC
RAC
Registro visible
8
Memoria de lectura/escritura con capacidad
28x8. Terminales de datos bidireccionales
Registro oculto
18
CS2
Implementación del CS2
3
0
1
2
3
4
5
6
7
8
8
210
SA
0
1
2
3
4
5
6
7
8
R0
R1
R2
R3
R4
R5
R6 - Y
R7 - Z
COMANDOS
A LA
UNIDAD DE DATOS
WREG
w0
w1
w2
w3
w4
w5
w6
w7
0
1
2
3
4
5
6
7
2
1
0
IR[10:8]
SA
5
data
3
CODMEM
256x16
IR[7:0]
8
dir
INM
OUT
8
PC[8]
S (OUT=A+B)
R (OUT=A-B)
TA (OUT=A)
TB ( UT=B)
WMAR
W MEM RMEM
DATMEM
256x8
dir
IPC
CL PC
MAR[8]
B
WIR
16
IR[2:0]
8
A
IR[15:11]
IR[16]
SB
START
STOP
16
210
0
1
UNIDAD DE CONTROL
DEL CS2
8
AC[8]
WAC
RAC
Registro visible
8
Registro oculto
Registro que guarda de manera temporal
las direcciones que van a ser accedidas en la
memoria de datos
19
CS2
Implementación del CS2
3
0
1
2
3
4
5
6
7
8
8
210
SA
0
1
2
3
4
5
6
7
8
210
R0
R1
R2
R3
R4
R5
R6 - Y
R7 - Z
COMANDOS
A LA
UNIDAD DE DATOS
WREG
w0
w1
w2
w3
w4
w5
w6
w7
0
1
2
3
4
5
6
7
2
1
0
IR[10:8]
SA
5
data
3
CODMEM
256x16
IR[7:0]
8
dir
INM
OUT
8
PC[8]
S (OUT=A+B)
R (OUT=A-B)
TA (OUT=A)
TB ( UT=B)
WMAR
W MEM RMEM
DATMEM
256x8
dir
IPC
CL PC
MAR[8]
B
W IR
16
IR[2:0]
8
A
IR[15:11]
IR[16]
SB
START
STOP
16
Solo entradas
0
1
UNIDAD DE CONTROL
DEL CS2
8
AC[8]
WAC
RAC
Registro visible
8
Registro oculto
El camino para intercambiar datos entre los
registros y la memoria siempre pasa por la
ALU y el acumulador
20
CS2
Implementación del CS2
3
0
1
2
3
4
5
6
7
8
8
210
SA
0
1
2
3
4
5
6
7
8
R0
R1
R2
R3
R4
R5
R6 - Y
R7 - Z
COMANDOS
A LA
UNIDAD DE DATOS
WREG
w0
w1
w2
w3
w4
w5
w6
w7
0
1
2
3
4
5
6
7
2
1
0
IR[10:8]
SA
5
data
3
CODMEM
256x16
IR[7:0]
8
dir
INM
OUT
8
PC[8]
S (OUT=A+B)
R (OUT=A-B)
TA (OUT=A)
TB ( UT=B)
WMAR
W MEM RMEM
DATMEM
256x8
dir
IPC
CL PC
MAR[8]
B
W IR
16
IR[2:0]
8
A
IR[15:11]
IR[16]
SB
START
STOP
16
210
0
1
UNIDAD DE CONTROL
DEL CS2
8
AC[8]
WAC
RAC
Registro visible
8
Registro oculto
Camino para que los datos vayan
de la memoria a los registros. Usa el bus
compartido.
21
CS2
Implementación del CS2
3
0
1
2
3
4
5
6
7
8
8
210
SA
0
1
2
3
4
5
6
7
8
R0
R1
R2
R3
R4
R5
R6 - Y
R7 - Z
COMANDOS
A LA
UNIDAD DE DATOS
WREG
w0
w1
w2
w3
w4
w5
w6
w7
0
1
2
3
4
5
6
7
2
1
0
IR[10:8]
SA
5
16
IR[2:0]
data
3
00001000
0
1
CODMEM
256x16
IR[7:0]
8
OUT
8
PC[8]
S (OUT=A+B)
R (OUT=A-B)
TA (OUT=A)
TB ( UT=B)
STS dir, Rf
STS 8,R3
-0010 011 00001000
WMAR
W MEM RMEM
DATMEM
256x8
dir
IPC
CL PC
MAR[8]
B
W IR
dir
INM
A
IR[15:11]
IR[16]
SB
START
STOP
16
210
8
UNIDAD DE CONTROL
DEL CS2
8
AC[8]
WAC
RAC
Registro visible
8
Registro oculto
Direccionamiento absoluto e inmediato. Necesidad del MUX
a la entrada de la ALU
22
CS2
Implementación del CS2
3
0
1
2
3
4
5
6
7
8
8
210
SA
0
1
2
3
4
5
6
7
8
R0
R1
R2
R3
R4
R5
R6 - Y
R7 - Z
COMANDOS
A LA
UNIDAD DE DATOS
WREG
w0
w1
w2
w3
w4
w5
w6
w7
0
1
2
3
4
5
6
7
2
1
0
IR[10:8]
SA
5
16
IR[2:0]
data
3
8
CODMEM
256x16
IR[7:0]
8
OUT
8
PC[8]
S (OUT=A+B)
R (OUT=A-B)
TA (OUT=A)
TB ( UT=B)
STS dir, Rf
STS 8,R3
-0010 011 00001000
WMAR
W MEM RMEM
DATMEM
256x8
dir
IPC
CL PC
MAR[8]
B
W IR
dir
INM
A
IR[15:11]
IR[16]
SB
START
STOP
16
210
0
1
UNIDAD DE CONTROL
DEL CS2
8
AC[8]
WAC
RAC
00001000
8
Registro visible
Registro oculto
Direccionamiento absoluto e inmediato. Necesidad del MUX
a la entrada de la ALU
23
CS2
Modificaciones en la arquitectura del CS2: todo lo que se ha
añadido es para dotar al sistema de almacenamiento de datos
en memoria.
Sistema de memoria de datos.
Registro de direcciones de la memoria (MAR).
Acumulador (AC). Se ha añadido este registro a la salida de
la ALU porque esta debe compartir el bus.
Multiplexor a la entrada de la ALU porque esta debe
transferir datos tanto de los registros como de los 8 bits
menos significativos del registro IR a MAR en el caso de
direccionamientos absoluto e indirecto.
Aumento del tamaño de palabra en la memoria de código
Aumento del tamaño del registro IR
24
CS2
Descripción RT de los nuevos componentes
W
R
SISTEMA DE MEMORIA DE DATOS
(MEMDAT)
A7-0
D7-0
8
8
8
IN
W MAR
OUT
W
MAR ←
OUT:=
0
1
MAR
IN
MAR
MAR
WR
MEMDAT[A7-0]←
D7-0:=
00
01
10
11
MEMDAT[A7-0]
MEMDAT[A7-0]
D7-0
PROHIBIDO
H.I.
MEMDAT[A7-0]
H.I.
PROHIBIDO
8
8
IN
AC
W OUT
R
8
WR
AC ←
OUT:=
00
01
10
11
AC
AC
IN
IN
H.I.
AC
H.I.
AC
25
CS2
ST YoZ,Rf
1. AC←REG[IR2-0]
2. MAR←AC; AC←REG[IR10-8]
3.MEM[MAR]←AC
TB WAC
RAC WMAR TA WAC
RAC WMEM
3
0
1
2
3
4
5
6
7
8
8
210
SA
0
1
2
3
4
5
6
7
8
R0
R1
R2
R3
R4
R5
R6 - Y
R7 - Z
COMANDOS
A LA
UNIDAD DE DATOS
WREG
w0
w1
w2
w3
w4
w5
w6
w7
0
1
2
3
4
5
6
7
2
1
0
IR[10:8]
SA
5
IR[16]
CODMEM
256x16
IR[7:0]
8
dir
INM
OUT
8
PC[8]
S (OUT=A+B)
R (OUT=A-B)
TA (OUT=A)
TB ( UT=B)
W MAR
W MEM RMEM
DATMEM
256x8
dir
IPC
CLPC
MAR[8]
B
A
Los valores almacenados
en IR debe
corresponder a los
registros base y fuente
data
3
8
W IR
16
IR[2:0]
SB
START
STOP
IR[15:11]
16
210
0
1
UNIDAD DE CONTROL
DEL CS2
8
AC[8]
WAC
RAC
Registro visible
8
Registro oculto
26
CS2
Descripción de las microoperaciones de las instrucciones de intercambio
De datos con la memoria
CO (I15 I14I13 I12 I11)
00000
00001
00010
00011
Instrucción
ST YoZ,Rf
LD Rd,YoZ
STS dir,Rf
LDS Rd,dir
Micro 1
AC←YoZ
TB WAC
AC←YoZ
TB WAC
AC←dir
TB WACINM
AC←dir
TB WACINM
Micro 2
MAR←AC
RAC WMAR
AC←Rf
TA WAC
MAR←AC
RAC WMAR
MAR←AC
RAC WMAR
AC←Rf
TA WAC
MAR←AC
RAC WMAR
Micro 3
MEM(MAR)←AC
RAC WMEM
RD←MEM(MAR)
RMEM WREG
MEM(MAR)←AC
RAC WMEM
RD←MEM(MAR)
RMEM WREG
27
CS2
Descripción de las microoperaciones de las instrucciones cuyos operandos
Están en registros
CO (I15 I14I13 I12 I11)
01000
01010
01111
Instrucción
ADD Rd,Rf
SUB Rd,Rf
MOV Rd,Rf
Micro 1
AC←RD+RF
S WAC
AC←RD-RF
R WAC
AC←RF
TB WAC
Micro 2
RD←AC
RAC WREG
RD←AC
RAC WREG
RD←AC
RAC WREG
28
CS2
Descripción de las microoperaciones de las instrucciones que
utilizan modo inmediato
CO (I15 I14I13 I12 I11)
11111
11010
Instrucción
LDI Rd,dato
SUBI Rd,dato
Micro 1
AC←dato
TB INM WAC
AC←RD-dato
R INM WAC
Micro 2
RD←AC
RAC WREG
RD←AC
RAC WREG
29
Almacenamiento de datos
Carta ASM del CS2
S0
0
XS
1
PC ← 0
IR ← MEMCOD(PC)
PC ← PC +1
LD
STOP
ST
IR[15:11]
STS
ADD
SUB
AC←R[Sa] + R[Sb]
LDS
LDI
SUBI
AC ←IR[7:0]
AC ←IR[7:0]
MAR ← AC
R[Sa] ← MEMDAT(MAR)
AC ←R[Sb]
AC ←R[Sb]
MAR ← AC
AC ← R[Sa]
MAR ← AC
AC ← R[Sa]
MAR ← AC
MEMDAT(MAR) ← AC
MEMDAT(MAR) ← AC
R[Sa] ← MEMDAT(MAR)
MOV
AC←R[Sa] -R[Sb]
AC ←IR[7:0]
AC ←R[Sa] - IR[7-0]
AC ←R[Sb]
R[Sa] ← AC
30
Almacenamiento de datos
Ejemplo de uso del CS2: Realizar un programa que intercambie dos tablas de 4
datos que se encuentran almacenadas en la memoria en las direcciones $60 y $70.
MEMORIA DE CÓDIGO
Programa
LDI R2,1
LDI Y,$60
LDI Z,$70
LD R3,Y
LD R4,Z
ST Z,R3
ST Y,R4
ADD Y,R2
ADD Z,R2
LD R3,Y
LD R4,Z
ST Z,R3
ST Y,R4
ADD Y,R2
ADD Z,R2
LD R3,Y
LD R4,Z
ST Z,R3
ST Y,R4
ADD Y,R2
ADD Z,R2
LD R3,Y
LD R4,Z
ST Z,R3
ST Y,R4
STOP
$Posición
contenido
$00
$01
$02
$03
$04
$05
$06
$07
$08
…
$1B
11111
11111
11111
00001
00001
00000
00000
01000
01000
...
10111
01000000001
11001100000
11101110000
011-----110
100-----111
011-----111
100-----110
110-----010
111-----010
--- ---
Pos
contenido
$00
.....
$60
$61
$62
$63
…
$70
$71
$72
$73
...
.....
DATO1TABLA1
DATO2TABLA1
DATO3TABLA1
DATO4TABLA1
...
DATO1TABLA2
DATO2TABLA2
DATO3TABLA2
DATO4TABLA2
MEMORIA DE DATOS
31
Descargar