Presentacion 2-Arc
Presentacion 2-Arc
Presentacion 2-Arc
modos de direccionamiento
Las instrucciones máquina son las acciones
elementales que puede ejecutar una
computadora.
Una acción compleja deberá codificarse como
una secuencia de instrucciones máquina y se
denomina programa.
En general, una instrucción codifica una
operación básica que la computadora realiza
sobre unos datos ubicados en la memoria o en
los registros de la máquina y a los que accede
utilizando un modo de direccionamiento.
Formato de las instrucciones y
modos de direccionamiento
La arquitectura de un procesador
entendida como el conjunto de recursos
operativos disponibles por un
programador
a nivel de lenguaje máquina queda
definida por el repertorio de instrucciones
(ISA: Instruction Set Architecture).
Formato de las instrucciones y
modos de direccionamiento
Por consiguiente, la arquitectura ISA de un
procesador viene determinada por los
siguientes factores:
a) Tipos de datos y formatos que pueden
manejar las instrucciones:
Naturales
Enteros
Reales
Caracteres, etc.
Formato de las instrucciones
b) Modos de direccionamiento de los datos
ubicados en la memoria:
Inmediato
Directo
Indirecto, etc.
Estos dos factores son determinantes para la implementación eficiente de
estructuras complejas de datos en un lenguaje de alto nivel.
Propiedad de ortogonalidad
c) Conjunto básico de operaciones que se
pueden realizar sobre los datos:
Suma
Resta
División, etc.
Diremos que un repertorio es ortogonal cuando
las instrucciones puedan combinar los
elemento de los tres factores anteriores sin
ninguna restricción.
La ortogonalidad completa no se da en ningún
repertorio de máquina real.
Propiedad de ortogonalidad
Formato de las instrucciones
Las informaciones relativas a los tres 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 instrucción se compone de los
siguientes campos:
Formato de las instrucciones
Código de operación (CO)
Operandos fuente (OP1, OP2,...)
Operando destino o Resultado (OPd)
Instrucción siguiente (IS)
El CO determina la operación que se realiza
sobre OP1,OP2,...
El resultado se deja en OPd. Lo normal es que
el número de operandos fuente de un repertorio
no pase de 2.
IS es la dirección de la instrucción siguiente
Formato de las instrucciones
queda implícita en todas las
instrucciones que se trata de la
instrucción siguiente del programa
salvo en las instrucciones de salto
Los repertorios de instrucciones
podemos clasificarlos atendiendo a
los siguientes criterios:
Diseño del repertorio de
instrucciones.
A) Número de operandos explícitos por
instrucción
a) 3 operandos explícitos
Ejemplo: ADD B,C,A A B+C
Máxima flexibilidad
Ocupa mucha memoria si los operandos no
están en registros
Diseño del repertorio de
instrucciones.
b) 2 operndos explícitos
CO OP1(fuente 1) OP2(fuente 2)
Ejemplo: ADD B, C B B+C
Reduce el tamaño de la instrucción
Se pierde uno de los operandos
Diseño del repertorio de
instrucciones.
c) 1 operando explícito
CO OP(fuente 1 )
Ejemplo: ADD B
Acumulador <Acumulador> + B
Supone que destino es un registro
predeterminado (acumulador)
Se pierde un operando fuente
Diseño del repertorio de
instrucciones.
d) 0 operandos explícitos
CO
Ejemplo: ADD
cima de pila <cima de pila> + <cima de pila – 1>
Se trata de computadores que trabajan sobre una pila
Diseño del repertorio de
instrucciones.
Diseño del repertorio de
instrucciones.
B) Forma de almacenar operandos en la CPU
a) Arquitectura de pila (HP 3000/70)
b) Arquitectura de acumulador (Motorola
6809)
c) Arquitectura de registros de propósito
general (IBM 360)
Diseño del repertorio de
instrucciones.
Ejemplo: código máquina en cada una de las
tres alternativas correspondiente a la sentencia
de asignación C := A + B
Diseño del repertorio de
instrucciones.
Las arquitecturas de registros de
propósito general se clasifican a
su vez atendiendo al número
máximo de operandos (2 ó 3) que
pueden tener las instrucciones de
la ALU y cuantos de ellos se
pueden ubicar en memoria:
Diseño del repertorio de
instrucciones.
(operandos - en memoria)
(3 - 0) Arquitectura registro-registro (también
llamada de carga-almacenamiento). Utilizan
tres operandos totales y cero en memoria.
Formato de longitud fija y codificación simple de
las instrucciones que pueden ejecutarse en un
número similar de ciclos. Facilitan un modelo
simple de generación de código apara el
compilador. SPARC, MIPS, PowerPC
Diseño del repertorio de
instrucciones.
(operandos - en memoria)
(2 - 1) Arquitectura registro-memoria. Utilizan
dos operandos totales con uno ubicado en la
memoria. Intel 80X86, Motorola 68000
(3 - 3 ) Arquitectura memoria-memoria. Utilizan
tres operandos totales con la posibilidad de ser
ubicados los tres en memoria. VAX
Códigos de operación de longitud
fija y variable
Una máquina con un formato de instrucción que
dedica n bits al CO permitirá 2n instrucciones
diferentes, cada una de las cuales puede tener
diferente número de operandos (0, 1, 2, 3, etc.).
Los bits del campo OPERANDOS se pueden
utilizar para extender el CO de aquellas
instrucciones con menor número de operandos.
Ejemplo
Partimos de una máquina con instrucciones de
longitud fija de 24 bits y consideraremos los
siguientes supuestos:
1) La máquina dispone de 16 registros
generales
4 4 16
CO R OP
En este caso se pueden codificar 16
instrucciones de 2 operandos: uno en registro y
el otro en memoria
2) Si queremos extender el CO se puede
utilizar una de las 16 combinaciones del CO
(quedarían 15 con 2 operandos)
Por ejemplo CO = 1111, dando la posibilidad
de codificar 16 instrucciones de 1 operando en
memoria.
Si queremos seguir extendiendo el CO
podemos utilizar CO = 1111 1111, (quedarían
15 con 1 operando)
para definir instrucciones sin operandos (216 =
65.536)
En la siguiente tabla se resume el proceso
descrito.
Otra alternativa: dedicar 2 bits para indicar si la
instrucción tiene 0, 1 o 2 operandos:
2 2 4 16
L CO R OP
En este caso podemos codificar los siguientes
grupos de instrucciones:
L = 00 CO de 2 bits 4 instrucciones de 2
operandos
L = 01 CO de 6 bits 64 instrucciones de 1
operando
L = 10 CO de 22 bits 4.194.304
instrucciones de 0 operandos
Optimización del CO variable en función
de la frecuencia de las instrucciones.
Una posibilidad a la hora de codificar las
operaciones de un repertorio de instrucciones
es utilizar algún criterio de óptimo.
En este sentido tenemos dos alternativas:
a) Frecuencia de aparición en el programa
optimización de memoria
b) Frecuencia de ejecución en el programa
optimización del tráfico CPU-Memoria
La alternativa b) es la más interesante en la
actualidad, pues prima la velocidad de
ejecución sobre la memoria necesaria para
almacenar el programa.
Para optimizar el CO se puede utilizar la
codificación de Huffman que veremos con el
siguiente Ejemplo
Ejemplo: Supongamos las siguientes
frecuencias de ejecución de 7 tipos diferentes
de instrucciones:
Con CO de longitud fija se necesitarían 3 bits.
Para obtener el código de Huffman procedemos
de la siguiente manera:
1) Se escriben en una columna las
instrucciones y a su derecha su frecuencia de
ejecución.
Cada elemento de la columna será un nodos
terminal del árbol de decodificación.
2) Se unen las dos frecuencias menores de la
columna anterior con sendos arcos,
obteniéndose un nuevo nodo cuyo valor será la
suma de los nodos de procedencia.
3) Se repite el paso 2) hasta llegar a la raíz del
árbol que tendrá valor 1
4) Comenzando en la raíz, asignamos 0 (1) al
arco superior y 1 (0) al inferior hasta llegar a los
nodos terminales
5) Se obtiene el código de cada instrucción
recorriendo el árbol de la raíz a la instrucción y
concatenando los valores de los arcos del
camino
Para nuestro ejemplo tendremos lo siguiente:
Propiedades generales del
direccionamiento.
Resolución
Es la menor cantidad de información
direccionada por la arquitectura.
El mínimo absoluto es un bit, aunque esta
alternativa la utilizan pocos procesadores, por
ejemplo, el iAPX432 de Intel (1981)
Requiere un gran número de bits para expresar
las direcciones de una cierta cantidad de
información y mucho tiempo para alinearlos
correctamente.
Lo más frecuente en los procesadores actuales
es utilizar resoluciones de 1 o 2 bytes.
La resolución puede ser diferente para
instrucciones y datos aunque lo normal es que
coincida.
Orden de los bytes en memoria
El concepto de endian lo introdujo Cohen para
expresar la forma como se ordenan los bytes de
un escalar de varios bytes.
Modo big-endian: almacena el byte más
significativo del escalar en la dirección más baja
de memoria
Modo little-endian: almacena el byte más
significativo del escalar en la dirección más alta
de memoria.
Ejemplo: el hexadecimal 12 34 56 78
almacenado en la dirección de memoria 184
tendrá la siguiente organización en cada uno de
los modos:
Alineación
Un objeto de datos de n bytes ubicado en la
dirección de memoria D se dice que está
alineado si
D mod n = 0
Determinadas máquinas sólo permiten accesos
alineados
La falta de alineación implica complicaciones
hardware
Los programas con accesos alineados se
ejecutan más rápidamente
Para alinear datos se utiliza una red de
alineación.
Espacios de direcciones
En un mismo procesador pueden diferenciarse
hasta 3 espacios de direcciones diferentes:
• Espacio de direcciones de registros
• Espacio de direcciones de memoria
• Espacio de direcciones de entrada/salida
Los espacios de direcciones de memoria y
entrada/salida de algunos procesadores están
unificados (un solo espacio), ocupando los
puertos de E/S direcciones de ese espacio
único.
En estos procesadores (ejemplo, 68000) no
existen instrucciones específicas de E/S, para
esta función se utilizan las de referencia a
memoria (carga y almacenamiento) con las
direcciones asignadas a los puertos.
Modos de direccionamiento.
Los modos de direccionamiento determinan la
forma como el operando (OPER) presente en
las instrucciones especifican la dirección
efectiva (DE) del dato operando (DO) sobre el
que se realiza la operación indicada por CO.
Inmediato.
CO OPER
DO = OPER
El dato operando se ubica en la propia
instrucción ==> no requiere accesos a
memoria.
Se suele utilizar para datos constantes del
programa
El tamaño está limitado por el número de bits
de OPER
Implícito
CO
El dato operando se supone ubicado en algún
lugar específico de la máquina, por ejemplo,
una pila
Directo
(memoria o registros)
OPER = Dirección de memoria o de un registro
DE = OPER
DO = <OPER>
La especificación de un registro requiere menor
número de bits que la de una posición de
memoria
El acceso a los registros es más rápido que a
Memoria
El direccionamiento directo a memoria se
conoce como absoluto
A veces se limita el número de bits de OPER
limitando el acceso a sólo una parte de la
memoria que suele ser la correspondiente a las
direcciones más bajas (página cero)
Indirecto
(memoria)
OPER = Dirección de memoria
DE = <OPER>
DO = <<OPER>>
Indirecto
Permite el tratamiento de una dirección de
memoria como un dato
Permite el paso por referencia de parámetros a
subrutinas
Permite referenciar un espacio mayor de
direcciones
Indirecto
Indirecto
(registro)
OPER = Dirección de un registro
DE = <OPER>
DO = <<OPER>>
Modos con desplazamiento.
Calculan la dirección efectiva (DE) sumando al
contenido de un registro el operando declarado
en la instrucción (OPER) que se interpreta
como un desplazamiento respecto al contenido
del registro.
La distinta naturaleza del registro hace que se
diferencien tres modos con desplazamiento.
Todos explotan la proximidad de los datos o
instrucciones referenciadas para utilizar menor
número de bits en el campo OPER.
Direccionamiento base más
desplazamiento
DE = <Registro base> + OPER; OPER =
desplazamiento
Se utiliza para la reubicación de datos y
programas en memoria
Direccionamiento base más
desplazamiento
Ejemplo: A = B + C
Programa
LOAD RB,1; RD1 (RD1 <-- <RB>+1) <RB> + 1 = B
LOAD RB, 2; RD2 (RD2 <-- <RB>+2) <RB> + 2 = C
ADD RD1; RD2 (RD1 <-- <RD1> + <RD2>)
STORE RD1; RB,0 (A<--RB>+0 <-- <RD1>) <RB> + 0 = A
Direccionamiento relativo
DE = <Contador de programa> + OPER
OPER = desplazamiento
Se utiliza en las instrucciones de salto para
conseguir la reubicación de estas instrucciones
El desplazamiento en estas instrucciones tiene
signo (c2) lo que significa que el salto relativo
se puede dar hacia posiciones anteriores o
siguientes a la ocupada por la instrucción.
Direccionamiento relativo
Direccionamiento indexado
DE = <Registro índice> + OPER
OPER = desplazamiento
Se utiliza para recorrer estructuras lineales
como los arrays
Par facilitar su uso se suele complementar con
el pre o post incremento o decremento del
registro índice
Direccionamiento indexado
Resumen de los tipos de
direccionamiento
Modos compuestos
Veremos los modos compuestos analizando el
repertorio de algunos procesadores
Modos de direccionamiento del MC 68.X
Directo
Memoria o absoluto
DE = OPER
DO = <DE>
con OPER de 16 y 32 bits
Registro
Ri = OPER
DO = <Ri>
con Ri cualquier registro
Inmediato
DO = OPER
enteros: 8, 16 y 32 bits
reales: 32 bits (simple precisión), 64 bits
(doble precisión) y 96 bits (precisión extendida)
Indirecto registro
puro
DE = <Ri>, con Ri cualquier registro
Indirecto registro con postincremento
DE = <Ri>; Ri <Ri> + Inc
con Inc = 1, 2 ó 4 bytes
Indirecto registro con predecremento
Ri <Ri> - Dec, DE = <Ri>
con Dec = 1, 2 ó 4 bytes
Indirecto con desplazamiento
(= base + desplazamiento)
DE = <Ri> + Despla
Indirecto registro indexado (= base +
desplazamiento indexado)
DE = <Ri> + <Rj>xEscala + Despla
con Escala = 1, 2, 4, 8 bytes
Indirecto memoria
Postindexado (= base + desplazamiento
indirecto indexado + desplazamiento)
DE = <<Ri> + despla1> + <Rj>xEscala +
Despla2
Preindexado (base + desplazamiento indexado
indirecto + desplazamiento)
DE = <<Ri> + Despla1 + <Rj>xEscala> +
Despla2
Relativo
Básico
DE = <CP> + Despla
Indexado con desplazamiento
DE = <CP> + <Rj>xEscala + Despla
Indirecto memoria preindexado
DE = <<CP> + Despla1 + <Rj>xEscala> +
despla2