Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arquitectura de Computadores
Control Unit +
Datapath Peripheral 4
Peripheral 2 Peripheral 3
Cache Memory
ReadInstr
▪ Decodificación de la instrucción para … …
ReadInstr
▪ EOR R7, R9, R10 … …
▪ MOV R0, R1
▪ Existen instrucciones especializadas Datapath Unit DataAddr
en realizar transferencias de memoria A Data
Register
ReadData
R Memory
a registro y viceversa File
B ALU WriteData
▪ LDR R0, [R1]
▪ STR R5, [R4]
Movimiento de datos
Instrucciones que permiten transferir datos entre registros o
registros y memoria
Example1:
ADD R0, R1, R2 // Siempre se ejecuta, no cambia Flags
ADDEQ R0, R1, R2 // Ejecución cond., no cambia Flags
ADDS R0, R1, R2 // Siempre se ejecuta, cambia Flags
ADDEQS R0, R1, R2 // Ejecución cond., cambia Flags
Estructuras Repetitivas (5)
Revisemos este código nuevamente con sentencia for
#define N 5
unsigned int i;
unsigned int vector[N]; Id Dir. Words Memoria
. . .
for (i=0; i<N; i++) { . . .
. . .
vector[i] = i; unknown 0000_0020 XX XX XX XX
} vector[4] 0000_001C XX XX XX XX
vector[3] 0000_0018 XX XX XX XX
Suponemos que vector está
vector[2] 0000_0014 XX XX XX XX
ubicado a partir de la vector[1] 0000_0010 XX XX XX XX
dirección 0x0000000C vector[0] 0000_000C XX XX XX XX
32-bits
Manejo de la Memoria (10)
Revisemos este código con acceso a memoria
#define N 5
unsigned int i;
unsigned int vector[N]; Id Dir. Words Memoria
. . .
for (i=0; i<N; i++) { . . .
. . .
vector[i] = i; unknown 0000_0020 XX XX XX XX
} vector[4] 0000_001C 00 00 00 04
vector[3] 0000_0018 00 00 00 03
Suponemos que vector está
vector[2] 0000_0014 00 00 00 02
ubicado a partir de la vector[1] 0000_0010 00 00 00 01
dirección 0x0000000C vector[0] 0000_000C 00 00 00 00
32-bits
Manejo de la Memoria (11)
Revisemos este código con acceso a memoria
.equ N, 5
#define N 5
LDR R1, =vector
unsigned int i;
MOV R0, #0
unsigned int vector[N];
For1:
CMP R0, #N
for (i=0; i<N; i++) {
BHS EndFor1
vector[i] = i;
LSL R2, R0, #2
}
STR R0, [R1, R2]
Llevar una dirección de ADD R0, R0, #1
memoria a un registro: B For1
LDR RegDest, =Label EndFor1:
vector: .ds.l N
Manejo de la Memoria (12)
Para el manejo de arreglos es posible realizar operaciones de:
▪ Modo pre-indexado: versión aumentada de *(++ptr) o *(--ptr)
▪ LDR/LDRB Rdest, [Raddrbase, Rindex/#Imm]!
▪ STR/STRB Rdest, [Raddrbase, Rindex/#Imm]!
LDR R0, [R1, R2]! // R1 R1 + R2
// R0 Mem[R1]
▪ Modo post-indexado versión aumentada de *ptr++ o *ptr--
▪ LDR/LDRB Rdest, [Raddrbase], Rindex/#Imm
▪ STR/STRB Rdest, [Raddrbase], Rindex/#Imm
STR R0, [R1], #4 // R0 Mem[R1]
// R1 R1 + 4
Manejo de la Memoria (13)
El loop anterior con modo post-indexado
.equ N, 5
#define N 5
LDR R1, =vector
unsigned int i;
MOV R0, #0
unsigned int vector[N];
For1:
unsigned int *ptr;
CMP R0, #N
ptr=vector;
BHS EndFor1
STR R0, [R1], #4
for (i=0; i<N; i++) {
ADD R0, R0, #1
*ptr++ = i;
B For1
}
EndFor1:
vector: .ds.l N
Agenda para la sección