Nothing Special   »   [go: up one dir, main page]

Presentacion 2-Arc

Descargar como ppt, pdf o txt
Descargar como ppt, pdf o txt
Está en la página 1de 75

Formato de las instrucciones y

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)

CO OP1 OP2 *** OPd IS


Formato de las instrucciones


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

CO OP1(fuente 1) OP2(fuente 2) OP3 (destino)


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

También podría gustarte