Operacion interna de un procesador

Transcripción

Operacion interna de un procesador
CAPITULO 4
4.1
OPERACION INTERNA DE UN MICROPROCESADOR
4.1.1 Ejecución de un Programa
Hasta ahora se estudiaron la arquitectura de una CPU, el formato de las instrucciones
y los distintos tipos de instrucciones. Veremos ahora cómo se ejecuta un programa
almacenado en memoria.
Un
programa
almacenado
en
memoria
está
listo
para
ser
ejecutado
por
el
microprocesador (no nos importa cómo fue cargado el programa, por ahora).
Para ser ejecutado, es necesario cargar el PC con la dirección de la primera
instrucción a ser ejecutada. Luego, el PC se incrementa automáticamente recorriendo
secuencialmente los sucesivos lugares de memoria donde se halla el programa. Veamos
el siguiente programa:
mnemónico
1000
PATO
:
binario hex.
LDA A, DATO1
A<--DATO1
LDA A
:
10
LDA B, DAT02
B<--DATO2
LDA B
:
15
ADD B
A<--A+B
ADD B
:
27
JNZ
:
7A
JNZ
PATO
Describamos el funcionamiento del programa anterior:
PC <-- 1000H
1. Trae el código LDA A; PC <-- PC + 1; comienza decodificación de la instrucc.
2. Lee DATO1; PC <-- PC + 1; almacena DATO1 en el registro A.
3. Trae el código LDA B; PC <-- PC + 1; comienza decodificación de la instrucc.
4. Lee DATO2; PC <-- PC + 1; almacena DATO2 en el registro B.
5. Trae el código ADD B; PC <-- PC + 1; comienza decodificación de la instrucción,
suma A + B y lo almacena en A.
6. Trae el código JNZ; PC <-- PC + 1; comienza decodificación de la instrucc.
7. Lee dirección baja de salto; PC <-- PC + 1; almacena en temporario1.
8. Lee dirección alta de salto; PC <-- PC + 1;
almacena
en
temporario2;
si z =
0 : PC <-- temporario1.temporario2.
4.2
CICLOS DE OPERACION
Hay dos operaciones fundamentales que realiza un procesador:
1-
búsqueda
de
la
instrucción:
en
la
cual
el
instrucción:
en la cual
el
procesador
busca
el
código
de
operación(FETCH);
2-
ejecución de la
procesador
ejecuta
la
operación
determinada por la instrucción.
Un procesador se encuentra siempre haciendo una de las dos operaciones anteriores.
A continuación daremos una serie de definiciones:
Ciclo de instrucción: es el tiempo total, medido en números de períodos de reloj, de
duración de un ciclo de búsqueda más uno de ejecución de la instrucción teniendo en
cuenta los sucesivos accesos a memoria en el caso de ser una instrucción de más de un
byte.
Ciclo de máquina: es el tiempo, medido en números de períodos de reloj de duración de
una operación de lectura, de escritura o de búsqueda (Fetch) de una instrucción. Un
ciclo de instrucción está compuesto por uno o varios ciclos de máquina (M1, M2, M3,
M4), dependiendo del tipo de instrucción. Se denomina M1 al ciclo de búsqueda, pues
siempre es el primero de cada ciclo de instrucción. Los ciclos de máquina más comunes
son: Fetch, Memory Read, Memory Write, I/O Read, I/O Write, INA, etc.
Estado de Reloj: es el período del reloj (clock) del microprocesador (T1, T2, T3,
T4). Cada ciclo de máquina esta compuesto por un número entero de pulsos de reloj,
pero no todos los ciclos de máquina tienen el mismo número de estados. El reloj
determina los instantes de la secuencia del flujo de información y el temporizado de
las líneas de control. Un estado o período de reloj es la unidad más pequeña de
actividad, es decir que realiza la ejecución de una o más "micro-instrucciones".
Debido a que un ciclo de máquina requiere 3 actividades básicas como son:
-
enviar direcciones al canal de direcciones,
-
preparar transferencias en el canal de datos,
- realizar la transferencia propiamente dicha (es decir, copiar en un registro o
en
memoria),
es que se requiere, al menos, de 3 períodos de reloj o estados para su desarrollo.
Eventualmente, un cuarto o más ciclos adicionales son necesarios para el caso de un
ciclo de máquina Fetch.
FIGURA 4.1
La mayoría de los microprocesadores, al comienzo de cada ciclo de máquina (T1),
envían
señales
de
control
que
identifican
qué
tipo
de
ciclo
de
máquina
será
ejecutado.
En la fig. 4.1 se muestran los distintos ciclos para el caso de una instrucción de
3 bytes, como es la de almacenar el acumulador A en un lugar de memoria. Incluye un
ciclo de búsqueda del código de operación, 2 ciclos de lectura y uno de escritura
(STA DIRECCION).
En
conclusión,
podemos
decir
que
la
ejecución
de
una
instrucción
(ciclo
de
instrucción) consiste de una secuencia de operaciones de lectura y/o escritura de
memoria llamadas ciclos de máquina. En particular, la búsqueda del OP CODE es un
ciclo de lectura (M1) especial.
4.2.1 Ciclo de Búsqueda y de Ejecución
Ahora
se
describirá
en
detalle
cada
uno
mencionados, y se dará una forma de notación.
de
los
ciclos
fundamentales
antes
Búsqueda de la instrucción
Las tareas realizadas durante esta operación son las siguientes:
1. El Contador de Programa (PC) se transfiere al buffer de direcciones (AB),
durante el tiempo T1.
2. El contenido de memoria apuntado por AB se transfiere al buffer de datos (DB),
y simultáneamente se incrementa el PC en 1. Esto se realiza en T2 y parte de T3.
3. El buffer de datos (DB) se transfiere al registro de instrucciones IR. Esto
ocurre durante T3.
4. Durante T4 comienza a decodificar la instrucción. En este estado determina si
son necesarios otros accesos a memoria (de acuerdo al número de bytes de la
instrucción),
calcula
el
tipo
de
direccionamiento,
y
en
el
caso
que
sea
la
instrucción de 1 byte, debe determinar el número de estados (Ti) necesarios para
completar
la
ejecución
de
la
instrucción
(instrucciones
del
tipo
incrementar
registro de 16 bits).
La notación que se usará para indicar esto es:
M1:
- AB <-- PC
- DB <-- [AB]; PC <-- PC+1
:
lectura de memoria (R/W=1)
- IR <-- DB
:
comienza decodif.de instrucción
- Comienza a ejecutar inst.
:
descripción de la operación
Durante un ciclo de búsqueda, la dirección a la cual va a acceder siempre proviene
del PC, y el registro destino es el IR.
Ejecución de la instrucción
Como sabemos, si la instrucción es de un byte, ésta se podría ejecutar durante el
ciclo de máquina M1. Si es de varias palabras, la instrucción comienza a ejecutarse
durante este ciclo y será necesario para terminar la ejecución realizar nuevos
accesos a memoria para traer los operandos. Para ello es necesario:
1. Transferir el PC al buffer de direcciones (AB), durante el tiempo T1.
2. El contenido de memoria de AB se transfiere al buffer de datos (DB) y se
incrementa el PC en 1. Esto se realiza en T2 y parte de T3.
3. Almacena el dato leído de memoria en un registro temporario o en un registro la
CPU (acumulador, XR, etc.), y se realiza la ejecución de acuerdo a la instrucción.
M2:
- AB <-- PC
- DB <-- [AB]; PC <-- PC+1
- TEMP <-- DB
/
Ri <-- DB / EJECUTA INSTRUCCION.
Como después de M1 se ha decodificado parcialmente la instrucción, la unidad de
control (por un mecanismo de interpretación) sabe que está en el ciclo M2 y debido a
que en el IR se mantiene presente el código de operación, el decodificador de
instrucciones determina cuáles son las señales de control a activar y los sucesivos
pasos a seguir en los restantes ciclos de máquina.
La instrucción de la fig. 4.1 (STA DIR) sería:
M1:
- AB <-- PC
- DB <-- [AB]; PC <-- PC+1
(R/W =1)
- IR <-- STA
PC = 2001
M2:
- AB <-- PC
- DB <-- [AB]; PC <-- PC+1
(R/W = 1)
- TEMP1 <-- 10
PC = 2002
M3:
- AB <-- PC
- DB <-- [AB]; PC <-- PC+1
(R/W = 1)
- TEMP2 <-- 1A
PC = 2003
M4:
- AB <-- Temp1.Temp2
- DB <-- A
- [AB] <-- DB
FIGURA 4.2
Durante un ciclo de ejecución la dirección de accesos de datos puede provenir de
otras fuentes que no sea el PC y el destino de la información nunca es el IR.
4.2.2 Operaciones Realizadas por cada Instrucción de Programa
FIGURA 4.3
4.2.3 Diagrama de Estado de una CPU
Una instrucción se puede dividir en uno o más ciclos de máquina (M1, M2,..., etc.), y
cada ciclo de máquina se compone de un número de estados (períodos de Reloj t1,
t2,...etc.). Durante cada estado se llevan a cabo un conjunto de microoperaciones u
operaciones
internas,
como
se
representa
en
la
fig.
4.4.
Dichos
estados
se
representan por círculos con Ti en su interior.
En esencia, este diagrama trata de describir las operaciones de un ciclo de
máquina
particular.
Un
diagrama
de
estado
es
un
esquema
donde
se
muestra
"aproximadamente" cuáles son las operaciones internas (microoperaciones) realizadas
por el microprocesador en cada estado. La transición entre estados se representa por
flechas, y la transición se produce cuando la condición indicada en cada flecha es
verdadera.
FIGURA 4.4
T1: durante este estado, el procesador emite las señales de estado (status), para
identificar el tipo de ciclo de máquina, y además establece las direcciones válidas
sobre el canal de direcciones para identificar a la memoria o dispositivo I/O.
T2:
durante
este
estado,
la
CPU
emite
las
señales
de
control
apropiadas
para
sincronizar un ciclo de lectura o de escritura (/RD o /WR). Además, en este estado,
incrementa el PC siempre y cuando sea un ciclo FETCH o un ciclo READ
en el cual se
lean datos (operandos) que forman parte de la instrucción. Por último, se muestrea la
señal WAIT.
Twait: el microprocesador entra en este estado en respuesta a una señal wait activa.
Este estado mantiene las mismas condiciones (señales de control, direcciones y datos)
que el estado T2. Por lo tanto, se prolonga el tiempo de acceso a un lugar de memoria
o dispositivo de I/O.
T3: durante este estado se produce, realmente, la transferencia de datos entre la CPU
y el elemento seleccionado. Si el ciclo es FETCH, el registro destino es el IR. Si es
READ, el registro destino es cualquier Ri distinto de IR; si es un WRITE, el
dispositivo seleccionado o la memoria seleccionada, lee del canal de datos.
IF
FETCH, THEN IR <-- DB
ELSE
IR no<-- DB y Ri <-- DB o DB <-- Ri
Al
final
de
T3, se
deshabilitan las líneas de control del ciclo
de
máquina
correspondiente, y se des-selecciona la memoria o dispositivo de I/O seleccionado.
Si es un ciclo FETCH, la CPU entra en el estado T4, en el cual comienza la
decodificación de la instrucción. El resto de los estados serán necesarios en los
casos de instrucciones complejas o de varios períodos de ejecución. Esto lo determina
en T4. Si no es un ciclo FETCH, o termina de reconocer los distintos estados del
FETCH, determina si es el último ciclo de máquina de la instrucción. Si no lo es,
vuelve nuevamente a T1, en caso contrario, debe examinar si hubo alguna interrupción.
Si no la hubo, retorna a T1 para comenzar un nuevo ciclo M1, en caso contrario,
inhibe futuras interrupciones, guarda el PC en la pila y establece en el PC el vector
de interrupción (dirección de salto), comenzando un nuevo ciclo M1-T1.
4.3
CONTROL Y TEMPORIZADO
Un microprocesador es, esencialmente, una máquina secuencial sincrónica cuyos estados
son determinados por las distintas instrucciones, la lógica interna de control y, en
algunos
casos,
por
eventos
externos
como
interrupciones.
El
temporizado
de
un
microprocesador se lleva a cabo por circuitos de reloj que proveen salida de simple
fase o múltiple fase. Como las micro-operaciones está sincronizada con el reloj
maestro, la secuencia de eventos se suceden a intervalos regularmente espaciados de
tiempo, usando para ello los flancos ascendente y descendente.
Un reloj simple provee 2 estados y 2 flancos por período (fig. 4.5A). Un reloj
bifásico provee 3 estados y 4 flancos de reloj (fig. 4.5B).
FIGURA 4.5A
FIGURA 4.5B
Por lo tanto, con reloj de simple fase se necesitan más períodos de reloj que con
un reloj multi-fase.
4.4
OPERACIONES DE LOS CANALES
En esta sección se verá el temporizado necesario para realizar una transferencia de
datos entre la CPU y la
memoria o dispositivo de I/O.
Es necesario conocer el temporizado del canal para realizar la conexión de los
módulos de memoria e I/O (con sus diferentes tiempos de acceso) con la CPU.
Un
ciclo de bus se define como el proceso por el cual una secuencia fija de
señales digitales efectúan una transferencia de datos entre módulos del sistema (CPU,
memoria, disp. I/O). La CPU genera un ciclo de bus y responde el módulo direccionado
por ésta.
Un ciclo de bus puede ser dependiente o independiente del ciclo de máquina. En
algunos microprocesadores, los ciclos de máquina corresponden a ciclos de bus (8085).
En otros, como el 8086, operan asincrónicamente, ya que la unidad de ejecución es
independiente de la unidad de interfaz con el bus.
4.4.1 Funcionamiento del Canal de una CPU
El intercambio de información entre una CPU y los módulos de memoria e I/O se realiza
en los ciclos de buses, y está sincronizado por el reloj de la CPU. Los ciclos de
buses pueden ser de acuerdo a la CPU:
- Reloj de simple fase, de canal no multiplexado (ejemplo: Z-80),
- Reloj de simple fase, de canal multiplexado (ejemplo; 8085),
- Reloj bifásico
(ejemplo: 6800).
4.4.2 Reloj de Simple Fase, de Canal no Multiplexado
FIGURA 4.6
En la figura 4.6 se muestra el diagrama para un microprocesador de reloj simple
fase para el caso de una instrucción del tipo ADI BYTE (A<--A+BYTE).
En el ciclo M1: durante T1 se presenta la dirección de
memoria. En T2 y T3 trae
el código de operación (ADI), incrementa el PC y transfiere el código de operación al
IR. En T4 transfiere el registro A al registro temporario de la ALU.
En el ciclo M2: durante T1 presenta dirección de memoria. En T2 y T3 trae el byte
a memoria y lo almacena en Y, incrementa el PC, realiza la suma.
FIGURA 4.7
En la figura 4.7 se muestra una instrucción del tipo salto condicional en la cual
la duración del ciclo de instrucción depende de la condición. En el caso que sea
verdadera tiene 3 ciclos de máquina; en caso contrario, únicamente 2. Tal como se
desarrolla la ejecución de la instrucción en la fig. 4.7, la condición determina la
longitud de la instrucción. Se podría haber hecho de manera tal que durase el mismo
intervalo de tiempo.
4.4.3 Reloj de Simple Fase, de Canal Multiplexado
Dentro de los sistemas de reloj de simple fase se encuentran implementaciones con
canales multiplexados; es decir, se comparten físicamente algunas líneas, como son
las del canal de datos con las líneas correspondientes a la parte baja de las
direcciones. En este caso, es necesario demultiplexarlas para poder obtener el canal
de direcciones completo. Esto se logra agregando un latch en el canal de datos,
capturando las direcciones con la señal MUX, y la salida del mismo corresponde a las
líneas de direcciones (para el caso particular del microprocesador 8085, la señal MUX
se denomina ALE Address Latch Enable).
FIGURA 4.8
4.4.4 Reloj Bifásico de fases no solapadas
Un concepto diferente en la forma de operación es el de los microprocesadores de 2
relojes Ø1 y Ø2. Estos relojes deben tener la forma de onda de la figura 4.9, por lo
tanto, requieren circuitos generadores de clock especiales.
En una arquitectura de reloj bifásico, el uso del bus de datos se realiza con el
Ø2=1, es decir que una operación de lectura o escritura de memoria se lleva a cabo en
un único período de reloj.
Veremos los dos tipos de operaciones:
Operación de Lectura:
En la figura anterior se muestra una operación de lectura de memoria. El flanco
ascendente de Ø1 (1) inicializa la operación activando la línea R/W y dejando las
direcciones estables, hasta el próximo período. (2) El flanco creciente de Ø2 indica
el momento donde comienza la selección de la memoria, señala el momento en que
comienza una transferencia de información en el bus de datos según indique la línea
E. Si ninguna transferencia es necesaria, E será igual a cero para Ø2=1 y Ø1=0.
(Cuando la ejecución de la instrucción lleva más de un ciclo de reloj). Con Ø1=0 y
Ø2=1 el bus de datos sale de tres estados. Con el flanco descendente de Ø2, los datos
se almacenan en la CPU (3). El tiempo de Ø2=1 determina el tiempo de acceso máximo de
la memoria.
Operación de Escritura:
FIGURA 4.10
La figura 4.10 muestra una operación de escritura. La secuencia es similar a la
anterior con la diferencia de la línea R/W=0. La memoria debe almacenar el dato con
el flanco descendente de Ø2.
Tanto en la figura 4.9 como en la 4.10, la línea E coincide con Ø2, por lo tanto
en este caso se puede eliminar E. Sin embargo, en el caso de eliminar E, es necesario
agregar una (VMA) señal de dirección válida pues puede haber ciclos de ejecución en
el cual no se debe seleccionar a ningún dispositivo y usar a Ø2 como una línea de
control y sincronización de las operaciones de R/W.
Por lo tanto, para habilitar una memoria o un dispositivo de I/O, es necesario
sincronizar la habilitación con Ø2 (fig. 4.11). Generalmente, cuando se piensa en
conectar dispositivos de I/O a un sistema, se le colocan buffers para proteger al
interior del sistema.
FIGURA 4.11
4.5
MODOS DE DIRECCIONAMIENTO
Los distintos modos de direccionamiento determinan las distintas formas de acceder a
datos en celdas de memorias del espacio total de direcciones del procesador.
Normalmente, Modos de Direccionamiento, se refiere a los mecanismos de formación
de la dirección efectiva (EA). La EA es la dirección usada para acceder a un
elemento, en memoria principal, dentro de los registros del microprocesador o de un
dispositivo
de
I/O
(o
sea,
dentro
del
espacio
total
de
direccionamiento
del
microprocesador). Los modos de direccionamiento pueden ser:
- explícitamente especificados por la instrucción,
- implicados por la instrucción.
La "potencia" (la riqueza del conjunto de instrucciones) de un microprocesador
depende, en gran medida, de los distintos modos de direccionamiento provistos.
Un mismo tipo de instrucción puede usar distintos modos de direccionamiento para
acceder a un determinado elemento. No todos los microprocesadores proveen todos los
modos de direccionamiento.
El espacio de direccionamiento de un procesador se puede dividir en 3 clases:
1- Registros del procesador.
2- Memoria principal.
3- Dispositivos externos.
4.5.1 Registros del Procesador
Un método de direccionamiento de registro consiste en dedicar un pequeño campo dentro
del OP CODE de la instrucción para seleccionar el registro.
Este tipo de direccionamiento involucra operaciones internas al microprocesador
(operaciones entre registros internos de la CPU). La dirección efectiva es el número
de un registro que emplea la unidad de control para seleccionar el registro deseado
(fig. 4.12). Este método de direccionamiento se llama implícito o inherente. Incluye
las instrucciones del siguiente tipo: CLEAR A, las de desplazamiento (SHIFT), las de
transferencia entre registros (MOV A,B o TAB), las de comparaciones CMP R (A-R),
operaciones lógicas, las de incremento de registro, INC A; operaciones aritméticas
entre registros A<--A+B (ADD B).
Estas son instrucciones de 1 byte de longitud. Al emplear registros internos como
operandos (en lugar de memoria), las ejecuciones resultan más rápidas.
FIGURA 4.12
4.5.2 Direccionamiento de Memoria Principal
Se refieren a los distintos modos de acceder a lugares de la memoria principal.
4.5.2.1 Direccionamiento inmediato
Este direccionamiento no constituye un direccionamiento propiamente dicho, pues la
instrucción no contiene ninguna dirección. En el lugar de la dirección figura el
operando sobre el cual se va actuar (fig. 4.13). En este caso, el operando forma
parte de la instrucción, y tanto OP CODE como el operando se buscan de memoria,
usando el PC.
Este direccionamiento es útil cuando se desea introducir fácilmente constantes en
un programa. Un símbolo muy usado como inmediato es #. Se pueden cargar registros de
16 bits en forma inmediata para inicializar punteros de tablas LDX #AAAA. En algunos
microprocesadores se utiliza la letra I para indicar inmediato: MVI A,A0H; LXI
H,2800H; LXI SP,28C3H. etc.
FIGURA 4.13
Este tipo de direccionamiento puede constar de 2 o de 3 bytes de instrucción.
FIGURA 4.14
4.5.2.2 Direccionamiento inherente o implícito
Vimos lo que era direccionamiento implícito para registros internos a la CPU. Un caso
particular muy importante de este direccionamiento lo constituyen las instrucciones
del manejo de pila (stack). En el caso de inserción (PUSH) de datos en la pila, el
operando de origen está en un registro y la dirección de destino en el puntero de
pila (stack Pointer): A-->(SP); SP<--SP-1. En el caso de extracción (PULL O POP) es
en el sentido inverso. Son instrucciones del tipo de 1 byte de logitud.
4.5.2.3 Direccionamiento extendido o absoluto
Este modo de direccionamiento consiste en poder acceder a cualquier palabra contenida
en la memoria principal, por medio de la dirección absoluta de memoria explicitada
como bytes en el operando de la instrucción.
Es el método más fácil para direccionar un lugar de memoria. La instrucción
contiene
la
dirección
del
operando (dirección absoluta
de memoria)
directamente
especificada en 2 bytes de memoria (microprocesadores de 8 bits de datos y 16 bits de
direcciones), permitiendo acceder al espacio total de direcciones memoria (64K).
Estas son instrucciones de 3 bytes de longitud. Este tipo de direccionamiento incluye
instrucciones del tipo LDA A, DIR; STA A, DIR.
Muy útil en el direccionamiento de variables individuales, o para el manejo de
información con dispositivos de I/O conectados al mapa de memoria. Es un método de
direccionamiento relativamente lento en tiempo de ejecución.
FIGURA 4.15
4.5.2.4 Direccionamiento directo o página cero
Una forma de acelerar el direccionamiento extendido, sería usar el direccionamiento
paginado, donde la EA se forma de la siguiente manera: el byte más significativo de
la
dirección
se
obtiene
de
un
registro,
llamado
de
página
y
el
byte
menos
significativo de la dirección se especifica por un byte que se da como operando de la
instrucción. Para esto se hace necesario un registro extra: el registro de página,
que indica el número de página a emplear. Cada página tiene 256 bytes.
FIGURA 4.16
Un caso especial lo constituye un direccionamiento de página 0 en el cual los
lugares de memoria a acceder van desde la dirección 0000 hasta la 00FFH, es decir que
el byte más significativo es 00 (EA=00.DIR)
El método de direccionamiento directo es una poderosa herramienta, pues reduce el
número de bytes de algunas instrucciones. Además, debido a la facilidad en el acceso
son
muy
usados
como
medios
de
acceso
a
variables
o
registros
temporarios.
La
limitación son los extremos de direccionamiento (256 bytes). Son instrucciones de 2
bytes
de
logitud.
Los
tipos
de
instrucciones
son
las
equivalentes
a
direccionamiento extendido: LDA B,28H (B<-(0028)); ADD A,0CEH (A<--A+(00CE).
FIGURA 4.17
las
del
4.5.2.5 Direccionamiento relativo
En este modo el operando se encuentra en una dirección relativa a la instrucción
ejecutada, es decir, la dirección efectiva se forma sumando al contenido del PC
actual, un número (dato) denominado desplazamiento (u "offset"), que para nuestro
caso será de 8 bits, que se da como operando en la instrucción. El desplazamiento se
interpreta como un número binario con signo (en complemento a 2), por lo tanto, el
desplazamiento será -128 a +127 lugares del PC.
FIGURA 4.18
Es muy usado en las instrucciones de salto (condicional o incondicional). Este
modo
es
muy
importante
distintos lugares
cuando
de memoria
se
(es
escriben
decir,
que
programas
un
que
programa
pueden
se
puede
utilizarse
en
trasladar en
memoria). Su alcance es limitado.
Ejemplo
BRA F0
BNZ 37
4.5.2.6 Direccionamiento indexado
En este modo de direccionamiento, la EA se genera por la suma de un registro, llamado
registro índice con un valor que está contenido como uno de los operandos en la
instrucción. Conceptualmente, el valor dato en la instrucción es la dirección base de
una tabla o arreglo, y el registro índice es el desplazamiento de la base.
FIGURA 4.19
Hay microprocesadores donde el contenido del registro índice es de 8 bits, y la
dirección (offset) que se va a indexar es de 16 bits.
LDA DIR,Y
A <-- (HHHH + YY)
La implementación del direccionamiento indexado es muy variado, puede ser:
XR : 16 bits
XR : 8 bits
DIR : 8 bits s/signo
DIR : 16 bits s/signo
XR : 16 bits
XR : 16 bits
DIR : 8 bits c/signo
DIR :16 bits s/signo
Este modo de direccionamiento se usa para el acceso a tablas o arreglos de datos,
especialmente
cuando
éstos
son
accedidos
en
forma
secuencial,
ascendente
o
descendente.
Por ejemplo, se usa a menudo para acceder a los elementos de un arreglo. El
desplazamiento localiza el comienzo del arreglo y el valor del registro índice
selecciona un elememto del arreglo (si XR = 0 --> primer elemento del arreglo). Como
todos los elementos del arreglo son iguales (es decir, tienen igual longitud), a
través simples
operaciones aritméticas es posible seleccionar cualquier elemento.
FIGURA 4.20
Las instrucciones con direccionamiento indexado son muy poderosas, pero demoran
mucho tiempo de procesamiento. Son, por lo general, de 2 bytes.
Hay variantes de direccionamiento indexado, en las cuales el contenido del XR se
autoincrementa o autodecrementa en 1:
XR-1 --> XR
;
(XR+offset) --> A
Auto decremento
(XR+offset) --> A
;
(XR+1) --> XR
Auto incremento
4.5.2.7 Direccionamiento indirecto
En este modo de direccionamiento, se da una referencia intermedia donde se halla la
dirección efectiva del operando. Esta referencia puede ser:
1) A través de una dirección de memoria (fig. 4.21a). Este es más flexible pero más
lento.
2) Por medio de un registro de la CPU (fig. 4.21b).
FIGURA 4.21a
FIGURA 4.21b
En el segundo caso (fig. 4.21b), la instrucción es de 1 byte (OP CODE), el cual
direcciona el registro cuyo contenido apunta a un lugar de memoria donde se halla el
operando. En el primer caso, se hace necesario usar 3 bytes por instrucción.
Son muy útiles en el manejo de tablas.
4.5.2.8 Direccionamiento indirecto - indexado
Este modo de direccionamiento consiste en realizar, primero, una indirección, y
luego, indexar la dirección para hallar la dirección efectiva. Generalmente, se usan
en página 0.
Es muy útil para llevar punteros de tablas.
La dirección del operando es una dirección, cuyo contenido junto al siguiente
lugar de memoria da una dirección que será indexada por el registro Y, ésta dirección
contiene el dato a operar.
FIGURA 4.22
4.5.2.9 Direccionamiento indexado-indirecto
Este
método
consiste
en
realizar,
primero,
operando (en pág.0), y luego, una indirección.
una
indexación
de
la
dirección
del
FIGURA 4.23
Ejemplo
Supongamos que se desea acceder a un elemento determinado de cada tabla (por ejemplo
el tercero), entonces basta con cambiar el contenido de lugar de indirección (01, 02)
y, con el valor del puntero a la tabla correspondiente e Y, obtengo el desplazamiento
del principio de dicha tabla.
FIGURA 4.24
4.5.2.10 Direccionamiento basado
En este modo de direccionamiento, la dirección efectiva se obtiene como resultado de
la suma entre el contenido de un registro (llamado registro base) y un valor de
desplazamiento que se da como operando en la instrucción.
Este modo provee una forma sencilla de direccionar estructuras, las cuales se
pueden ubicar en cualquier lugar de memoria. Por ejemplo: el registro base apunta a
la
base
de
la
estructura
y
los
elementos
de
la
misma
se
direccionan
por
el
desplazamiento respecto a la base. Diferentes copias de la misma estructura se pueden
acceder simplemente cambiando el registro base.
FIGURA 4.25
4.5.2.11 Direccionamiento basado - indexado
En este modo de direccionamiento, la EA se genera de la suma de un registro base, un
registro índice y un desplazamiento. Este modo es muy flexible ya que 2 componentes
de direcciones pueden ser variados en tiempo de ejecución.
Ejemplos típicos son:
- Aquellas estructuras de datos cuyos elementos son arreglos.
- Direccionamiento de matrices.
FIGURA 4.26
Ejemplo
Una estructura de datos que contenga un arreglo como elemento.
FIGURA 4.27
4.5.2.12 Direccionamiento de bits
Algunos microprocesadores tienen instrucciones que direccionan bits individuales de
registros o de lugares de memoria, especificándolo en la instrucción.
SET B
A.2
pone bit 2 de A=1
CLR
A.3
pone bit 3 de A=0
JB
A.1,dir
Jump if bit set
JBC
A.1,dir
Jump if bit set and clear bit
MOV
A.i,C
A.i <-- C
4.5.3 Dispositivos Externos
En los microprocesadores en los que el espacio de dirección de I/O no está separado
del espacio de direcciones de memoria principal, no es posible utilizar todos los
lugares
de
memoria
microprocesadores
cuando
que
se
tienen
direccionan
ambos
dispositivos
espacios
separados.
de
I/O.
Esto
En
cambio,
permite
manejar
hay
el
espacio de direccionamiento de los dispositivos de I/O independiente del espacio de
direccionamiento de memoria principal.
Una de las ventajas más importantes es que hay menos peligro de cometer errores de
programación que causen una operación de I/O no deseada o catastrófica, debido a que
únicamente por medio de instrucciones especiales de entrada/salida es posible acceder
a los dispositivos externos. En cambio, si estuvieran dentro del mapa de memoria, con
cualquier instrucción se podría tener acceso a dicho dispositivo.
Las desventajas más importantes son:
.-
El
espacio
de
I/O
se
maneja
por
medio
de
instrucciones
especiales que hacen uso de un único registro, no pudiendo emplear
otros tipos de instrucciones o registros para esos dispositivos.
Esto le quita flexibilidad y rapidez para el manejo de I/O.
.- Limitación en la capacidad de direccionamiento.
FIGURA 4.28
4.5.3.1 Direccionamiento indirecto de I/O
Este modo de direccionamiento es similar al de registro indirecto de memoria. El
número del port se toma de un registro, pudiendo acceder a cualquier dirección del
espacio de I/O.
Ejemplo
Para el microprocesador 8086:
IN
AX,DX
AX <-- (DX)
OUT DX,AX
(DX) <-- AX
4.6
UNIDAD DE CONTROL
La unidad de control es un hardware digital que debe realizar un conjunto de acciones
secuenciales que permitan controlar el flujo de información dentro y fuera del
procesador. Hay tres técnicas para realizar dichas secuencias:
a) Control a nivel de compuertas (lógica clásica).
b) Arreglos lógicos programables (PLA).
c) Microprogramación.
4.6.1 Lógica Clásica
Diseñar una unidad de control a nivel de compuertas involucra el cálculo y la
realización de una expresión Booleana completa por cada variable de control. Ya que
un microprocesador puede tener más de 30 variables de control, se debe realizar un
esfuerzo
considerable
para
computar dichas expresiones.
Dentro
del
problema
del
cálculo de las expresiones Booleanas, se halla el problema del secuenciamiento. Es
decir, decidir cuándo una variable de control debería activarse, es probablemente la
tarea más difícil del diseño de una unidad de control a nivel de compuertas. Es
posible de realizar dicho temporizado en forma sincrónica o asincrónica, pero por un
problema de costo y confiabilidad, la técnica más usada es la sincrónica.
Si cada acción elemental dura un múltiplo entero de períodos de un reloj, el
temporizado de control es sincrónico.
Si la próxima acción secuencial se realiza inmediatamente después del fin de la
anterior acción, se dice que el temporizado de control es asincrónico.
Tal vez, la mayor dificultad de la técnica asincrónica es determinar cuándo una
acción ha finalizado. Históricamente, esto se resolvió por medio de retardos y
monoestables, lo cual es poco confiable.
La técnica más usada para generar una deseada secuencia de tiempos de pulsos y
niveles es la de eventos temporizados sincronizados con contadores en base a un
cristal.
4.6.2 Arreglos Lógicos Programables
Un PLA es un circuito que puede ser programado para implementar funciones lógicas en
la forma "suma de productos". Un PLA provee una forma conveniente y sistemática para
realizar una lógica combinacional 'irregular'. Una lógica irregular se caracteriza
por
tener
un
gran
número
de
expresiones
Booleanas.
Realizar
dicha
lógica
con
compuertas resultaría costoso y extremadamente difícil. El objeto de los PLA es
realizar lógicas irregulares en una forma simple y económica. Un PLA típico se
muestra en la figura 4.29. Un PLA puede completar un número determinado (no el total
posible) de términos productos. Un PLA ayuda al diseñador a realizar una Unidad de
Control en una forma más sistemática y económica que la lógica a nivel de compuertas.
Una PLA toma del hecho que el control de una variable dependerá de un subconjunto de
todas las condiciones de entrada.
A pesar de que el PLA ayuda al diseño de unidades de control, aún persiste el
problema del secuenciador que determina el temporizado.
FIGURA 4.20
4.6.3 Microprogramación
Para ejecutar un programa, se obtienen las instrucciones de memoria, dando a la
unidad de control el código de operación y los datos se rutean entre la ALU,
registros y dispositivos de I/O. La unidad de control se encarga de realizar el
"control" de las operaciones a través de una lógica adecuada y además realiza el
'temporizado', de las distintas operaciones de cada instrucción por medio de una
lógica de temporizado, siendo el tiempo de ejecución un múltiplo de períodos de
reloj.
Una unidad de control microprogramada difiere de las unidades anteriores en que la
lógica
de
control
fija
se
reemplaza
por
elementos
de
programa
almacenados
(instrucciones) de control, y la lógica de temporizado, por secuenciamiento de dichas
microinstrucciones. Por supuesto que un mínimo de lógica es necesaria, pero ella se
refiere al control del microprograma.
Un microprocesador microprogramado es un micro cuyas señales de control necesarias
para buscar y ejecutar las instrucciones son generadas por el secuenciamiento de un
conjunto de instrucciones almacenadas en una memoria (ROM) de control (usualmente se
denominan
macroinstrucciones
a
las
instrucciones,
para
diferenciarlas
de
las
microinstrucciones de control). Es decir que los bits de las palabras (muchos bits)
de control deben ser capaces de manejar las señales (enables, clock, etc.) de control
de los registros internos, de la ALU, buffers de direcciones y datos, las señales de
R/W, E, etc., a través de un secuenciamiento de las mismas (microinstrucciones).
Wilke's definió (1951) un esquema que puede realizar lo anteriormente descripto
(fig. 4.30).
La
figura
4.30
microinstrucciones.
muestra
El
que
campo
a
de
partir
una
de
un
OP
CODE
microinstrucción
se
se
genera
divide
en
una
serie
de
un
campo
de
direcciones de la próxima microinstrucción y un campo de señales de control.
FIGURA 4.30
La figura 4.31 muestra una unidad de control microprogramada. La unidad está formada
por un registro IR en el cual se almacena el OP CODE, una RAM (PLA o decodificador)
de dirección de comienzo de instrucción, un selector de dirección de comienzo de
instrucción, un selector de direcciones para la ROM de microprograma, la ROM de
microprograma donde se hallan las microinstrucciones, un selector de datos el cual se
usa para operaciones de salto condicionales.
FIGURA 4.31
La instrucción se carga en el IR al comienzo del ciclo de instrucción y el OP CODE
genera a través de la ROM decodificadora el comienzo de dirección donde se halla la
primera de la serie de microinstrucciones en la ROM de microprograma que ejecutará la
instrucción completa. Por medio de (I), se hace más eficiente el uso de la (III).
Cada microinstrucción se divide en 3 campos fundamentales:
1) el control de ALU+Registros internos;
2) el de próxima dirección de microinstrucción;
3) el selector de condición.
La microinstrucción provee un bit más, el cual maneja al selector de dirección de
ROM de microprograma (II), y unos
pocos bits más para hacer la interfaz con la
lógica de temporizado e interrupciones y señales de control del bus de control
externo del microprocesador (R/W, E, etc.). Para cada nueva instrucción, primero se
selecciona
la
dirección
proveniente
de
(I),
y
luego
el
bit
selector
selecciona la dirección de próxima microinstrucción proveniente de (IV).
de
(II)
La última
microinstrucción en la secuencia cambia al selector (II) para obtener la dirección de
comienzo de microprograma de la próxima instrucción del bloque (II).
La salida del selector de datos (V) es un bit de la dirección de la próxima
microinstrucción
(suministrada
por
(IV))
de
manera
que
cuando
la
próxima
microinstrucción es seleccionada, su dirección dependa de la condición seleccionada.
Como se puede observar de la figura 4.31, el ancho de la palabra de una microinstrucción puede ser bastante considerable (32-48 bits). La longitud de la memoria
puede ser de 1K a 2K. Se denomina microprogramación horizontal a la cantidad de
acciones
secuenciales
que
se
realizan
dentro
de
una
única
microinstrucción.
La
microprogramación vertical es la ejecución secuencial de las operaciones a través de
la ejecución de las microinstrucciones mismas. Evidentemente, la primera requiere
menos memoria, pero adiciona costos y complejidad de la lógica de control.
4.6.3.1 Mejoras a la unidad de control microprogramada
Es deseable que el ancho de la memoria de microprogramación sea reducido, no sólo por
razones de costo, sino por razones de interconexión. Existen varios métodos. Uno de
los más comunes es que la mayoría de las microinstrucciones se realicen por medio de
una
secuencia
de
microinstrucciones,
las
cuales
son
usualmente
almacenadas
en
direcciones adyacentes en la ROM de miroprograma. Por lo tanto, es adecuado generar
la dirección de la próxima microinstrucción simplemente sumando "1" al contador de
direcciones
de
microinstrucciones.
En
consecuencia,
se
ahorra
memoria
de
microprograma al no tener que poner en la ROM de microprograma la dirección de la
próxima microinstrucción a ejecutar. Sin embargo, al final de la ejecución de la
instrucción,
es
usual
tener
un
salto
incondicional
a
un
conjunto
de
microinstrucciones, las cuales testean la presencia de una interrupción antes de
buscar la próxima instrucción. Para generar la próxima dirección se utilizan otros
bits, tales como los bits de selección de condición.
Muchas instrucciones tienen módulos comunes de microprogramas. Para aprovechar los
módulos que son comunes y ahorrar memoria es muy ventajoso tener la capacidad de usar
microprogramas en base a subrutinas. Esto se hace proveyendo a la unidad de control
de microprogramas con una pila (stach) para almacenar las direcciones de retorno de
subrutina.
A veces se usa un contador adicional para repetir un grupo de microinstrucciones
(cuando son necesarias). Para ello, se carga al contador con el número de veces a
repetir, y se decrementa hasta llegar a cero.
En la figura 4.32 se muestran las 4 fuentes de la próxima instrucción:
1) del registro de microinstrucciones,
2) de un incrementador que adiciona 1 a la dirección de microprograma corriente,
3) de la ROM de dirección de comienzo de microinsrucción,
4)
de
la
Pila
(stack)
usada
para
almacenaje
subrutinas de microinstrucciones.
FIGURA 4.32
de
las
direcciones
de
retorno
de
4.7
MICROPROGRAMACION vs. LOGICA CLASICA
1) La microprogramación permite al diseñador programar, más fácilmente, la secuencia
de acciones a realizar que resolviendo expresiones Booleanas.
2) La microprogramación ofrece al diseñador la flexibilidad de realizar cambios en
las operaciones con sólo alterar el contenido de la ROM, en contraste con los cambios
de hardware (lógica + cableado) necesarios en el diseño con lógica clásica.
3) La microprogramación ofrece definir nuevas instrucciones o realizar cambios en las
instrucciones, con sólo alternar la ROM. Hay máquinas que usan RAM, permitiendo
emular un procesador por otro.
4) La mayor ventaja de la lógica clásica es que se pueden diseñar sistemas de menos
tiempo de ejecución que con microprogramación.
La
mayoría
de
los
microprocesadores
actuales
usan
una
combinación
de
ambas
técnicas para lograr mayor eficiencia.
4.8
ARQUITECTURA BIT-SLICE
Algunos microprocesadores utilizan varios chips para realizr la CPU. Ello se debe a
que se definen chips que proveen 1, 2 o 4 bits del total de la máquina; por ejemplo,
hay módulos que contienen una ALU y registros de 4 bits, denominados RALU, siendo
necesario
usar
arquitectura
4
módulos
bit-slice
es,
para
por
realizar
lo
tanto,
un
microprocesador
una
arquitectura
de
16
bits.
particionada.
Una
Para
completar el microprocesador es necesario la unidad de control; en estos casos se
utiliza la microprogramación.
4.8.1 Diagrama de Estado Para un Procesador Elemental
Estado D: la microinstrucción selecciona el selector de condición para determinar el
estado de la línea de interrupción. Si no hay interrupción, el selector de dirección
de microinstrucciones selecciona la próxima dirección de microinstrucción consecutiva
para ir al estdo A. Si hay interrupción, la próxima dirección de microprograma se
toma de la microinstrucción corriente para ir al estado E.
Estado A: el contenido del PC se envía al bus de direcciones y el dato leído se carga
en el IR. La microinstrucción selecciona la próxima dirección consecutiva para la
próxima dirección.
Estado B: el PC se incrementa en 1. La microinstrucción selecciona la dirección de la
ROM decodificadora como dirección de próxima microinstrucción.
Estado C: ejecuta la instrucción. Después de ejecutar la instrucción, la unidad de
control de microprograma salta incondicionalmente al estado D.
FIGURA 4.33

Documentos relacionados