Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arquitectura de Procesadores II
Arquitectura de Procesadores II
Describir los modos de direccionamiento de los datos en la memoria desde las instrucciones
y las posibilidades que aporta cada modo.
Las instrucciones mquina son las acciones elementales que puede ejecutar un computador.
Una accin compleja deber codificarse como una secuencia de instrucciones mquina en lo que se
denomina un programa.
La arquitectura de un procesador entendida como el conjunto de recursos operativos
disponibles por un programador a nivel de lenguaje mquina queda definida por el repertorio de
instrucciones (ISA: Instruction Set Architecture).
En general, una instruccin codifica una operacin bsica que el computador realiza sobre
unos datos ubicados en la memoria o en los registros de la mquina y a los que accede utilizando
un modo de direccionamiento.
Por consiguiente, la arquitectura ISA de un procesador viene determinada por los siguientes
factores:
Tipos de datos y formatos que pueden manejar las instrucciones: naturales, enteros, reales,
caracteres, etc.
Modos de direccionamiento de los datos en memoria: inmediato, directo, indirecto, etc. Estos
dos factores son determinantes para la implementacin eficiente de las estructuras complejas de
datos de un lenguaje de alto nivel.
Conjunto bsico de operaciones que se pueden realizar sobre los datos: suma, resta, etc.
Propiedad de ortogonalidad
Diremos que un repertorio es ortogonal cuando las instrucciones puedan combinar los
valores de los tres factores anteriores sin ninguna restriccin. La ortogonalidad completa no se da
en ningn repertorio de mquina real.
tipo de direccionamiento
.
indirecto -directo
--
inmediato --
XOR
SUB
MUL
operaciones
tipo de datos
2.
En la actualidad existe sin embargo otro modelo de ejecucin muy utilizado en los
programas que se disean para operar en la red y que aporta mayor portabilidad. Se trata de
utilizar una mquina virtual, por ejemplo la Mquina Virtual de Java (JVM), entre el compilador y
el leguaje mquina del procesador. Esta alternativa presenta la ventaja de la portabilidad del
cdigo generado para esta mquina virtual (Bytecode para JVM)), siempre que el comportamiento
de la mquina virtual se defina dentro de un estndar admitido por la comunidad de usuarios. En
la siguiente figura se representa el esquema de operacin de la ejecucin de un programa con
mquina virtual:
3.
Las informaciones relativas a los cuatro factores anteriores se codifican en cada una de las
instrucciones siguiendo un formato preestablecido. El formato determinar la longitud en bits de
las instrucciones y los campos que codifican el valor de los factores citados. En general una
instruccin se compone de los siguientes campos:
OP1
OP2
..........
OPd
IS
3 operandos explcitos
CO
OP1 (fuente 1)
OP2 (fuente 2)
OP3 (destino)
Mxima flexibilidad
3.1.2.
AB+C
2 operndos explcitos
CO
OP1 (fuente 1)
ejemplo: ADD B, C
3.1.3.
CB+C
1 operando explcito
CO
OP2 (fuente 2)
OP1 (fuente)
ejemplo: ADD B
Acumulador <Acumulador> + B
Supone que fuente 1 y destino es un registro predeterminado (acumulador)
Se pierde un operando fuente
3.1.4.
0 operandos explcitos
CO
ejemplo: ADD
cima de pila <cima de pila> + <cima de pila - 1>
Se trata de computadores que trabajan sobre una pila
4
3.1.5.
Ejemplo:
E = (A B)*(C + D)
2 operandos
1 operando
ADD C, D
LOAD A
SUB A, B
SUB B
MUL D, B
STORE A
MOV B, E
LOAD C
ADD D
MUL A
STORE E
3 operandos
ADD C, D, C
SUB A, B, A
MUL A, C, E
0 operandos
(PUSH) LOAD A
(PUSH) LOAD B
SUB
(PUSH) LOAD D
(PUSH) LOAD C
ADD
MUL
(PULL) STORE E
Arquitectura de pila
Ejemplo: HP 3000/70
3.2.2.
Arquitectura de acumulador
3.2.3.
Ejemplo de cdigo mquina para cada una de las tres alternativas correspondiente a la
sentencia de asignacin C := A + B
Pila
PUSH A
PUSH B
ADD
POP C
C=A+B
Acumulador
LOAD A
ADD
B
STORE C
Conjunto de registros
LOAD A, R1
ADD
B, R1
STORE R1, C
( 2
( 3
3, etc.). Los bits del campo OPERANDOS se pueden utilizar para extender el CO de aquellas
instrucciones con menor nmero de operandos.
Ejemplo: Partimos de una mquina con instrucciones de longitud fija de 24 bits y
consideraremos los siguientes supuestos:
1) La mquina dispone de 16 registros generales
4
16
CO
OP
1111 1111
OP
OP
.
.
.
.
.
15 instrucciones de
2 operandos
(CO de 4 bits)
15 instrucciones de
1 operando
OP
0000 0000 0000 0000
0000 0000 0000 0001
.
.
.
1111 1111 1111 1111
(CO de 8 bits)
216 = 65.536
instrucciones de
0 operandos
(CO de 24 bits)
2
CO
16
OP
4 instrucciones de 2 operandos
L = 01 CO de 6 bits
64 instrucciones de 1 operando
Frecuencia de ejecucin
ADD
0.53
SUB
0.25
MUL
0.12
DIV
0.03
STA
0.03
LDA
0.02
JMP
0.02
Con CO de longitud fija su codificacin necesitara 3 bits. Para obtener el cdigo de Huffman
procedemos de la siguiente manera:
1) Se escriben en una columna las instrucciones y a su derecha su frecuencia de ejecucin.
Cada elemento de la columna ser un nodo terminal del rbol de decodificacin.
2) Se modifica la columna actual uniendo las dos frecuencias menores de dicha columna con
sendos arcos, obtenindose un nuevo nodo cuyo valor ser la suma de los nodos de procedencia.
3) Se repite el paso 2) hasta llegar a la raz del rbol que tendr valor 1
4) Comenzando en la raz, asignamos 0 (1) al arco superior y 1 (0) al inferior hasta llegar a
los nodos terminales
5) Se obtiene el cdigo de cada instruccin recorriendo el rbol de la raz a la instruccin y
concatenando los valores de los arcos del camino
Para nuestro ejemplo tendremos lo siguiente:
ADD
0.53
SUB
0.25
MUL
0.12
DIV
0.03
STA
0.03
LDA
0.02
JMP
0.02
1
0.47
0
0
0.22
0.06
1
0.10
0
0
1
1
0.04
Tipo de instrucciones
Frecuencia de ejecucin
Cdigo de Huffman
ADD
SUB
MUL
DIV
STA
LDA
JMP
0.53
0.25
0.12
0.03
0.03
0.02
0.02
0
10
110
11100
11101
11110
11111
Resulta cdigos de 1, 2, 3 y 5 bits con una longitud media ln dada por la siguiente expresin:
Resolucin
MC68020
VAX-11
IBM/370
B1700
B6700
iAPX432
Instrucciones
16
16
48
Datos
48
3.4.2.
El concepto de endian lo introdujo Cohen para expresar la forma como se ordenan los bytes
de un escalar constituido por ms de 1 byte.
3.4.2.1. Modo big-endian
little-endian
184
12
184
78
185
34
185
56
186
56
186
34
187
78
187
12
3.4.3.
Alineacin
Un objeto de datos de n bytes ubicado en la direccin de memoria D se dice que est alineado
si D mod n = 0
Objeto de datos direccionado (tamao)
Alineaciones correctas
byte
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
0, 2, 4, 6, 8, 10
palabra (4 bytes)
0, 4, 8, 12
0, 8, 16
Para alinear datos se utiliza una red de alineacin. En el caso de la figura para
acceder a una palabra no alineada sern necesarios 2 accesos para obtener la parte
alta y baja
32 bits
32 bits
32 bits
32 bits
a la CPU
3.4.4.
Espacios de direcciones
4.
Modos de direccionamiento.
4.1. Implcito
CO
El dato operando se supone ubicado en algn lugar especfico de la mquina, por ejemplo,
una pila.
9
4.2. Inmediato.
CO
OPER
DO = OPER
El dato operando se ubica en la propia instruccin ==> no requiere accesos a memoria.
Se suele utilizar para datos constantes del programa
El tamao est limitado por el nmero de bits de OPER
OPER
DO
A veces se limita el nmero de bits de OPER, limitando as el acceso a slo una parte
de la memoria que suele ser la correspondiente a las direcciones ms bajas (pgina
cero)
OPER
DE
DO
CO
2n-p direcciones
direccin
p bits
n-p bits
CO
direccin
p bits
2n-p direcciones
n-p bits
2n direcciones
direccin
n-bits
Memoria
OPER
DE
DO
OPER
DO
Registro Base
Ejemplo: A = B + C
Programa
LOAD RB,1; RD1
LOAD RB, 2; RD2
ADD RD1; RD2
STORE RD1; RB,0
<RB> + 1 = B
<RB> + 2 = C
<RB> + 0 = A
Memoria
RB
Registros de datos
RD1
RD2
11
Direccionamiento relativo
El desplazamiento en estas instrucciones tiene signo (c2) lo que significa que el salto
relativo se puede dar hacia posiciones anteriores o posteriores a la ocupada por la
instruccin.
Memoria
CO
OPER
DO
Contador de Programa
4.6.3.
Direccionamiento indexado
Par facilitar su uso se le suele aadir el pre o post incremento o decremento del
registro ndice
Memoria
CO
OPER
DO
Registro Indice
Tambin se puede utilizar el pre o post incremento o decremento del registro ndice
Memoria
OPER
DO
Registro Indice
12
instruccin
Indirecto (registro)
registro
Indirecto (memoria)
direccin
Indexado
registro
memoria
direccin
operando
direccin
registro
desplazamiento
operando
direccin
base
registro
direccin
operando
desplazamiento
Relativo
registro
direccin
operando
direccin
OPER
Inmediato
DO = OPER
- enteros: 8, 16 y 32 bits
- reales: 32 bits (simple precisin), 64 bits (doble precisin) y 96 bits (precisin extendida)
Directo
- Memoria o absoluto
DE = OPER, DO = <DE>, con OPER de 16 y 32 bits
- Registro
Ri = OPER, DO = <Ri>, con Ri cualquier registro
Indirecto registro
- puro
DE = <Ri>, con Ri cualquier registro
Memoria
CO
OPER
Ri
DO
DE
13
Ri <Ri> + Inc,
CO
OPER
Ri
+ Inc
DO
DE
DE = <Ri>,
CO
OPER
Ri
- Dec
DO
DE
Despla
DO
DE
Ri
Escala
CO
Despla
DO
DE
Rj
Ri
Indirecto memoria
- Postindexado (= base + desplazamiento indirecto indexado + desplazamiento)
DE = <<Ri> + despla1> + <Rj>xEscala + Despla2
CO
Despla1
Despla2
Memoria
DIR
Ri
DE
DO
Rj
+
Escala
14
Despla1
Despla2
+
Memoria
Ri
DIR
+
DE
Rj
DO
Escala
Relativo
- Bsico
DE = <CP> + Despla
Memoria
CO
Despla
DO
DE
CP
Escala
CO
Despla
DO
DE
Rj
CP
Despla1
Despla2
Memoria
DIR
DE
CP
DO
Rj
+
Escala
15
Despla1
Despla2
+
Memoria
CP
DIR
+
DE
Rj
DO
Escala
0, 8 32 bits
Escala
(1,2,4,8)
Memoria
+
Registro de segmento
SR
DE
LA
+
segmento
(6 registros SR)
Paginacin
Inmediato
DO = A (1,2,4 bytes)
Registro
LA = R,
Desplazamiento
LA = <SR> + A
Base
LA = <SR> + <B>
16
Base + desplazamiento
LA = <SR> + <B> + A
Indexado
LA = <SR> + <I>xEscala + A
Base + desplazamiento indexado
LA = <SR> + <B> + <I> + A
Base + desplazamiento indexado escalado
LA = <SR> + <B> + <I>xEscala + A
Relativo
LA = <PC> + A
A) Valor no modificado
MOV
R0, #1234
R0 := 1234(10
MOV
R0, R1
R0 := R1
17
R0 := R1 << 2 unidades
R0 := R1 << R2 unidades
R0 := R1 >> 2 unidades
R0 := R1 >> R2 unidades
E) Rotacin derecha
MOV
MOV
R0 := R1 rotado 2 unidades
R0 := R1 rotado R2 unidades
R0 := R1 rotado 1 unidad
M(memoria)
LDR
LDR
LDR
LDR
STR
R0, [R1]
R0, [R1, #4]
R0, [R1, R2]
R0, [R1, R2, LSL #2]
R0, [R1, #2]
18
B) Direccionamiento pre-indexado
M(memoria)
LDR
LDR
LDR
STR
C) Direccionamiento post-indexado
M(memoria)
LDR
LDR
LDR
STR
5.
R0, [R1], #4
R0, [R1], R2
R0, [R1], R2, LSL #2
R2, [R5], #8
19
en la pila asociada al programa. Dada la naturaleza recursiva de las llamadas, pueden existir en la
pila ms de un RA para la misma funcin (tantos como llamadas).
Supongamos el siguiente perfil de programa C:
Main( )
{
.
.
.
... = ... fe(...) ...
.
.
.
}
fa (...)
{
.
.
.
}
fb (...)
{
.
.
.
... = ... fb(...) ...
.
.
.
... = ... fc(...) ...
.
.
.
}
fc (...)
{
.
.
.
... = ... fc(...) ...
.
.
.
... = ... fb(...) ..
.
.
.
}
fd (...)
{
.
.
.
}
fe (...)
{
.
.
.
... = ... fc(...) ...
.
.
.
}
fa
fb
fc
fd
fe
20
RA main
RA fe
PRAG
Puntero al Registro de Activacin Global
RA fc
(1 llamada)
RA fc
(2 llamada)
Registros de Activacin
visibles desde la ltima
llamada a fc
RA fb
(1 llamada)
RA fb
(2 llamada)
RA fc
(3 llamada)
PRAL
Crecimiento de la PILA
En los lenguajes de tipo Pascal un bloque puede ser un procedure o una function, y el
concepto de visibilidad adquiere una estructura anidada. Los bloques de un programa de este tipo
presentan una estructura jerrquica y la visibilidad de variables desde la llamada a un bloque se
extiende a todos los bloques (ltimas llamadas) en el camino hasta la raz (main)
main
Ba
Bc
Bb
Bd
Be
Bf
Bh
Bi
Bg
program main(..)
procedure a
begin
proced ure c
begin
...
end
proced ure d
begin
...
end
end
procedure b
begin
proced ure e
begin
... fu nction h (..)
end
proced ure f
begin
... fu nction i (..)
end
proced ure g
begin
...
end
end
end
21
RA main
RA Ba
PRAG
RA Bb
(1 llamada)
RA Bb
(2 llamada)
Registros de Activacin
visibles desde la ltima
llamada al bloque Bh
RA Bf
RA Be
Display del RA Bh
RA Bh
(1 llamada)
RA Bh
(2 llamada)
PRAL
Despla
PRA G
Variable g lobal
RA
(procedimiento
en ejecucin)
Despla
PRA L
Variable local
Variables locales:
Variables globales:
Ba
Bb
Bl
Bc
Bd
22
RA main
RA Ba
PRAG
(1 llamada)
RA Ba
Despla 2
(2 llamada)
RA Bb
RA Bc
Despla 1
RA Bd
display
PRAL
Var. referenciada
RA proc. Ejec.
Despla
Puntero local
PRAL
DE = <<PRAL> + Despla>
direccionamiento base + desplazamiento indirecto
RA proc. refer.
Despla 2
Referencia a var.
Inicio RA referenc.
Despla 1
display
RA proc. Ejec.
PRAL
23
RA proc. Ejec.
1 elemento
Factor_escala (=1,2,4,8)
Despla
Indexacin
array
RX
X
n-simo elemento
PRAL
Factor_escala (=1,2,4,8)
Despla 2
Indexacin
array
RX
n-simo elemento
Despla 1
Inicio RA referenc.
display
RA proc. Ejec.
PRAL
1 elemento
Indexacin
array
RX
n-simo elemento
RA proc. Ejec.
Despla
Puntero local
PRAL
24
Despla 1
Despla 2
record
n-simo campo
PRAL
record RR
Despla 1
Despla 2
Despla 3
2 campo de R (z)
PRAL
RR: record
x: real
R: record
y: boolean
z: integer
.
.
.
end R
.
.
.
end RR
acceso al campo z de R
record
RA proc. ejec.
Despla 1
puntero local
PRAL
000
11
0
11
0
MEMORIA
ACUMULADOR
(AC)
Registro de estado
1 0
NZ
FFF
Todas las instrucciones tienen longitud fija de 12 bits y estn compuestas por un cdigo de
operacin (CO) situado en los 4 bits ms significativos (del 8 al 11) y una direccin/operando
situada en los 8 bits menos significativos (del 0 al 7). Los 8 bits de la direccin/operando tienen el
significado de direccin en las instrucciones de salto y referencia a memoria, y significado de dato
en las instrucciones de operando inmediato.
11
8 7
CO
DIRECCION/OPERANDO
DIR/OPE
COP
Semntica
LDA
DIR
0001
AC <-- MEMORIA(DIR)
STA
DIR
0010
SUM
DIR
0011
LDAI
OPE
0100
AC <-- 0000&OPERANDO
SUMI
OPE
0101
NOR
DIR
0110
JZ
DIR
0111
JNZ
DIR
1000
JN
DIR
1001
JNN
DIR
1010
HALT
0000
parada de la mquina
26
Programa
Inicializa 10 posiciones de memoria (de la 20 a la 29) con un contenido igual a su direccin.
Direccin Simblico
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
LDA 4
SUMI 1
STA
4
LDA 14
STA ---SUMI 1
STA ndice
LDA 30
NOR 30
SUMI 1
SUM ndice
JNZ 0
HALT
30
20
Binario
0001 00000100
0101 00000001
0010 00000100
0001 00001110
0010 00010011
0101 00000001
0010 00001110
0001 00001101
0110 00001101
0101 00000001
0011 00001110
1000 00000000
0000 00000000
000000011110
000000010100
comentario
AC <-- (STA -----)
AC <-- (STA -----) + 1
MEMORIA(4) <-- (STA ------ + 1)
AC <-- ndice
MEMORIA(ndice) <-- ndice
AC <-- ndice + 1
ndice <-- ndice + 1
AC <-- lmite
AC <-- complemento1(lmite)
AC <-- complemento2(lmite)
AC <-- ndice - lmite
Vuelve a direccin 0 si resultado 0
Parada
lmite
ndice
LDA 14
SUMI 1
STA 14
STA (ind) 14
27