Вы находитесь на странице: 1из 42

180

Organizacin

de computadoras/Un

enfoque estructurado

34. Un gabinete de tarjetas VME contiene 16 procesadores en las ranuras 1a 16 y una


tarjeta de memoria en la ranura 17. El procesador No. 4 falla y la tarjeta es removida. Despus de esto, las interrupciones ya no funcionan de manera apropiada.
Por qu?
35. Un multiprocesador VME tiene 20 procesadores de 32 bits y utiliza el bus VSB para
la memoria local. Cada procesador hace n referencias globales a memoria por segundo. En las mejores circunstancias cul es el mximo valor terico de n?
36. Una computadora tiene instrucciones que requieren cada una de dos ciclos del bus,
uno para extraer lainstrucciny
otro para extraer los datos. Cada ciclodel bus toma 250 nseg y cada instruccin 500 nseg (el tiempo de proceso interno es insignificante). La computadora tiene tambin un disco con 16 sectores de 512 bytes por
pista. El tiempo de rotacin del disco es de 8.092 mseg. A qu porcentaje de su velocidad normal se reduce la computadora durante una transferencia de Acceso Directo a Memoria (DMA), si cada transferencia toma un ciclo del bus? Considrense
dos casos: transferencias de 8 y de 16 bits.

4
L NIVEL DE MICROPROGRAMACION

37. Cul sera el efecto de agregar una tercera lnea de entrada a la compuerta NAND
que selecciona a PIO en la figura 3-53(b), si esta nueva lnea se conectara a A13?
38. Escriba un programa que simule el comportamiento de una matriz de m x n de
compuertas NAND de dos entradas. Este circuito, contenido en un chip (pastilla),
tiene) patas de entrada y k de salida. Los valores), k, m y n son parmetros dados
al tiempo de compilacin. El programa debe empezar leyendo una lista "de conexionado" donde cada hilo especifique una entrada y una salida. Una entrada es
una de las) patas de entrada o la salida de alguna puerta NAND. Una salida es tina
de las k patas de salida o una entrada a alguna puerta NAND. Las entradas no usadas estn a 1 lgico. Despus de leer la lista de cableado, el programa debera
imprimir la salida de cada una de las 2j combinaciones de entradas posibles. Los
chips (pastillas) con matrices de compuertas como stas son muy utilizadas para realizar circuitos integrados a medida (segn pedido de un cliente), ya que la mayora
del trabajo (el depsito de la matriz de puertas en el chip, o pastilla) es independiente del circuito a realizar. Slo el conexionado es espec fico de cada diseo.
39. Escriba un programa que lea dos expresiones booleanas arbitrarias y diga si representan la misma funcin. El lenguaje de entrada debe contener letras como variables booleanas, los operadores AND, OR y NOT, as como parntesis. Cada
expresin se debe ajustar a una solalnea. El programa debe realizar el cmputo de
las tablas de verdad para ambas funciones y compararlas.
40. Escriba un programa que lea una coleccin de expresiones booleanas y calcule los
arreglos de 24 x 50 y de 50 x 6 que se necesitan para realizar la PLA de la figura
3-16. El lenguaje de entrada debe ser el mismo que el del problema anterior.lmprima los arreglos.

La frontera entre el hardware y el software no est bien definida y, adems,


vara constantemente.
Las primeras computadoras
tenan instrucciones
para
hacer operaciones aritmticas y booleanas, corrimientos, comparaciones,
iteraciones y otras que eran realizadas directamente por el hardware. Para cada instruccin haba un circuito especfico que la ejecutaba. En teora al menos, se
poda desatornillar el panel trasero e identificar los componentes electrnicos
que realizaban la instruccin de dividir, por ejemplo.
En una moderna computadora
multinivel ya no es posible aislar los circuitos
de la divisin porque no existen. Todas las instrucciones en el nivel de mquina
convencional (por ejemplo: aritmticas, booleanas, de miento, de comparacin
y de bucle) son realizadas paso a paso por un intrprete que se ejecuta en el nivel
de microprogramacin.
El equivalente moderno de buscar los circuitos de la divisin es obtener un listado del microprograma
y examinar la porcin que interpreta la instruccin de dividir.
Aunque los programas
de cualquier nivel pueden ser ejecutados
por un
programa intrprete que, a su vez, puede ser llevado a cabo por otro intrprete,
esta jeraqua no puede continuar indefinidamente.
En el nivel inferior deber
haber una mquina fsica, con circuitos integrados, fuentes de alimentacin
y
otros objetos del hardware. Estos elementos fueron el tema del captulo precedente. En este captulo estudiaremos cmo el microprograma
controla los componentes del hardware e interpreta el nivel de mquina ordinaria (convencional). En el captulo 8 se estudiar una clase de mquinas no microprogramadas
(las mquinas RISC).
1111

182

Organizacin

de computadoras/Un

enfoque estructurado
Cap. 4 El nivel de microprogramacin

Como la arquitectura del nivel de microprogramacin, denominada microarquitectura, est definida por el hardware, suele ser primitiva y dificil de programar. Por ejemplo, a menudo son importantes las consideraciones de tiempos. Esto llev a Rosin (1974) a definir la microprogramacin como "el diseo
de sistemas ms o menos razonables por medio de la interpretacin sobre mquinas irracionales".
.
.
El nivel de microprogramacin tiene una funcin especfica: ejecutar mtrpretes de otras mquinas virtuales (ms o menos razonables). El objetivo n~tural de diseo es la obtencin de una organizacin considerablemente optimizada para la extraccin, examen y ejecucin de instrucciones del nivel de
mquina convencional y, en algunos casos, de otras ms complejas. En este captulo examinaremos los principios y soluciones intermedias que hay que considerar en el diseo y organizacin de este nivel.
Empezaremos nuestro estudio del nivel de microprogramacin revisando
brevemente los elementos bsicos estudiados en el captulo 3, ya que son parte
de la arquitectura del nivel de microprogramacin y, por tanto, de inters para
el microprogramador (persona que escribe microprogramas, no un programador pequeo). Luego entraremos en el meollo del tema, explicando de modo
pormenorizado cmo pueden construirse instrucciones complejas a partir de secuencias de instrucciones ms primitivas. La explicacin se apoyar en un ejemplodesarrollado detalladamente. Despus examinaremos los factores que deben
tenerse en cuenta al disear elnivel de microprogramacin de una computadora, para entender mejor por qu tiene determinada estructura. Tambin se
abordarn algunas formas para mejorar el desempeo de la computadora. Por
ltimo, se examinar el nivel de microprogramacin de los dos ejemplos que se
han venido usando, las familias lntel y Motorola.

4.1. REPASO SOBRE EL NIVEL DE LOGICA DIGITAL


El trabajo del microprogramador es escribir programas que controlen los
registros, buses, unidades aritmticas y lgicas, memorias y otros componentes
del hardware de las mquinas. En el captulo anterior estudiamos estos dispositivos; ahora simplemente vamos a revisarlos para tenerlos presentes. Despus
del repaso diremos algunas cosas sobre las diferentes formas conceptuales de
encapsular los componentes.
4.1.1. Registros
Un registro es un dispositivo capaz de almacenar informacin. El nivel de
microprogramacin siempre dispone de registros para guardar la informacin
que se necesita en el procesamiento de la instruccin en curso de interpretacin.

183

Nmero de bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 O

lo 1 O lo

1 101 O 11 1011

1 1

1O 1

1 lo 1011 101

Fig. 4-1. Un registro de 16 bits puede guardar 16 bits de infotmacin.

Desde el punto de vista conceptual, los registros son lo mismo que la memoria
prncipal; la diferencia estriba en que los registros estn ubicados en el procesador mismo y, por tanto, se puede acceder a ellos en lectura y escritura ms rpidamente que a la memoria principal, la cual suele estar fuera del chip (pastilla).
No~malmente, las mquinas mayores y ms caras tienen un nmero mayor de
registros que las ms pequeas y econmicas; stas tienen que usar la memoria
principal para guardar los resultados intermedios. En algunas computadoras el
nivel de microprogramacin dispone de un grupo de registros numerados desde
0, 1, 2... , hasta n-I, denominado memoria local o memoria de anotaciones.
Un registro puede caracterizarse por un nico nmero, es decir, por cuntos
bits puede guardar. La figura 4-1 muestra un registro de 16 bits con la convencin de numeracin de bits usada en este libro. La informacin que se guarda
en un registro permanece en l hasta que otra la reemplaza. El proceso de leer la
informacin de un registro no afecta a su contenido. En otras palabras, cuando
se lee un registro, lo que se hace es una copia de su contenido, dejando inalterado el original.
4.1.2. Buses
Un bus es un conjunto de alambres que se usan para transmitir seales en
paralelo. Por ejemplo, los buses se utilizan para permitir que el contenido de un
registro se copie en otro. A diferencia de los buses del sistema que se estudiaron
e.nel captulo 3, stos slo conectan dos dispositivos, de modo que no hay necesidad de lneas de direcciones o-lneas extensivas de control. Por lo general son
suficientes las n lneas de datos y una o dos de control. Se emplean buses, pues
la transmisin paralela de todos los bits a la vez, es mucho ms rpida que la
transmisin serial bit por bit.
Un bus puede ser unidireccional o bidireccional. Un bus unidireccional
puede transferir informacin en un solo sentido; en cambio uno bidireccional
puede transferirla en los dos sentidos, pero no simultneamente. Los unidireccionales suelen usarse para conectar dos registros, uno de los cuales siempre es
fuente y el otro siempre destino. Los bidireccionales suelen usarse cuando hay
una coleccin de registros, cualquiera de los cuales puede ser fuente o destino.
Muchos dispositivos tienen la posibilidad de conectarse y desconectarse
elctricamente de los buses a los que estn conectados fsicamente. Estas cenexiones pueden abrirse y cerrarse en cuestin de nanosegundos. Un bus cuyos

r
i

184

. ..
Organizacin

de computadoras/Un

enfoque estructurado
Cap. 4

.
..
iedad se llama bus triestado, porque cada lnea
dispositivos teonganoes~:s~~~~ctada. Su.ele utilizarse cuando hay muchos dispopuede estar a , a
..
,
..
ueden suministrar informacin a un bus.
SltIV;S ~U~~YOra de las microarquitecturas algunos registr.os estn conectados
a un: o ms buses de entrada y a uno o ms de salida. La figura 4-2(a) muestra

Bus de
en! rada

Regi stro
de 8 bits

D2

D,

Do

D3

D6

Ds

D4

D7

r-L---,

_'----,

,---'--,

r-'-

_'--

r---'-

r-'--

r-'--

!>

r-

>

!>

f>

1>

!>

!>

TITTTTT

'r fl- -ri -ri -r? -ri ri r(

Seale
de
contro I

OE

(al

16

16

Al bus A

Del bus C

un esquema de un registro de 8 bits conectado a un bus de entrada y a otro de


salida. El registro consta de ocho flip-flops del tipo D conectados, cada uno de
ellos, al bus de salida por medio de un buffer no inversor. Cada uno contiene 1
bit. El registro tiene dos seales de control CK (reloj, que realmente quiere decir
"carga registro") y DE (permiso de SALida), conectadas ambas a todos los
flip-flops. Normalmente ambas seales se hallan en su estado de reposo, pero a
veces pueden ser activadas, causando alguna accin.
Cuando CK estn desactivada, el contenido del registro no es afectado por
las seales del bus. En cambio, cuando se activa, el registro se carga con el contenido del bus de entrada. Cuando DE est desactivada, el registro est desconectado del bus de salida y desaparece respecto a los restantes registros conectados. Cuando DE est activo, el contenido de registro pasa al bus de salida.
Si otro registro, R, tuviera su entrada conectada al bus de salida de nuestro
registro, podra transferirse informacin de ste a R. Para hacerlo, hay que activarDE y mantenerlo activo tanto tiempo como sea necesario para que la salida al bus se estabilice. Despus se debe activar la lnea CK de R, con lo que ste
se carga con lo que hay en el bus. En el nivel de microprogramacin son frecuentes estas operaciones de conexin de un registro a un bus para que otro 10
lea, como veremos en seguida. He aqu un segundo ejemplo de registros y buses: la figura 4-2(b) muestra un registro de J6 bits con dos buses de salida, cada
uno de ellos controlado por una seal DE diferente.

4.1.3. Multiplexores

decodificadores

Al bus B

16

CK

OEl

OE2
Ibl

Fig. 4-2. (a) Delalle de un registro de 8 bits c?nectado a bus conducro) de entrad~
ya airo de salida. (b) Representacin simblica de un registro de 16 bits con u
bus de cm rada y dos de salida.

185

Los circuitos que tienen una o ms lneas de entrada y que calculan uno o
varios valores de salida determinados nicamente por las entradas actuales se
llaman circuitos combinacionales. Dos de los ms importantes son los multiplexores y los decodificadores. Un multiplexor tiene 2" entradas de datos (lneas individuales o buses), una salida de datos de la misma anchura que la entrada y
una entrada de control de n bits que selecciona una de las entradas y la encamina a la salida. La figura 4-3(a) muestra un multiplexor con dos buses de entrada. La seal de control de un bit selecciona A o B como salida. La figura 3-12
muestra el circuito de un multiplexor de 8 entradas.

Bu s de
sal ida

l!

El nivel de microprogramacin

'"

El inverso del multiplexor es el demultiplexor, que encamina su nica entrada a una de sus 2" salidas, segn el valor que tengan sus n lneas de control.
Otro circuito combinacional importante es el decodificador, que tiene 11
lneas de entrada y 2" de salida, numeradas desde O hasta 2"-1. Si el nmero que
hay en las lneas de entrada es k, entonces se pone a 11a salida k, permaneciendo las dems a O. Un decodificador tiene siempre una y una sola salida al, estando a O las restantes. La figura 4-3(b) ilustra simblicamente un decodificador de 4 a 16. La figura 3-14 muestra el circuito de un decodificador de 3 a 8.

Organizacin de computadoras/Un

186

enfoque estructurado

Cap. 4

El nivel de microprogramacin

So

S,

187

Entrada
B

ti ti

Entrada

Fo
F,

Control

Multiplexor de 2 a 1

F(A. B)

Salida

(a)

(b)

Salida

Fig. 4-4. (a) ALU. (b) Registro de corrimiento.

lb)

(a)

Fig. 4-3. (a) Multiplexor de 2 a 1. (b) Decodificador de 4 a 16.

El inverso del decodificador es el codificador, que tiene 2" en.trad.as Yn salidas. Slo puede haber una lnea de entrada a 1 y su nmero, en bmano, aparece
en la salida.
4.1.4. Unidades aritmticas

lgicas

registros de corrimiento

Toda computadora necesita algn medio para hacer operaciones ~ritmticas.


El circuito ms simple es un sumador, que toma dos entradas de n bits y pr?duce su suma como salida. Un circuito aritmtico ms general e.sla ALU (Untdad
Aritmtica y Lgica). Tambin tiene dos entradas y.una sah~a de datos, ~ero
adems tiene algunas entradas Ysalidas de contr~l. La.?e la figura 4-4~a) tiene
dos bits de funcin, r, y F, que determinan que funcin se ha de reahza~ L~
ALU que vamos a usar en nuestro ejem.plo .~uede calcular ~ + B, AND .'
y A Las dos primeras no requieren exphcaclOn; la tercera simplemente COplaA
en I~ salida; lacuarta obtiene A negando (todos ~~s bits inver:idos). ~a tercera
funcin puede parecer intil, pero veremos su utilidad despues. La fl~ura 3-2?
ALU de cuatro funciones que opera sobre datos de un bit. Replimuestra una
d bi . l del
1 bten
cando este circuito n veces y conectando el acarr.eo. el tt I a e I + ,o
dremos una ALU de n bits que realice las operacIOnes AND, O~, N~T.y suma.
Una ALU tambin puede tener salidas de control. S~hdas npicas son
aquellas que se ponen a 1 cuando la salida de la ALU es negativa o cero, c~ando
hay acarreo del bit ms significativo o cuando ha ocurrido un des~or?amlento.
El ejemplo de la figura 4-4(a) tiene do~ sa:idas de control: N, ?ara md.lcar que ~~
salida de la ALU es negativa y Z, que indica que es cero. El bit N.es simpleme
te una copia del ms significativo de la salida, mientras que el bit Z es el NOR

de todos los bits de salida.

6'

Aunque algunas ALU pueden realizar tambin operaciones de desplazamiento, la mayora de las veces es necesaria una unidad especfica. Este circuito
puede desplazar su entrada un bit a la izquierda o a la derecha, o tambin no realizar ningn registro de corrimiento. La figura 4-4(b) muestra el smbolo que
utilizaremos para registros de corrimiento; la figura 3-17 muestra el circuito de
un desplazador algo ms sencillo.
4.1.5. Relojes
Los circuitos de las computadoras funcionan normalmente al ritmo de un
reloj, dispositivo que emite una secuencia peridica de impulsos. Estos impulsos definen los ciclos de mquina. Durante cada ciclo tiene lugar alguna actividad bsica, como la ejecucin de una microinstruccin. A menudo es til dividir los ciclos en subciclos, para que las partes de una microinstruccin puedan
realizarse en un orden bien definido. Por ejemplo, las entradas en la ALU deben estar disponibles y estabilizadas antes de que pueda almacenarse su salida.
La figura 4-5(a) simboliza un reloj de cuatro salidas. La de arriba es la salida
principal; las otras tres se derivan de ella al someterla a distintos retardos. La
salida principal [lnea superior de la figura 4-5(b)] tiene un ancho de un cuarto
de ciclo. Las otras tres estn retrasadas uno, dos y tres veces el ancho del impulso. El resultado es un circuito que divide cada ciclo en cuatro subciclos idnticos. Para ms detalles, vase la figura 3-21.
El diseador de computadoras puede hacer que cuatro transiciones diferentes tengan lugar en cierto orden dentro de un ciclo activando cada una de ellas
con el AND lgico de la seal habilitadora y una lnea de reloj distinta. Primero
se disparar la transicin asociada a la lnea principal de reloj, luego la que est
asociada a la lnea de reloj de menor retardo y as sucesivamente.

188

Organizacin

de computadoras/Un

enfoque estructurado
Cap. 4

El nivel de microprogramacin

CPU

189

Bus

Direccin

"

Bus de direccio nes


MAR

Control

"

Reloj
Entrada de datos
Salida de datos
Control

r7:7:77t>.,-<;:1}:::;:", '

--,.dl""::::u"":.::'''':~e""::::d"":.::""t:::~:)::,
'

"

--~----

MBR
__

_Jf-

(b)

(a)

Seal RO

Fig. 4-5. (a) Reloj con cuatro salidas. (b) Su cronograma.

Seal WR

Fig. 4-6. Dos registros que se utilizan para los buses de direcciones y datos.

4.1.6. Memoria

:1

,k
!I'
,I

principal

Los procesadores deben ser capaces de leer y escribir. en .memoria. La


mayora de las computadoras tienen un bus (conducto) de dlreCClones,.otro de
datos y otro de control para la comunicacin entre la CPU y.la m.emona. ~ara
leer de la memoria, la CPUpone una direccin en el bus de direcciones y ajusta
adecuadamente las seales de control; por ejemplo, activando la seal RD (lectura). Luego, la memoria pone el dato pedido en el bus de datos. En algunas,
computadoras la lectura y la escritura en memoria son sncronas; es decir, la
memoria debe responder dentro de un plazo fijo. En otras puede tomarse el
tiempo que quiera, sealizando por medio de una lnea de control la presencia
de datos cuando termine..
.
Las escrituras en memoria se hacen en forma parecida. La CPU pone en el
bus de datos el dato a escribir y en el bus de direcciones la direccin donde se
quiere guardar, activando despus WR (escritura). Una alternativa de tener las
seales RD y WR sera tener una seal MREQ, de peticin a la memoria y otra
RW, que distinga entre la lectura y la escritura.
.
Un acceso a memoria es siempre considerablemente ms largo que ;l que se
necesita para ejecutar una sola microinstruccin. En consecuencia, el microprograma debe mantener los valores correctos en los buses de datos y direcciones
durante varias microinstrucciones.
Para simplificar esta tarea, a menudo es
conveniente tener dos registros, el MAR (Registro de Direccin de Memoria) y
el MBR (Registro de Intercambio de Memoria), a los que se conectan los buses
de direcciones y de datos, respectivamente. En este libro conviene disponer los
buses como se indica en la figura 4-6. Ambos registros se colocan entre la CPU
y el bus del sistema. El bus de direcciones es unidireccional en ambos lados y se
carga desde el lado de la CPU, activando la lnea de control. Las lneas del bus

de direcciones del sistema siempre estn permitidas [o, posiblemente, slo durante las lecturas y las escrituras, lo que requiere una lnea de permiso de salida
conectada al OR lgico de RD y WR(no mostrada en la figura)]. La lnea de
control del MBR hace que los datos se carguen del bus "Entrada de datos" en
el lado de la CPU. El bus "Salida de datos" est siempre permitido.
'
El bus de datos del sistema es bidireccional, sacando el contenido del MBR
cuando WR est activa y cargndolo cuando se activa RD.,
4.1.7. Encapsulado

de los componentes

E~ las secciones precedentes hemos descrito varios circuitos que pueden


C?mblllarSe para formar una computadora. Se hallan disponibles en el comerc~o e? formas conceptualmente distintas. La ms simple es la combinacin en
crrcuitos MSI (In~egrados a E.sc~la Media), con componentes como un registro,
una ALU, un registro de cornrruento, etc., cada uno en una pastilla. Este mtodo se e~cuentra en la figura 4-7(a). Debido a la gran variedad de chips rpidos
y de bajo precio disponibles en el mercado, muchas computadoras se construyen conectando este tipo de componentes.
El principal ,inconveniente de construir computadoras
con componentes
~SI es el.gra? n~mero de componentes necesarios, que ocupan numerosas tarJetas ~e c~rcUlto Impreso, consumen mucha energa y disipan abundante calor.
~tra tecl1lc~ es usar pastillas de rebanada de 1 bit. Cada pastilla de rodaja de bit
tiene, por ejemplo, .1 bit de registros, ALU y otros componentes. La figura 3-20
muestra el aspecto mterno que presenta una rodaja de ALU de 1 bit Podra~os fcil~ente extender su diseo para aadirle, por ejemplo, 16 regi~tros de 1
bit, un registro de corrimiento de I bit y otros cornponenrgs de 1 bit de ancho.

190

Organizacin de computadoras/Un

enfoque estructurado

191

DJ

DJ]]]

m m

DJ]]]

y costosas. Por el contrario, cualquier competente ingeniero en electrnica


puede disear una computadora sencilla con pastillas MSI o de rebanada de 1
bit sin demasiados problemas. Desde el punto de vista del fabricante, que espera construir computadoras durante aos, quiz merezca la pena dominar las
tecnologas necesarias para hacer procesadores en una pastilla. Sin embargo,
seguramente no le interesar a una empresa que necesite slo una mquina de
propsito especfico. As pues, las opciones son: utilizar un procesador disponible en el comercio, contratar una compaa especializada en el diseo y fabricacin de una pastilla de propsito especfico, o construir el procesador con
componentes MSI o de rodajas de bit.

DJ]]]

4.2. UNA MICROARQUITECTURA

ALU

Cap. 4 El nivel de microprogramacin

[[]

rn rn

[[]

rn rn

TIPICA

Una vez estudiados todos los' componentes bsicos con los que se construye
el nivel de microprogramacin,
es el momento de ver cmo se interconectan.
Como los principios generales en esta rea son pocos y dispersos, abordaremos
el tema por medio de un ejemplo detallado.

~;,,,o'"
corrimiento

4.2.1. La ruta de datos


~
(a)

(b)

(e)

Fig. 4-7. Tres modos de construir una computadora. (a) Pastillas MSI. (b) Rebanadas de bit. (e) Pastilla LSI.

Tomando, por ejemplo, 32 de esas pastillas y ponindolas una al. lado de otr~,
obtendramos una mquina con 32 registros, una ALU, un registro de.corrimiento, etc., todos de 32 bits.
..
. En esta forma podramos construir una mquina.d~ .16 bits con so10.16 ?a.stillas. Las rebanadas de bit dan al diseador la pOSIbilidad d~, construir f~ClImente una mquina de cualquier longitud de palabra. Tambl,en hay pastlll.as
con rebanadas de 2 o 4 bits. La figura 4.7(b) muestr.a. un~, rnaquma de 8 bits
construida con 4 rebanadas de 2 bits. En general, la utilizacin de r~ba~adas requiere menos pastillas y mucho menos tiempo de diseo que la de circuito MSI,
pero normalmente produce mquinas ms lentas.
.
Una tercera forma de combinar los componentes consiste en poner el procesador completo en una pastilla [vase la figura 4-7(c)]. A pesar de que reduc~ de
modo extraordinario el nmero de pastillas (a una sola), ~dolece de desventajas.
Primero, la tecnologa necesaria para integrar un gr~n n~me~o de compone~tes
en una pastilla es diferente de la utilizada en lo~ Clf:Ult?S mte~rados de tipo
MSI o en los de rebanada de 1 bit y suele producir m~quI?as mas lentas ..Adems , las tcnicas de diseo y fabricacin son extraordinariamente complicadas

Laruta de datos es la parte de la CPU que contiene a la ALU, sus entradas y


sus salidas. La de nuestro ejemplo se muestra en la figura 4-8. Contiene 16 registros idnticos de 16 bits, rotulados PC, AC, SP, etc., que forman una memoria de anotaciones accesibles solamente al nivel de microprogramacin. Los registros rotulados O, + 1 Y -1 se usarn para guardar las constantes indicadas.
En nuestros ejemplos sencillos el O nunca se usa, pero probablemente se necesitar en una mquina ms complicada; de todos modos los hemos incluido porque disponamos de ms registros que los que podamos utilizar. Los restantes
tienen nombre que explicaremos ms adelante. Cada registro puede sacar su
contenido a uno de los buses A o B o a ambos y tomarlo de un tercero, C, como
se muestra en la figura.
Los buses A y B alimentan una ALU de 16 bits que puede realizar cuatro funciones: A + B, A AND B, A YNOT A. Las dos lneas de control de la ALU, r, y
F], especifican la funcin que se va a realizar. La ALU genera dos bits de estado
derivados de su salida: N, que se pone a 1 cuando la salida de la ALU es negativa, y Z, que se pone a 1 cuando dicha salida es cero,
La salida de la ALU pasa por un registro de corrimiento que puede desplazarla un bit a la izquierda o a la derecha, o bien no realizar ningn desplazamiento. Es posible desplazar un registro, R, 2 bits a la izquierda, calculando R
+ R en la ALU y desplazando la suma un bit ms en el registro de corrimiento.
Ni el bus A ni el B estn conectados directamente a ALU, sino que hay un
par de registros buffer (tampn) intermedios. Estos se necesitan porque la ALU

192

O rgaruzacion
. .. d e computadoras/Un

enfoque estructurado
Cap. 4

El nivel de microprogramacin

193

Bus B

es un circuito combinacional, es decir, calcula continuamente la salida en funcin de las entradas y el cdigo de funcin. Si no los hubiera, habra problemas
cuando se calcule, por ejemplo, A: = A + B. A medida que A fuera cargndose, el valor del bus A empezara a cambiar, lo que haria que la salida de ALU y,
por tanto, el bus e cambiaran tambin. En consecuencia se guardara un valor
incorrecto en A. En otras palabras, en la asignacin A: = A + B, el A del lado
derecho debe ser el valor original que A, no una extraa mezcla de bits del valor
anterior y reciente. Insertando registros buffer en los' buses A y B, podemos
congelar los valores originales de A y B al principio del ciclo, de modo que ALU
se aisle de los cambios en los buses a medida que el nuevo valor se vaya guardando en la memoria de anotaciones. La carga de estos buffers est controlada
por Lo y L.
Vale la pena sealar que la solucin (v.g., insertar biestables al frente de
la ALU) no es la nica. Si en vez de biestables, todos los registros son del tipo
flip-flop, entonces es tambin posible un desempeo de dos buses, cargando los
operandos al inicio del ciclo en los buses A y B y leyendo el resultado en uno de
stos ms adelante en el cliclo. Los intercambios entre los diseos de dos y
tres buses abarcan complejidad, paralelismo y cantidad de alambrado. Un tratamiento ms detallado de estos aspectos est ms all del alcance de este libro.
Para la comunicacin con la memoria, hemos incluido en la rnicroarquitecturaun MAR y un MBR. El MAR puede cargarse a partir del registro de B, en
paralelo con una operacin de la ALU. La lnea M, controla la carga del MAR.
En las escrituras se puede cargar el MBR con la salida del registro de corrimiento, en paralelo con el almacenamiento en la memoria de anotaciones o en lugar
de l M controla la carga del MBR a partir de la salida del registro de corrimiento M2 y M3 controlan las lecturas y escrituras de memoria. En las primeras, los
datos ledos de la memoria pueden presentarse en la entrada izquierda de la ALU
a travs del multiplexor A, representado en la figura 4-8 por Amux. La lnea de
control Ao determina si el biestable A o el MBR se alimentan en laALU. La
microarquitectura de la figura4-8 es similar a la de muchos de los circuitos comerciales de rebanadas de 1 bit disponibles.

Al bus de direcciones
Salida de Lo
. direcciones:
Entrada de datos

Ao

4.2.2. Microinstrucciones

, i

16 para controlar la carga del bus A a partir de registros internos.

Salida de datos

Fig. 4-8. Rula de datos del ejemplo de microarquitectura

Para controlar la trayectoria de datos de la figura 4-8 se requiere de 61 seales. De acuerdo a sus funciones, stas se pueden dividir en nueve grupos que a
continuacin se describen.

de este captulo.

16 para controlar la carga del bus B a partir de registros internos.


16 para controlar la carga de la memoria de anotaciones a partir del bus C.

194

Organizacin

de computadoras/Un

enfoque estructurado

195

Cap. 4 El nivel de microprogramacin

2 para controlar los registros de A y B.

Bits

2 para controlar la funcin de la ALU.

I I I

I I I

I I I

2 para controlar al registro de corrimiento.


4 para controlar el MAR y el MBR.

1 1 1 1 1

A C
MM
M O ALU
SH BA RIW E
U N
O R N
R R
C
X
I
I
AMUX

CONO

o=

= Buffe de A
1 = MBR

No salta
1 = Salta si.N = 1
2 = Salta si Z = 1
J = Salta siempre

2 para indicar una lectura o una escritura en memoria.

ALU

= A + B
1 = AY8
2 = A

3=A

AOOR
I I I I I I I

SH

=
1 =
2 =
J =

MBR, MAR, RO. WR, ENC

No desplaza
Desplaza 1 bit a la derecha
Desplaza 1 bit a la izquierda
(no utilizado)

o=

No
1 = Si

1 para controlar el Amux.

,
;1;

!!
1IL
J

Con los valores de las 61 seales podemos realizar un ciclo de nuestra ruta
de datos. Un.ciclo consiste en vaciar los valores en los buses A y B, almacenarlos temporalmente en los registros de A y B, en pasarlos a travs de la ALU
y el registro de corrimientos y en almacenar el resultado en la memoria interna y
en el MBR o en ambos. Adems, puede cargarse el MAR e iniciarse un ciclode
memoria. Como primera aproximacin, podramos tener un registro de.control
de 61 bits, cada uno de ellos, para una seal de control. Un bit a 1 significa que
laseal est activada yuno.aOque no loest.
Sin embargo, podemos reducir en mucho el nmero de bits que necesitan
para controlar la ruta de datos, al precio de un pequeo incremento en la
circuitera. Para empezar, tenemos 16 bits para controlar laentradaal bus A, lo
que permite 216 combinaciones de los registros. Desafortunadamente,
slo estn permitidas 16: cada uno de los 16 registros, excluyendo los dems. Por tanto, podemos codificar la informacin del bus A en 4 bits y utilizar un decodificador para generar las 16 seales de control. Lo mismo vale para el bus B.
Esta situacin es algo diferente en el bus C. En principio, es posible tener almacenamientos mltiples en la memoria de anotaciones, pero esta prctica es
casi siempre intil y la mayora de las mquinas no la permiten. As pues, tambin podremos codificar el control del bus C con 4 bits. Habiendo ahorrado 3
x 12 = 36 bits, necesitamos ahora slo 25 bits de control para activar la ruta
de datos, Lo y L1 siempre se necesitan en un momento determinado del ciclo de
mquina, por lo que puede activarlos el reloj, quedando 23 bits de control. Una
seal adicional, no estrictamente necesaria pero a menudo til, es aquella que
permite o inhibe el almacenamiento del bus C en la memoria interna. En algunas situaciones slo interesa generar las seales N y Z, pero no se desea almacenar el resultado. Con este bit adicional que llamaremos ENC (habilita C), podemos indicar que se almacene el bus C (ENC = 1) o no (ENC = O).
En este momento estamos en condiciones de controlar la ruta de datos con
24 bits. Notamos ahora que RD puede usarse para cargar el MBR con el bus de
datos del sistema y WR para permitir la salida del MBR al mismo bus. Esta observacin reduce a 22 el nmero de seales de control indspendientes,

fig. 4-9. Estructura de una microinstruccin para controlar la ruta de datos en la


figura 4-8.

El siguiente pas~ en el diseo de la microarquitectura es inventar un format? de nucromstruccir, que contenga 22 bits. La figura 4-9 muestra uno de los posI~les, con d?s c~mpos adicionales, COND y ADDR, que se describirn en seguida. La microinstruccin contiene 13 campos, 11 de los cuales son:
AMUX-

Controla la entrada izquierda a la ALU: O = tampn de A 1


MBR.
'
I=AANDB,2=A,3=

A.

ALU

-FuncindelaALU:O=A+B,

SH

- Funcin. del. registro de corrimiento:


2 = a la izquierda.

MBR

- Carga del MBR a partir del registro de corrimiento: O = no carga.


1 = carga.
'

O = nada, 1 = a la derecha,

MAR - Carga del MAR a partir del registro de B: O = no carga, 1 = carga.


RD
- Petici? de lectura de memoria: O= no pide, 1 = carga el MBR de
memona.
WR

- Peticin d~ escritura en memoria: O= no pide, 1 = escribe el MBR


en memona.

ENC

- Control de almacenamiento en registros de memoria interna:


O= no almacena, 1 = almacena.

- Selecciona el registro dnde almacenar si ENC


AC, etc.

- Selecciona la fuente del bus B: 0= PC, 1= AC, etc.

- Selecciona la fuente del bus A: 0= PC, I = AC, etc.

J: O = PC, I =

r
196

II
,1
'1

"

,
i

Organizacin

de computadoras/Un

enfoque estructurado

Cap, 4

El nivel de microprogramacin

197

El orden de los campos es completamente arbitrario. Se ha elegido el orden


que minimice el cruce de lneas en una figura que hay ms adelante. (Este criterio no es tan disparatado comoparece; los cruces de lneas suelen corresponderse con cruces de conexiones en circuitos impresos o integrados, lo que causa
problemas en diseos bidimensionales.)

,----

4.2.3. Cronologa de las microinstrucciones

._I

Aunque nuestra exposicin de la forma en que una microinstruccin puede


controlar la ruta de datos durante un ciclo es casi completci;hemos olvidado un
asunto mportante.la cronologa. Un ciclo bsico de ALU consiste en cargar
los registros A y B, darle tiempo a la ALU para realizar su trabajo y almacenar
entonces el resultado. Es evidente que estos sucesos deben tener lugar en esa secuencia. Si intentramos almacenar el bus C en la memoria de anotaciones antes de cargar los registros A yB, se guardara basura en lugar de datos tiles.
Para obtener la secuencia correcta, introducimos un reloj de cuatro fases, es decir, con cuatro subciclos, como el de la figura 4-5. He aqu los eventos clave durante cada uno de los subciclos:
'
l.

I
I
I

16
registros

I
I

I
I

Carga la siguiente microinstruccin a ejecutarse en un registro' denominado MIR (Registro de MicroInstruccin).

2. Salida del contenido de los registros a los buses A y B, y su captura


por los registros A Y B.
3. Cuando las entradas de la ALU estn estabilizadas, hay que dar
tiempo a la ALU y al registro de corrimiento para que produzcan
una salida estable y cargar el MAR si es necesario.
4. Ahora que la salida del registro de corrimiento est estabilizada, se
almacena el bus C en la memoria de anotaciones Yen el MBR si es

RO

t=============~

WR~----~~-----------------------=~
Fjg. 4-10. Diagrama de bloques completo de nuestro ejemplo de microarquitectura,

necesario.
',"1

La figura 4-10 es un diagrama de bloques detallado de la microarquitectura


de nuestra mquina completa. Puede parecer impresionante a primera vista, pero merece la pena estudiarla en detalle. Cuando el lector entienda completamente cada bloque y cada lnea, podr avanzar en la comprensin total del nivel
de microprogramacin. El diagrama de bloques tiene dos partes: la ruta de datos, a la izquierda, que ya estudiamos de modo pormenorizado, y la seccin de
control, de la que trataremos ahora.
La parte ms voluminosa e importante de la porcin de control de la mquina es la memoria de control. Es donde se guardan las microinstrucciones. En
algunas mquinas es una memoria de lectura solamente, en otras es de lectura y
?

escritura
En nuestro' eJ~mp.Io Ias rmcrornstruccrones
..
.
i d direcci
sern de 32 bits y el espae o e. rrecciones de microinstruccin
constar de 256 palabras
I
I
memona de control ocupar un mximo de 256 x 32 = 8192 bt~or o que a
Ll Como cualquier otra memoria, la de control necesita un MAR'y un MBR
a~~remos ~I MAR el MPC (Contador de MicroPrograma) porque su u'nl'ca'
..
.
" que va a ejecutarse.' El Mlsk-ser el
f unclon es senala
. r Ia slgu.lente
mstruccion
MIR y~ m.enclOnado. Es Importante darse cuenta de que la memoria de control
y la pnnclp~1 ~on completamente diferentes, teniendo la primera el microprograma y la ultima el programa en nivel de mquina convencional.

198

Organizacin

de computadoras/Un

Cap. 4

enfoque estructurado

En la figura 4-10 se observa que la memoria de control intenta continuamente copiar la microinstruccin direccionada por el MPC al MIR. Sin embargo, el MIR solamente se carga durante el primer subciclo, como indica la
lnea de trazos que 10 conectacon el reloj. Durante los otros tres subciclos no se
altera, independientemente de lo quele suceda al MPC.
Durante el segundo subciclo, el MIR se encuentra estabilizado y sus campos
empiezan a controlar la ruta de datos. En particular, los campos A y B hacen
que los datos salgan a los buses A y B. Los bloques "Decodificador de A" y
"Decodificador de B" del diagrama proporcionan la decodificacin de 4 a 16
de cada campo, necesaria para activar las lneas SAL! y SAL2 de los registros
[vase figura 4-2(b)]. El reloj activa los registros de A y de B durante este ~ubciclo, proporcionando entradas estables a la ALU durante el resto del CIclo.
Mientras los datos salen a los buses A y B, la unidad de "Incremento" de la seccin de control calcula MPC + 1, en preparacin de la carga de la siguiente
microinstruccin en secuencia, durante el ciclo siguiente. La ejecucin de instrucciones se puede acelerar traslapando estas dos operaciones.
En el tercer subciclo se les da a la ALU y al desplazador tiempo suficiente para que produzcan resultados vlidos. El campo demicroinstruccinAMUX
determina la entrada izquierda a la ALU; la entrada derecha es siempre el tampn
de B. Aunque la ALU es un circuito combinacional, el tiempo que emplea en calcular la suma est determinado por el tiempo de propagacin de los acarreos,
no por el retraso normal de las puertas. Mientras la ALU y el desplazador estn
calculando, el MAR se carga con el contenido del bus B, si el campo MAR de la
microinstruccin est a 1.
Durante el cuarto y ltimo subciclo, el bus C se puede almacenar en la memoria de anotaciones y en el MBR, segn los campos ENe y MBR. La caja rotulada "Decodificador de C" toma ENC, la cuarta lnea de reloj y el campo C
de la microinstruccin como entrada y genera las 16 seales de control. En su
interior realiza una decodificacin de 4 a 16 del campo C y entonces hace el Y
lgico de sus salidas con el resultado de hacer el Y lgico del subciclo 4 con
ENC. Por tanto, slo se carga un registro de anotaciones si:
I

1. ENC=l.

2. Es el subciclo 4.
:1\

3. El campo C selecciona el registro.

ti

li

l(

El MBR tambin se carga durante el cuarto subciclo si MBR=l.


Las dos seales que controlan la memoria, RD y WR, estn activas mientras
estn presentes en el MIR. En efecto, los campos correspondientes del MIR actan como s fueran biestables.

4.2.4. Secuenciamiento

El nivel de microprogramacin

199

de las microinstrucciones

Lo nico que nos queda por ver es cmo se elige la siguiente microinstruccin. Aunque la mayora de las veces basta extraer la siguiente microinstruccin
en secuencia, se necesita algn mecanismo que permita saltos condicionales en
el microprograma para tomar decisiones. Por esta razn dotamos a cada
microinstruccin de dos campos adicionales: ADDR, que es la direccin de un
sucesor potencial de la microinstruccin en curso, y COND, que determina si la
siguiente microinstruccin se extrae deMPC + 1 o de ADDR. Cada microinstruccin contiene potencialmente un salto condicional. Se ha tomado esta decisin porque los saltos condicionales son muy comunes en los microprogramas
y, al permitir que toda microinstruccin tenga dos posibles sucesores, los
microprogramas se ejecutan ms rpido que si se tuviera que ajustar alguna
condicin en una microinstruccin y examinarla en la siguiente. La mayora de
las arquitecturas usan esta estrategia de una forma u otra.
La eleccin de la siguiente microinstruccin la realiza la caja rotulada' 'Lgica de Microsecuenciamiento"
durante el subciclo de 4, cuando las salidas de
la ALU N y Z son vlidas. La salida de esta caja controla el multiplexor M
(Mmux), que encamina MPC + 10 ADDR al MPC, que determinar cul ser
la siguiente microinstruccin a extraer. Hemos proporcionado al microprogramador cuatro alternativas posibles ajustando COND como sigue:

o = No

saltar; la siguiente microinstruccin

1.

= Saltar a ADDR si Z =

l.

1 = Saltar a ADDR si N

se toma de MPC

+ 1.

3 = Saltar a ADDR incondicionalmente.


La lgica de microsecuenciamiento combina los dos bits de la ALU, N y Z,
y los dos bits de COND para generar la salida. Llamando a stos 1 y D (izquierdo y derecho), la seal correcta ser.
Mmux = lDN

toz

+ ID = DN + IZ + ID

donde + significa O INCLUSIVO. Expresado con palabras, la seal de control a


Mmux es 1 (encaminando ADDR al MPC) si ID es 012 y N = 1, si ID es 102 y
Z = 1, o si ID es 112, En caso contrario es O y se extrae la siguiente microinstruccin en secuencia. El circuito que calcule la seal puede construirse con componentes SSI, como en la figura 3-3(b), o ser parte de una PLA, como en la figura
3-16.
Para que nuestro ejemplo de mquina sea ms realista, supondremos que un
ciclo de memoria principal dura ms que una microinstrucci:' En particular,

200

Organizacin

de computadoras/Un

enfoque estructurado

si esta ltima comienza una lectura de memoria poniendo RD al, tambin debe
tener RD = 1 en la siguiente que ejecute (que puede estar o no en la posicin siguiente de la memoria de control). El dato no estar disponible hasta que hayan
transcurrido dos microinstrucciones despus de iniciar la lectura. Si el microprograma no tuviera nada que hacer, deber tener slo RD = 1, Y se desperdiciar para cualquier trabajo til. Del mismo modo una escritura en memoria
tambin requerir dos microinstrucciones para completarse.
4.3. UNA MACROARQUITECTURA

TIPICA

Para continuar nuestro ejemplo del nivel de microprogramacin,


pasaremos
ahora a la arquitectura del nivel de mquina convencional que deber ser soportado por elintrprete que se ejecute en la mquina de la figura 4-10. Por conveniencia, llamaremos macroarquitectura a la arquitectura del nivel 2 o del3, yas
distinguirla de la arquitectura del nivel 1 o microarquitectura.
(Para los propsitos de este captulo, ignoraremos el nivel 3, ya que sus instrucciones son en
gran parte las del nivel 2 y sus diferencias no tienen importancia aqu.) De modo similar, a las instrucciones del nivel 2 las llamaremos macroinstrucciones.
As, durante este captulo, llamaremos macroinstrucciones
a las instrucciones
normales del nivel de mquina convencional, como ADD, MOYE, etc. (La razn por la que repetimos esto es que algunos ensambladores proporcionan la
posibilidad de definir "macros" en ensamblador, que no tiene nada que ver con
lo que aqu entendemos como macroinstrucciones.)
Algunas veces nos referiremos a nuestro ejemplo de mquina de nivel 1 como Mic-I ya la de nivel 2 que
soporta como Mac-I. Antes de describir la Mac-I, vamos a divagar un poco para motivar el diseo.
4.3.1. Pilas
Una macroarquitectura
moderna debera disearse teniendo presentes las
necesidades de los lenguajes de alto nivel. Uno de los aspectos ms importantes
del diseo es el direccionamiento. Para ilustrar el problema que vamos a resolver, consideremos el programa Pascal de la figura 4-II(a). El programa principal inicializa dos vectores, x e y, con valores tales que Xk = k e Yk = 2k + l. Luego calcula su producto interno (tambin llamado producto escalar). Siempre que
necesite multiplicar dos nmeros enteros, llama a la funcin mulp. (Supngase
que el compilador es para una microcomputadora
y slo realizar un subconjunto del Pascal que no incluye el operador de multiplicacin.)
Los lenguajes con estructura de bloques, como el Pascal, suelen realizarse
de modo que, al salir de un procedimiento o funcin, se libere la memoria usada por las variables locales. La forma ms sencilla de hacerlo consiste en utilizar
una-estructura de datos llamada pila. Una pila consta de bloque de memoria

Cap. 4

El nivel de microprogramacin

201

program Producto interno (output];


[Este programa inicializa a dos vectores x y y, de veinte elementos
cada uno, y luego calcula su producto interno:
XII) YII] + x12] y12] + ... + x120] y[20]1
.
const max = 20;

[tamao

de los vectores]

typeenlero
vec

= 0 .. 100;

array[ 1. .max] of enlera;

var k: integer;
x, y: vec;
funClion mulp (a, b: entero): integer;
IEsta funcin multipli~a sus dos parmetros y entrega el producto.
Realiza la multlplicaclon por sumas repetidas.]
var p, ;: Inleger;
begin
10: reserva espacio de pila para p y j)
ir (a = O) or (b = O) then
11: SI cualquiera es O, el resultado es O)
mulp: = O
12: la funcin entrega O)
else
begin
p: O;
{3: da valor inicial a p)
for j: = I lo a do
{4: suma de b a p, a veces]
p: p + b;
{5: realiza la suma)
mutp: p
16: asigna el resultado a la funcin)
cnd
end: Imll/pl

(7: elimina variables locales y regresa el valor)


procedure interno (var v: ver; var ans: integery;
{Calcula el producto interno de v y x y lo entrega en ans.)
var suma, 1: integer;
bcgin
{8: reserva espacio de pila para suma e il
suma:= O;
19: suma acumular el producto interno]
Ior i := 1 10 max do
{lO: repite para todos los elementos)
suma : = suma + mulp (xII], vIi]);
{II: acumula un trmino)
ans: = suma
112: copia el resultado en atls)
end; lIIemo)
113: elimina suma e i y retorna)
begin
Ior k : = I 10 max do
begin
x[kJ : = k;
ylkJ:= mu/p (2, k) + 1;
end;
interno (y, k);
writeln (k)
end.

Fig. 4-11(a). Programa

{14: reserva espacio para k, x y yl


(15: iteracin para inicializacin]
(16: inicializa .r]
117: inicializa yl
(18: llama a itllernol
119: imprime los resultados]

Pascal para calcular un producto interno.

Cap, 4 El nivel de microprogramacin

202

Organizacin de computadoras/Un

IDEFINE ALGUNOS
SIMBOLOS

K = 4020
X = 4000
y = 3980
A = 4
B = 3
P = I
J = O
V = 4
RESP = 3
SUMA = I
1=0
JUMP
DESP
LODL
JNZE
LOCO
JUMP
ANOTl: LODL
JNZE
LOCO
JUMP
BNOTZ: LOCO
STOL
LOCO
STOL
LODL

PMUL:
\":"'.

';~";
!

,
:.
l,:

iI
; !

LI:
0'0.1

L2:
DONE:

INNER:

LJ:

MAIN
2
A
ANOTZ
O
DONE
B
BNOTZ
O
DONE
O
P

JNEG

L2

JZER

L2

LODL
ADDL
STOL
LOCO

P
B
P
I

ADDL
STOL
SUIlL
JNEG
JZER
LODL
INSP
RETN
DESP
LOCO
STOL
LOCO
STOL
LOCO
ADDL
PSIII
LODL
ADDL
SUBD
PSHI
CALL

A
LI
LI
l'
2

2
O
SUMA
I
I
X-I
I
V
I
CI
PMUL

ICOMIENZA
EN EL
PROGRAMA PRINCIPAL
10
1I
MAIN:
ISALTASIA<>O
12
IRETORNAO
L4:
IAC: = B
ISALTA SI B<> O
12
IRETORNAO
13
IP:= O
14
IJ : = I
IPUEDE EJECUTARSE
LA ITERACION?
1 A < O, NO SE REALIZA
LA ITERACION
1A = O, NO SE REALIZA
LA ITERACION
15
IAC:=P+B
Ir: = P + B
ICOMPROBACION
DE FIN
DE ITERACION
IAC: = J + I
IJ:= J + I
IAC: = J - A
ISALTASIJ<,A
ISALTA SI J = A
16
!7
IRETORNA
18
19
ISUMA: = O
110
11: = I
1II

203

enfoque estructurado
INSP
ADDL
STOL
LOCO

2
SUMA
SUMA
I

ADDL
STOL
SUBD
JNEG
JZER
LODL
PUSH
LODL
POPI
INSP
RETN

I
I
C20
L)
L3
SUMA

DESP
LOCO
STOD
LODD
PUSH
LOCO
ADDD
POPI
LOCO
PUSH
LODD
PUSH
CALL
INSP
ADDD
PUSI
LOCO
ADDD
POPI
LOCO
ADDD
STOD
sUiJD'
INEG
JZER
LOCO
PUSH
LOCO
PUSH
CALL
INSP
LODD
PUSH
CALL
INSP
CALL

IAC: = X + 1- I
IPUSH XIII
1AC : = DIRECCtON
DEL VECTOR
IAC:=
V + I
CI:
I
IV COMIENZA EN I NO EN O 00: 20
IPUSH Vill
IPMUL(XIIJ,
Vil))

RESP

IELlMINA
PARAMETROS
1AC : = SUMA + PMUL( ... )
ISUMA : = SUMA + PMUL( ... )
ICOMPROBACION
DE FIN
DE ITERACION
IAC: = I + I
11:= 1+ I
IAC:=
I-MAX
ISALTA SI 1< MAX
ISALTASII
= MAX
112
IPUSH SUMA
1AC : = DIRECCION DE RESP
IRESP : = SUMA
113
IRETORNA

114
liS
IK NO ES LOCAL
/16
IPUSH K
1 AC : = (DIRECCION)
XI
DE xuj-:
IAC: = X + K - I
K
IX(Kl: = K
117
2
IPREPARA
PMUL(2, ... )
/PREPARA
PMUL(2,K)
K
1APILADOS LOS DOS
PARA METROS
IPMUL(2,K)
PMUL
IELlMINA
PARAMETROS
2
IAC:=2'K+1
CL:
IPREPARA
YIKI : = 2'K + I
IAC:= (DIRECCION DE
Y:CI
YII\)-I
IAC: = Y + K - I
K
IYIKI:=
2'K+ I
ICOMPROBACION
DE FIN
I
DE ITERACION
IAC: = K + I
K
IK : = K + I
K
IAC:= K - MAX
C20.
ISALTASIK<O
L4
ISALTASI
K = MAX
L4
/18
Y
IAPILA DIRECCION DE y
1AC : = DIRECCION DE K
K
IAPILA DIRECCION DE K
ILLAMA A PROCEDIMIENTO
INNER
IELlMINA PARAMETROS
2
/19
K
IPREPARA
WRITELN(K)
OUTNUMI
IRUTINA DE BIBLiOTECA
IELlMINA PARAMETRO
I
IFIN DE TRABAJO
STOP

41
I
K
K

Flg. 4-11(b), Producto interno en ensarnblador.

/CONSTANTE
ICONSTANTE

I
20

1
PROGRAMA

PROGRAMA

-----

PC

PUSH 5

PUSH 5

-----

PC

~:::

~:::

~~

:::

SP __..,

SP ---:->-

4015

4016

4016

4017

4017

4018

4018

4019

4019

4020

4020

PILA

PILA

(al

(bl

Fig, 4-12, (a) Pila. (b) La misma despus de apilar un 5,

contigua, que contiene ciertos datos, y de un apuntador a la pila (SP), que dice
dnde est la cima de ese bloque, La base de la pila est en una direccin fija
que no interesa en adelante, La figura 4-12(a) ilustra una pila.que.ocupa.seis pa .
labras de memoria, La base de la pila est en la direccin 4020 y la cima, donde
apunta SP, est en la 4015. Nuestras pilas crecern desde las direcciones altas
de memoria a las bajas, pero la otra alternativa tambin es buena,
Se definen varias operaciones en las pilas, Las dos ms importantes son
PUSH X y POP y (desapila Y), PUSH avanza el apuntador de pila (decrementndolo, en nuestro ejemplo) y luego pone X en la posicin de memoria a la que
ahora apunta SP, PUSH incrementa el tamao de la pila en un elemento, POP
Y, por el contrario, reduce el tamao de la pila guardando el ltimo elemento
en Y, eliminndolo de ella incrementando la direccin del apuntador de pila, La
figura 4-12(b) muestra el aspecto de la pila de la figura 4-12(a) despus de haber
apilado una palabra que contiene un 5,
Otra operacin que puede realizarse en una pila es avanzar el apuntador de
pila sin apilar ningn dato, Esto suele hacerse cuando se entra en un procedimiento o funcin, para reservar espacio a las variables locales, La figura 4-13(a)

204

Organizacin de computadoras/Un

Cap. 4 El nivel de microprogramacin

enfoque estructurado

muestra la asignacin de memoria durante la ejecucin del programa principal


de la figura 4-11. Hemos supuesto arbitrariamente que la memoria consta de
4096 palabras de 16 bits y que las posiciones desde la 4021 a la 4092 estn utilizadas por el sistema operativo y, por tanto, no se pueden usar para guardar variables, la variable kdel programa Pascal se guarda en la direccin 4020 (todas
las direcciones en decimal). El vector x requiere 20 palabras, de la 4000 a la
4019. El vector y empieza en la 3980 para y[l] y se extiende a la 3999 para
y[20]. Mientras el programa principal se ejecuta fuera de mulp, SP tiene el valor
3980, con lo cual indica que esta direccin es la ltima de la pila.
Cuando el programa principal quiere llamar a mulp, primero apila los parmetros de la llamada, 2 y k, y luego ejecuta la instruccin de llamada, que apila
la direccin de retorno, de manera que mulp sepa dnde volver cuando termine. Cuando empieza mu/p, SP tiene 3977. Lo primero que hace es avanzar el
apuntador de pila en 2 unidades, para reservar dos palabras para sus variables
locales, p y j. En este punto SP vale 3975, como muestra la figura 4-13(b). Las
cinco palabras de la cima de la pila constituyen la parte de pila utilizada por
mulp y se liberarn cuando termine. Las palabras 3979 y 3978 estn rotuladas
como a y b, ya que son los nombres de los parmetros formales de mulp, pero,
por supuesto, contienen2 y k respectivamente.
Cuando se haya terminado mulp y se haya llamado a interno, la configuracin de la pila ser la mostrada en la figura 4-13(c). Cuando interno llame a
mulp, la pila estar como muestra la figura 4-13(d). Ahora nos encontramos
con el problema: qu cdigo generar el compilador para accesar a los parmetros de mulp y a sus variables locales? Si intentara leer p usando una instruccin semejante a MOVE 3976,DONDE, mulp funcionara cuando se le llama desde el programa principal, pero no cuando se le llamara desde interno. De
manera similar, MOVE 3971,DONDE funcionar cuando se le llame desde interno, pero no desde el programa principal. Lo que se necesita realmente es alguna forma de decir "extrae la palabra que est una direccin por encima del
apuntador de pila". En otras palabras, el Mac-I necesita un modo de direccionamiento que extraiga o almacene una palabra situada a una distancia conocida del apuntador de pila (o algn modo de direccionamiento equivalente).

4.3.2. El juego de macroinstrucciones


Con este modo de direccionamiento en mente, ahora estamos listos para
examinar la arquitectura del Mac-I. Bsicamente, consta de una memoria de
4096 palabras de 16 bits y tres registros visibles al programador de nivel 2. Los
registros son el contador del programa, PC, el apuntador de pila, SP, yel acumulador, AC, que se usa para mover datos, hacer aritmtica y otros propsitos.
Hay disponibles tres modos de direccionamiento: directo, indirecto y local. Las

205

Tramo
de pila
para
mulp

398o

3999
4000

111

Tramo
de pila
para

mrlP

intyno

3975

3976

3971

3972

dir. ret,

3973

3974

3975

3976

suma

3976.

suma

3977

dir. reto

3977

dir. ret.

3977

dir. ret.

3978

3978

ans

3978

ans

3979

3979

3979

398O

y [1)

398O

y [1)

398O

[201

3999

y [201

3999

[1)

4000

x 11)

4000

3999

x [1)

4000

4019
k

-sp

3975

1201

4019
4020

-sp

Tramo
de pila
para

397O

4020

4019
k

4020

-SP

[1)

[20J

x [lJ

4019
k

4020

(a)

(b)

le)

Id)

Fig. 4-13. Instantneas de la memoria durante la ejecucin de Productolnterno.


(a) Pila durante la ejecucin del programa principal, (b) Pila durante la ejecuclo~de la mulp. (e) Pila durante la ejecucin de interno. (d) Pila durante la ejecucion de mulp cuando lo ha llamado interno.

-SP

206

.
'1

Organizacin

de computadoras/Un

Cap. 4 El nivel de microprogramacin

enfoque estructurado

instrucciones que usan direccionamiento directo contienen, en sus 12 bits menos significativos, una direccin absoluta de memoria. Estas instrucciones son'
tiles para accesar a las variables globales, como xen la figura 4-11. El direccionamiento indirecto permite que el programador calcule una direccin de memoria, la ponga en AC y lea o escriba la palabra direccionada. Esta forma de
direccionamiento es muy general y se utiliza para accesar a elementos de un vector, entre otras cosas. El direccionamiento local especifica un desplazamiento
respecto al SP y se utiliza para accesar a las variables locales, como ya hemos
visto. Estos tres modos combinados proporcionan un sistema de direccionamiento simple pero adecuado.
La figura 4-14 muestra el juego de instrucciones del Mac-1. Cada instruccin contiene un cdigo y a veces una direccin de memoria o una constante.
La primera.columna de la codificacin binaria de la instruccin; la segunda da
su nombre nemotcnico en lenguaje ensamblador; la tercera tiene su nombre
completo, y la cuarta describe lo que hace mediante un fragmento en Pascal. En
esos fragmentos m[x] significa la palabra de memoria x. As, LODD carga el
acumulador con la palabra de memoria especificada por sus 12 bits menos significativos. Su direccionamiento es, por tanto, directo, mientras que el de LODL;
que carga el acumulador con la palabra situada a una distancia x por encima de
SP, es local. LODD, STOD, ADDD y SUBD realizan las cuatro operaciones
bsicas usando direccionamiento directo: LODL, STOL, ADDL y SUBL las
realizan con direccionamiento local.
Hay cinco instrucciones de salto, una incondicional (JUMP) y cuatro condicionales (JPOS, JZER, JNEG y JNZE). JUMP siempre copia los 12 bits menos significativos al contador de programa, mientras que las otras cuatro slo
lo hacen si se cumple la condicin especificada.
LOCO carga en AC una constante de 12 bits en el rango de O a 4095 (inclusive). PSHI apila la palabra cuya direccin est en AC. La operacin inversa es
POPI, que desapila una palabra y la guarda en la posicin de memoria direccionada por AC, PUSH y POP sirven para manipular la pila de diversas maneras. SWAP intercambia los contenidosde AC y SP, lo que es til cuando hay
que incrementar o decrementar SP en una cantidad desconocida en tiempo de
compilacin. Tambin resulta til inicializar SP al principio de la ejecucin.
Las instrucciones INSP y DESP seutilizan para aumentar o disminuir SP en
cantidades conocidas al momento de la compilacin. Debido a la faltade espacio de codificacin, los desplazamientos se han limitado a 8 bits. Por ltimo, la
instruccin CALL se usa para llamar a un procedimiento, guardando la direccin de retorno en la pila y RETN regresa de un procedimiento, desapilando la
direccin de retorno y almacenndola en el registro PC.
Hasta ahora, la mquina no tiene instrucciones de entrada/salida, ni se le
agregarn, pues no las necesita. En su lugar usa E/S por memoria. Una lectura
de la direccin 4092 dar una palabra de 16 bits con el siguiente carcter ASCII

Nemotcnico

Binario

Instruccin

Significado

OOOOxxxxxxxxxxxx

lOOO

Carga directa

Bc:=mlxl

0001xxxxxxxxxxxx

STOO

Almacena directo

m {X{:=BC

0010xxxxxxxxxxxx

AOOO

Suma directo

sc: se- m.{x]

0011xxxxxxxxxxxx

SUBO

Resta directo

BC:= BC- m {x]

0100xxxxxxxxxxxx

JPOS

Salta si positivo

jI BC;., Othen pc := x

0101xxxxxxxxxxxx

JZER

Salti si cero

jI BC = Othen pc

0110xxxxxxxxxxxx

JUMP

Salta

pe: = x

0111xxxxxxxxxxxx

lOCO

Carga constante

BC:=x(Os x

1000xxxxxxxxxxxx

lOOl

Carga local

ac:=m{sp+xl

1001xxxxxxxxxxxx

STOl

Almacena

1010xxxxxxxxxxxx

ADDl

Suma local

BC:= ac+mlsp+x]

1011xxxxxxxxxxxx

SUBl

Resta local

ae:= ae-mIsp+xl

1100xxxxxxxxxxxx

JNEG

Salta si negativo

jI se-e Othen pc :=x

1101xxxxxxxxxxxx

JNZE

Salta si no cero

jI Be "O then pc :=x

1110xxxxxxxxxxxx

CAll

Llama a procedo

sp; sp- 1; m{sp]:=pc;

1111000000000000

PSHI

Apila indirecto

sp:= sp-1;

1111001000000000

POPI

Desapila indirecto

mIsc] :=mIspl;

1111010000000000

PUSH

Apila

sp: sp- 1; m{spl:= ac

1111011000000000

POP

Desapila

Bc:=m{sp];sp:=sp

1111100000000000

RETN

Retorno

pe :=m Isp]; sp:= sp + 1

1111101000000000

SWAP

Intercambia

ac y sp

Imp :=BC; ac :sp; sp := tmp

11111100yyyyyyyy

INSP

Incrementa

sp

sp:= sp + Y (O S Y S 2551

11111110yyyyyyyy

OESP

Decrementa

local

sp

s 40951

m Ix+ sp]:=Be

mIsp]:=

pe :=x

m{Bc]

sp:= sp + 1

+1.

sp:= sp - Y (O s Y S 255)

xxxxxxxxxxxx
es una direccin de mquina de 12 bits; en la columna
yyyyyyy es una constante de 8 bits; en la columna 4 se llama y.

Fig. 414. El conjunto

207

de instrucciones

4 se llama x.

del Mac-I.

del dispositivo normal de entrada en Jos 7 bits menos significativos y ceros en


los 9 ms significativos. Cuando haya un carcter disponible en la 4092, se
pondr a 1 el bit ms significativo del registro de estado de la entrada, con direccin 4093. La lectura de la direccin 4092 pone a cero la 4093. La rutina de
entrada estar normalmente en una pequea iteracin de espera a que la 4093 se
haga negativa. Cuando suceda, cargar el contenido de la 4092 y regresar.

208

Organizacin

de computadoras/Un

enfoque estructurado

La salida se realizar en forma similar. Una escritura en la 4094 tomar los 7


bits menos significativos de la palabra escrita y los copiar en el dispositivo normal de salida. El bit ms significativo del registro de estadode la salida, de direccin 4095, se borrar, volvindose a poner a 1 cuando el dispositivo de salida
est listo para recibirun nuevo carcter. Los dispositivos normales deentrada y
salida pueden ser un teclado y una pantalla, una lectora de tarjetas y una impresora o alguna otra combinacin.
Un ejemplo de cmo se programa con este juego de instrucciones se observa
en la figura 4-11 (b), que es el programa de la figura 4-11 (a), compilado a lenguaje ensamblador por un compilador que no hace ninguna optimizacin, ya
que un cdigo optimizado dificultara el seguimiento del ejemplo. Los nmeros
O a 19 en los comentarios, identificados par una barra inclinada en el lenguaje
ensamblador, ayudan a ver las partes que se corresponden de las dos mitades de
la figura, OUTNUM 1 y STOP son rutinas de biblioteca que realizan las funciones obvias.
4.4. MICROPROGRAMACION:

UN EJEMPLO

Habiendo especificado la microarquitectura


y la macroarquitectura
en detalle hemos de abordar ahora el tema de la implementacin de la segunda.
Qu aspecto tendr un programa que se ejecute en la primera e interprete la s~gunda? Cmo funcionar? Antes de contestar estas preguntas, debemos considerar cuidadosamente qu lenguaje elegimos para microprogramar.

4.4.1. El lenguaje microensamblador


En principio, podra escribir microprogramas en binario, a razn de 32 bits
por microinstruccin.
Los programadores masoquistas podran disfrutar con
ello, pero nadie ms. Por tanto, necesitamos un lenguaje simblico en el que
expresar los microprogramas.
Una notacin posible es hacer que el microprogramador especifique una microinstruccin por lnea, nombrando cada campo
distinto de cero y su valor. Por ejemplo, para sumar AC a A y guardar el resultado en AC, prodra escribir.
ENC

= 1, C = 1, B = 1, A = 10

Muchos lenguajes de microprogramacin


utilizan una notacin similar. Pero es
una monstruosidad, al igual que los lenguajes que la utilizan.
Una idea mucho mejor es usar una notacin de lenguaje de alto nivel, reteniendo el concepto de una lnea por microinstruccin. Es concebible escribir

Cap. 4

El nivel de microprogramacin

209

microprogramas en un lenguaje de alto nivel ordinario, pero como la eficiencia


es de crucial importancia, se utiliza un lenguaje ensamblador, que los definimos
como un lenguaje simblico cuyas instrucciones se correspondan biunvoca. mente con las del lenguaje mquina. Recurdese que 25070 de ineficiencia en el
microprograma desacelera la mquina completa 25%. Llamaremos a nuestro
lenguaje Microensamblador de Alto Nivel ("LMAN"). En LMAN los almacenamientosen los 16 registros de anotaciones, en el MAR o en el MBR, se representan por sentencias de asignacin. As, nuestro ejemplo anterior, en LMAN,
se escribira ac: = a + ac (como nuestra intencin es que elLMAN se parezca
al Pascal, adoptaremos el convenio del Pascal que consiste en utilizar nombres
en letra cursiva minscula para los identificadores).
Para indicar el uso de las funciones 0, 1, 2, Y3 de la ALU, podemos escribir
respectivamente:
ac:

= a + ac, a: = and (ri, mascp), ac: = a y a: = invta),

. por ejemplo, donde and se refiere al "y booleano" e inv la inversin. Los
desplazamientos pueden representarse por las funciones desizq si son a la izquierda y desder si son a la derecha, como en
tir : = desizq (tir + tir)
que pone eltir en los buses A y B, realiza la suma y desplaza sta a la izquierda 1
bit antes de almacenarla de nuevo en el tiro
Los saltos incondicionales pueden representarse por sentencias goto y los
condicionales pueden examinar n o Z. Por ejemplo:
if n then goto 27
Las asignaciones y los saltos pueden combinarse en la misma lnea. Sin embargo, se presenta un pequeo problema cuando deseamos examinar un registro pero no almacenarlo. Cmo especificamos el registro que vamos a examinar? Para resolver este problema introducimos la seudovariable alu, a la que
se puede asignar un valor simplemente para indicar el contenido de la ALU.
Por ejemplo,
alu : = tir; ir n thcn goto 27;
significa que se ha de pasar el/ir por la ALU (cdigo ALU = 2) para que se
pueda examinar su contenido. Ntese que el uso de alu significa que ENC = O.
Para indicar las lecturas o escrituras en memoria, simplemente pondremos
rd o wr en el programa fuente. El orden de las distintas parles de una sentencia

210

Organizacin

de computadoras/Un

enfoque estructurado
Cap. 4

A
M

D U

mer : pc;rd

rd

ir ; tnbr
pe := pe + 1

M M
BAR
R R

o: mar:=

E
N

W
D

e e

A ADDR

00

00

00

00

00

15

00

25

22

se := band tir, amas k); gota O

00

sp:=sp+(-1);

00

69

Sentencia

ll ,

mer : ir; mbr ie sc;


alu := tir;

wr

if n then goto 15

ae := inv (mbrl
tir:=

Ishift

(tir);

if n then gota 25

El nivel de microprogramacin

pe; rd ;

1: pe := pe + 1; rd ;
2: ir := mbr ; ir n Ihen goto 28;
3: tir := /shift (ir + ir); ir n Ihen goto 19;
4: tir := /shift (tir); ir n then goto 11;
5: alu := tir ; ir n then goto 9;
6: mar: = ir: rd :
7: rd ;
8: ae := mbr ; goto O;

9: mor := ir, mbr:=


10: wr ; goto O:

{ciclo principal}
{incrementa pe}
{salva y decodifica rnbr]
{(XX)x o OOlx?)
{0CXXlo (XX)J?}
{0CXXl= LODO}

oc; wr;

{OOJI

STOD}

11: alu := tir ; ir 11 then goto 15;

{0010 o 001 J?}

12: mar:=
13: rd ;

{0010 = ADDD}

ir; rd :

14: ac := mbr + ae; goto O;


alu := ae; ,if z then gota

tir:=

IshiftUr+

22

rd
ir); if n then gota 69

Fig. 4-15. Algunas sentencias en LMAN y sus microinstrucciones

correspondientes.

15: mar

:= ir; rd ;
16: ac:= ae + 1; rd;
17: 0:= lII'(mbr):
18: oc := oc + a; goto O;

INota: x -

19: tir:= /shift (tir); ir 11 then goto 25;


20: alu := tir ; ir 11 then goto 23;

{OIOx o Ollx?}
{OIOO o OIOI?}

21: alu := ac ; ir 11 Ihen golo o:


22: pe := bond (ir, amask ); goto O;

(OIOO = JPOS)
{realiza el salto}

23: alu := oc;


24 goto O;

,I

fuente es, en principio, arbitrario, pero intentaremos colocarlas en el orden en


que se ejecutan para aumentar la legibilidad. La figura 4-15 ofrece algunos
ejemplos de sentencias LMAN junto con sus microinstrucciones correspondientes.
4.4.2. El ejemplo de microprograma

:' I

Hemos llegado finalmente al punto donde podemos engarzar todas las


piezas. La figura 4-16 es un microprograma que funciona en el Mic-I e interpreta el Mac-I. Es un programa sorprendentemente pequeo, que ocupa slo 79
lneas. Ahora la eleccin de los nombres de los registros de la figura 4-8 se hace
evidente: PC, AC y SP se usan para guardar los tres registros del Mac-I. IR es
el registro de instruccin que contiene la macroinstruccin en curso de ejecucin. TIR es una copia temporal del IR, utilizada para decodificar el cdigo de
operacin. Los tres registros siguientes se utilizan para guardar las constantes
indicadas. AMASK es la mscara de direcciones, 007777 (octal), y se usa para
separar el cdigo de operacin y los bits de direccin. SMASK es la mscara de
la pila 000377 (octal), que se utiliza en las instrucciones INSP y DESP para
aislar el desplazamiento de 8, bits. Los 6 registros restantes no tienen ninguna
funcin asignada y pueden usarse al arbitrio del microprogramador.

ir z Ihen

{001 l = SUBD}

goto 22;

y = x + l + no y}

{OIOI = JZER}
{no se produce el salto}

25: alu := tir ; ir 11 then golo 27;,


26: pe : = band (ir. amask); goto O;

{OIIOoOIII?}
{OliO = JUMP}

27: oc := band (ir, amask); goto O;

{Ol l l = LOCO}

28: tir := /shift (ir + ir ); ir n then golo 40;


29: tir := lshi]: (tir); ir 11 then goto 35;
30: alu := tir , ir n then golo 33;

{IOu o l lxx"]
{IOOx o IOlx?}
(I(XX) o lOOI~}

31: a : = ir + sp :
32: IlUlr:= a; id; golo 7;

{IOOJ = LODL}

33: a : = ir + sp :
34: mar: = o ; mbr := ae;
35: alu := tir:

ir n

1\'1';

goto 10;

then golo 38;

36: a : = ir + sp ;
37: mar := a ; rd; goto 13;
3g: (/ : = ir + S(!;
39: mar : 11: rd; goto 16:

Fig. 4-16. El microprograma.

{IOOI = STOL}
{IOIO o IOII~}
{IOIO = ADDL}
{IOII =SUBL}

211

212

Organizacin

de computadoras/Un

Cap, 4

enfoque estructurado

40: Tr := Ishift (tir ): if n then goto 46;


41: alu := Tr; ir n then goto 44;
42: alu := cr : ir n then goto 22;
43: goto

{IIOx o Illx'l}
{IIOOoIIOll}
{IIOO

= JNEG)

{IIOI

{IIIO

= CALL)

o;

44: alu := ae;

ir z then

goto

o;

JNZE)

45: pe : =. band (ir , omask ); goto O;


46: Tr : = /shiji (tir);

ir n then

goto 50;

47: sp:= sp + (-1);


48: mar:= sp ; mbr := pe; IVr;
49: pe : = bond (ir, amask l; wr ; goto O;
50: tir := /shift (rir); ir n then goto 65;
51: tir:= Ishift(iir); ir 11 then goto 59;
52: a/II := tir, ir n then got 56;

53:mar:= oc; rd;


54: sp:= sp + (-1); rd .
55: mar:= sp ; II'r; goto ID;
56: mar =sp : sp:= sp

57: rd ;
58: mm :=. oc;
59:

+ 1: rd,

addr]

{I I 11000

PSHJ)

{i 111001

POp!}

{IIIIOIO

PUSH}

ID;

wr; gato

otu := tir ; if}l then goto

60: sp := sp + (-1);
61: mar:= sp : mbr:=

11 1, examina

QC;

62: mar: = sp ; sp : = sp

62;
wr ; goto 10;

1; rd;

{IIIIOI I " POP}

63: rd;
64: ae := mbr; goto O;
65: tir := /shift(Tr); ir n then gota 73;
66: alu := tir; ir n then goto 70;
! r.

67: mar :=sp; sp:= sp + 1; rd ,


68: rd;
69: pe : = mbr; gota O;
70: a := c ;

{IIIIIOI

= SWAP}

RETN}

71:ac:=sp;
72: sp := a; gato O;
73: olu := rir;

ir 11 then

goto 76:

74: a := band tir , s!nask):


75: sp := sp + a ; goto O;
,i)

{IIIIIOO

76: a := band (ir , smask);


77: a := ;111' (a);
78: (1 := (1 + 1: gola 75;

Fig. 4-16. (continuacin).

{IIIIIIO"
{IIIIIII

El nivel de microprogramacin

213

Como todos los intrpretes, el microprograma de la figura 4-16 tiene un


bucle principal que extrae, decodifica y ejecuta instrucciones del programa que
interpreta, que en .este caso consiste en una serie de instrucciones de nivel 2. Su
bucle principal comienza por la lnea O, donde empieza a extraer la macroinstruccin a la que apunta el PC. Mientras espera que la instruccin llegue,
incrementa el PC y sigue manteniendo activa la seal RO. Cuando llega la instruccin, en la lnea 2, la guarda en el IR y simultneamente examina su bit ms
significativo(eI15).Si
es 1, Ia decodificacin contina en la lnea28 y, en caso
contrario, en la 3. Suponiendo, por el momento, que la instruccin es LODO,
en la lnea 3 se examina el bit 14 y se carga el TIR con la instruccin original
desplazada 2 bits a la izquierda (un bit con el sumador y el otro con el registro
de corrimiento). Ntese que el estado N de la ALU est determinado por su salida, en la que el bit 14 es el ms significativo, ya que IR + IR desplaza el IR en
lugar a la izquierda. La salida del registro de corrimiento no afecta a los bits de
estado de la ALU.
Todas las instrucciones que tengan 00 en sus dos bits ms significativos llegarn a la lnea 4, donde se las examinar el bit 13, que mandar a las que empiecen por 000 a la lnea 5 ya las que empiecen por 001 a la lnea 11. La lnea 5
es un ejemplo de microinstruccin con ENC = O; solamente examina el TIR,
pero no lo cambia. Segn sea el resultado de esta comprobacin, se seleccionar
el cdigo de LODD o el de STOD.
Si es LODD, el microcdigo deber primero extraer la palabra direccionada
directamente, cargando los 12 bits menos significativos del IR en el MAR. En
este caso, los 4 bits ms significativos son cero, pero para STOD y otras microinstrucciones no lo ser. Sin embargo, como el MAR slo tiene 12 bits de anchura, los bits de cdigo de operacin no afectarn a la lectura. En la lnea 7 el
microprograma no tiene nada que hacer y, por lo tanto, slo espera. Cuando
llega la palabra, el microprograma la copia al AC y salta al comienzo del bucle,
STOD, ADDD y SUBO son similares. Lo nico que cabe mencionar es cmo se
realiza la resta. Usa la siguiente propiedad de la aritmtica en complemento a
dos:

INSP}
"DESP}

x - y

x + (-y) = x + (ji + 1) = x + 1 + y

La suma de 1 al AC se hace en la lnea 16, que de otro modo se hubiera desperdiciado, como la 13.
El microcdigo de JPOS comienza en la lnea 21. Si AC<O, la bifurcacin
no se realiza y .IPOS termina inmediatamente saltando de nuevo al bucle (ciclo)
principal. En cambio si AC ) 0, se extraern los 12 bits menos significativos del
1R haciendo el Y lgico de ste con la mscara 007777 y guardando el resultado
en el Pe. No cuesta aqu nada eliminar los bits de cdigo de operacin y por

214

Organizacin de computadoras/Un

ello es aconsejable hacerlo. Si hubiera costado una microinstruccin adicion~l,


tendramos que examinar muy cuidadosamente si el tener basura en 19s 4 bits
ms significativos del PC puede causar algn problema ms tarde.
En cierto modo, JZER (lnea 23) funciona en forma contraria a JPOS. En
JPOS, si la condicin se cumple, no se produce el salto y el control vuelve al
bucle principal. En JZER se produce el salto si se cumple la condicin. Como el
cdigo para realizar el salt es el mismo en todas las instrucciones de salto, podemos ahorrar microcdigo yendo a la lnea 22 siempre que sea posible. Este estilo de programacin normalmente se considerara primitivo si se tratara de un
programa de aplicacin; pero en un microprograma no se tienen esos escrpulos. El rendimiento es lo ms importante.
JUMP y LOCO son evidentes, por lo que la siguiente rutina de ejecucin interesante esla de LODL. Primero se calcula la direccin absoluta de memoria
sumando el desplazamiento contenido en la instruccin al SP. Despus se inicia
la lectura de memoria. Como el resto del cdigo es igual que el de LODL y
LODD, usaremos las lneas 7 y 8 para ambos. No slo se ahorra memoria de
control sin prdida de velocidad, sino que tambin hay menos cdigo que depurar. STOL, ADDL y SUBL son similares. El cdigo de JNEG y JNZE es similar
al de JZER y JPOS, respectivamente (y no al contrario). CALL decrementa primeramente el SP yentonces apila la direccin de retorno, saltando finalmente
al procedimiento. La lnea 49 es casi idntica a la lnea 22; si hubieran sido exactamente iguales, podramos haber eliminado la 49 poniendo en la 48 un salto incondicional a la 22. Desafortunadamente,
debemos mantener activo WR durante otra microinstruccin.
Las macroinstrucciones restantes tienen 1111 en sus 4 bits ms significativos,
por lo que se necesita decodificar los bits del campo de direccin paradistinguirlas. Sus rutinas de ejecucin son tan simples que no las vamos a comentar.

4.4.3. Observaciones sobre el microprograma


Aunque hemos estudiado el microprograma con bastante detalle, es interesante hacer algunos comentarios. En la figura 4-16 incrementamos el PC en la lnea l. Podamos tambin haberlo incrementado en la lnea O, dejando libre la
lnea 1 para alguna otra cosa mientras se espera. En esta mquina no hay nada
que hacer, pero en una real el microprograma tendra la oportunidad de examinar los dispositivos de EIS en espera de servicio, refrescar la memoria o alguna
otra cosa.
Si hubiramos dejado la lnea 1 como est, podramos, sin embargo, acelerar la mquina modificando la lnea 8 para leer

mar:

=
<?

Cap. 4 El nivel de microprogramacin

enfoque estructurado

pe; ae : = mbr; rd; goto 1;

215

En otras palabras, podemos empezar la extraccin de la siguiente microinstruccin antes de terminar la ejecucin de la que est en curso. Esta posibilidad es
una forma primitiva de escalonamiento o seriacin. Tambin se puede aplicar el
mismo truco a otras rutinas de ejecucin.
Est claro que una proporcin considerable del tiempo de ejecucin de cada
microinstruccin est dedicado a decodificarla bit por bit. Esta observacin seala que se puede cargar el MPC bajo control del microprograma. En muchas
computadoras existentes la microarquitectura tiene medios fsicos para extraer
los cdigos de operacin de las macroinstrucciones y pasarlos al MPC, donde
efecta una operacin de seleccin mltiple. Por ejemplo, si pudiramos
desplazar el IR 9 bits a la derecha, borrar los 9 bits ms significativos y poner el
nmero resultante en el MPC, podra seleccionar entre 128 localidades, de las
posiciones O a 127. Cada una de esas palabras tendra la primera microinstruccin de la macroinstruccin correspondiente. Aunque este mtodo desperdicia
memoria de control, acelera en gran medida la mquina y, en la prctica, casi
siempre se usa algo parecido.
No hemos dicho nada de cmo se realiza la E/S. Ni tenemos que hacerlo.
Utilizando EIS por memoria, la CPU no es capaz de diferenciar entre direcciones de memoria verdaderas y las de los registros de los dispositivos de E/S.
El microprograma realiza las lecturas y escrituras en las cuatro palabras superiores del espacio de direcciones como si lo hiciera con otras cualesquiera.
4.4.4. Perspectivas
En este punto conviene detenerse un minuto para reflexionar sobre los fundamentos de la microprogramacin. La idea bsica es comenzar con una mquina fsica muy sencilla. La de nuestro ejemplo consta de poco ms que un
grupo de 22 registros, una pequea memoria ROMde control, un sumador mejorado, un incrementador, un registro de corrimiento y algunos circuitos combinacionales para. multiplexar, decodificar y secuencializar. Con este material
fuimos capaces de construir un intrprete programado que llevara a cabo las
instrucciones de la mquina de nivel 2. Con la ayuda de un compilador, podemos traducir programas escritos en lenguajes de alto nivel a instrucciones de nivel 2 e interpretar stas una a una.
Si queremos ejecutar un programa escrito en un lenguaje de alto nive., debemos traducirlo primero al nivel 2 y luego interpretar las instrucciones resultantes. El nivel 2 sirve de interfaz entre el compilador y el intrprete. Aunque, en
principio, el compilador podra generar directamente microcdigo, esto es
complicado y desperdicia gran cantidad de espacio. Cada una de nuestras macroinstrucciones ocupa una palabra de 16 bits, mientras que el microcdigo correspondiente, excluyendo la lgica de decodificacin de instrucciones, requiere 4 microinstrucciones de 32 bits en promedio. Si compilramos directamente a

216

Organizacin de computadoras/Un

enfoque estructurado

Cap. 4

nivel I , la memoria total necesaria se multiplicara por ocho. Adems, la memoria necesaria sera memoria de escriturapara control, que es muchsimo ms cara debido a su gran velocidad. No conviene usar la memoria principal para el
microcdigo, ya.que obtendramos una mquina lenta.
A la luz de estos ejemplosconcretos,
se advertir claramente por qu las mqunas se disean comounaseriede
niveles. Se hacepor razones de eficiencia y
simplicidad, ya que cada nivel seaplica a un nivel de abstraccin distinto. El diseador del nivelO se ocupa de cmo ganar unos pocos nanosegundos en la
ALU utilizando algn nuevo algoritmo que reduzca el tiempo de propagacin
del acarreo. El microprogramador
se interesa en cmo hacer el mximo nmero
de operaciones elementales con cada microinstruccin, aprovechando en lo posible el paralelismo inherente al hardware. El diseador del juego de macroinstrucciones desea proporcionar al escritor de compiladores y al microprogramador una interfaz con la que se puedan sentir a gustoy que, al mismo tiempo, sea
eficiente. Sin duda cada nivel tiene objetivos, problemas y tcnicas diferentes y,
en general, una forma distinta de ver la mquina. Dividiendoel problema del
diseo de la mquina en varios subproblemas, podemos intentar dominar la
complejidad intrnseca del diseo de una computadora moderna.
.

4.5. EL DISEO DEL NIVEL DE MICROPROGRAMACION


Como cualquier otra cosa en informtica, el diseo de la microarquitectura
est lleno de limitaciones. En las secciones siguientes veremos algunos de los temas de diseo y los problemas que hande sopesarse.
4.5.1. Microprogramacin.

horizontal frente. a microprogramacin

vertical

Probablemente la decisin ms importante sea cun codificadas deban estar


las microinstrucciones.
Si furamos a construir la Mie-l con una sola pastilla
VLSI, se podran ignorar abstracciones tales como registros, ALU, etc., y pensarslo en las compuertas. Paraque funcione la mquina, se necesitan ciertas
seales, como las 16 de habilitacin de salida de los registros al bus A o las que
controlan el funcionamiento de la ALU. Si mirramos dentro de la ALU, veramos que toda la circuitera interna est controlada por cuatro lneas, no dos, ya
que en la esquina izquierda de la figura 3-20 encontramos un decodificador de 2
a 4. En resumen, se puede hacer funcionar cualquier mquina con n seales de
control aplicadas en los lugares adecuados sin decodificar nada.
Este punto de vista nos obliga a considerar un formato de microinstruccin
diferente: hacerlo de n bits, uno por seal de control. Las microinstrucciones
diseadas segn este principio se denominan horizontales y representan un
extremo del espectro de posibilidades. En el otro extremo estn las microinstrucciones con un pequeo nmero de campos muy codificados. Se dice que

El nivel de microprogramacin

217

son verticales. Los nombres derivan de la manera en que un artista dibujara sus
memorias de control respectivas: los diseos horizontales tienen un nmero
bastante pequeo de microinstrucciones
anchas; los verticales tienen muchas
microinstrucciones estrechas.
Entre ambos extremos hay muchos diseos intermedios. Nuestras microinstrucciones, por ejemplo, tienen algunos bits, como MAR, MBR, RO, WR y
AMUX, que controlan directamente funciones del hardware. Por otro lado los
camposA, B, C y ALU requieren alguna lgica de decodificacin antes de 'que
puedan aplicarse a compuertas individuales. Una instruccin vertical extrema
tendra solamente un cdigo de operacin, que sera simplemente una generalizacin de nuestro campo ALU, y algunos operandos, como nuestros campos
A, By C. En una organizacin de este tipo se necesitaran cdigos de operacin
para leer y escribir en memoria, hacer microsaltos, etc., porque los campos que
controlan esas funciones en nuestra mquina ya no estaran presentes.
Para distinguir ms claramente entre microinstrucciones horizontales y verticales, vamos a redisear nuestro ejemplo de microarquitectura
y hacer que se
use microinstrucciones verticales. Cada microinstruccin contendr ahora tres
campos de 4 bits, que suman un total de 12 bits, frente a los 32 de la versin orignal. El primer campo es el cdigo de operacin, OP, que dice qu hace la
microinstruccin. Los siguientes campos son dos registros, R 1 y R2. Para los
saltos, se combinan formando un nico campo de 8 bits, R. Una microinstruccin tpica sera ADD, SP, AC, que sumar el AC al SP.
En la figura 4- 17 se muestra la lista completa de cdigos de operacin de las
microinstrucciones de esta nueva mquina que llamaremos Mic-2. En la lista
vemos quecada microinstruccin realiza una nica funcin: si suma, no puede
desplazar ni cargar el MAR, ni siquiera mantener activa la seal RO. Con apenas 12 bits por microinstruccin,
slo hay sitio para especificar una operacin.
Vamos a rehacer la figura 4-10 para mostrar las nuevas microinstru~ciones.
La figura 4-18 muestra el nuevo diagrama de bloques. La ruta de datos, representada a la izquierda, es idntica a la anterior. La mayor parte de la porcin de
control, a la derecha, tambin quedar igual. En particular, an necesitamos el
MIR y la memoria de control (aunque esta vez con anchura de 12 bits, en lugar
de 32). Los tamaos y funciones del MPC, el Mmux, el incrementador, el reloj
y la lgica de microsecuenciamiento
son idnticos a los del diseo horizontal.
Adems, necesitaremos decodificadores de 4 a 16 para los campos RI y R2,
anlogos a los de A, B y C de la figura 4-10.
Las tres principales diferencias entre la figura 4-10 y la figura 4- 18 son los
bloques rotulados ANO, NZ y "Decodificacin de OP". Se necesita AND porque el campo RI lleva tanto el bus A como el C. Se presenta el problema de que
el bus A se carga durante el subciclo 2 pero el bus C no puede cargarse en la memoria interna hasta que se hayan estabilizado los registros de A y B, en el subciclo 3.

218

Organizacin de computadoras/Un

0000

ADD

Suma

,1:=,1+,2

0001

ANO

Y booleano

,1:=,IY,2

0010

MOVE

Mueve registro

,1:= r2

0011

COMPL

Complementa

,1:= inv

0100

LSHIFT

Desplaza a la izquierda

,1: = desizq (,2)

0101

RSHIFT

Desplaza a la derecha

,1: = desde, (,2)

0110

GETMBR

Almacena el MBR
en registro

',1:= rim

0111

TEST

Examina registro

jI ,2< Othan

1000

BEGRD

Comienza lectura

rdm: = ,1; lec

1001

BEGWR

Comienza escritura

rdm: = , 1; rim: = ,2; ese

1010

CONRD

Continua lectura

lec

1011

CONWR

Continua escritura

ese

1100
!

Cap. 4 El nivel de microprogramacin

219

Significado

Instruccin

Binario Nemotcnico

enfoque estructurado

(,2),

n:= true;

jI ,2=0 than

z:= true

(no usado)

1101

NJUMP

Salta si N = 1

jI n than goto

1110

ZJUMP

Salta si Z = 1

il z than goto r

1111

UJUMP

Salta siempre

goto 'r

,=16.,1+,2

Hg. 4-17. Cdigos de operacin del Mic-Z,

La caja AND hace el y lgico de cada una de las 16 seales decodificadas


con la seal del reloj del subciclo 4 y con una seal que proviene de la decodificacin de OP y que equivale a la vieja seal ENC. El resultado es que las 16 seales que cargan datos en la memoria interna se activan bajo las mismas condiciones que antes.
El bloque NZ es un registro de dos bits al que se le pueden hacer almacenar
las seales N y Z del ALU. Se necesita esta facilidad ya que en el nuevo diseo,
el ALU trabaja en una microinstruccin pero slo puede verificar los bits de estado en la siguiente. Como la ALU no tiene donde almacenar N y Z y stas se
obtienen de su salida en cada momento, siendo N su bit ms significativo y Z el
O lgico de todos sus bits, ambas seales de estado se perderan si no se guardaran en alguna parte.
El elemento clave de la nueva microarquitectura es el decodificador de OP.
Esta caja toma el campo de cdigo de operacin y produce seales para controlar la caja AND, la lgica de microsecuenciamiento, NZ, Amux, la ALU, el registro de corrimiento, el MBR, el MAR, RD y WR. La lgica de microsecuen-

Fig. 4-18. Microarquitectura

con microinstrucciones

verticales.

ciamiento, la ALU y el registro de corrimiento requieren dos seales cada uno


que son idnticas a las del diseo anterior. En total, el decodificador de OP genera 13 seales distintas basndose en los 4 bits ms significativos de la
microinstruccin en curso.
Para cada uno de los 16 posibles cdigos de operacin de microinstruccin
el dise.~dor de la mquina debe determinar cul de las 13 seales que salen del
deCO?IfI~ad~r de OP est activa y cul no. En efecto, se debe generar una
matnz binaria de 16 x 13 que d el valor de cada lnea de control para cada cdigo de operacin. La figura 4-19 muestra esta matriz para el Mic-2. Las columna~ estn rotuladas con los nombres de las seales. Los sufijos B y A significan
BaJO y Alto, respectivamente, y se aplican slo a los dispositivos con dos lneas

220

Organizacin

de computadoras/Un

enfoque estructurado

Cap. 4

de control: la ALU, el registro de corrimiento y la lgica de microsecuenciamiento.


Para dar un ejemplo de un cdigo de operacin de microinstruccin, consideremos BEGRD, que inicia una lectura en memoria. Usa la funcin 2 de la
ALU (seleccin debus A), con lo que ALUH = 1 y ALUL = O. Tambin carga
el MAR y activa RD. Las dems seales de control quedan inactivas. Ahora consideremos los saltos. Como hemos decidido que sean compatibles con nuestra
vieja lgica de microsecuenciamiento, el par MSLH MSLL debe ser 00 para no
salto, al para salto si N, 10 para salto si Z y 11 para salto incondicional (la
compatibilidad ha alcanzado tales proporciones epidmicas, que incluso las
mquinas hipotticas de los libros de texto son compatibles con sus predecesoras), NJUMP genera 01, ZJUMP genera 10 y UJUMP general 11. Todos los dems cdigos de operacin generan OO.

ALUL
SHL
AMUX
MAR
RO
MSLH
Cdigo de operacin
de microinstruccin ALUH
NZ
ANO
SHH
MBR
WR JMSLL

AOO

ANO

MOVE

COMPL

LSHIFT

RSHIFT

GETMBR

TEST

BEGRO

+
+

+
+
.+

.+

+
+

BEGWR

10

CONRO

11

CONWR

'13

NJUMP

14

ZJUMP

15

UJUMP

+
+
+

12

'11

~
:
1uilli
'.

.....

fj

!II

i,
:Ji
:Ir.
lit

1ft

+ "ABCD

Vigo 4-19. Seales de control para cada cdigo de operacin de microinstruccin.


Un signo + significa que la seal est activa; un blanco significa que no lo est.

ABD

ABeD

SHH

MAR

= ABEi5 + ASCD = ABe

MSLH = ABCD + ABCD

221

Ahora viene la parte interesante. Cmo construiremos un circuito de cuatro entradas (los bits de cdigo de operacin) y trece salidas (las seales de control) que calcule la funcin de la figura 4-19? Pues con el uso de una o varias
PLA (o ROM). La figura 4-19 es una forma algo peculiar de representar 13 tablas de verdad, una por columna, de cuatro variables cada una, donde el nmero de fila define implcitamente el valor de las cuatro variables. Entonces la
cuestin de cmo construir el circuito se reduce a cmoimplementar
una tabla
de verdad. La mejor forma de hacerlo consiste en emplear una PLA de cuatro
entradas y 13 salidas. Si no la podemos conseguir, podemos usar tres 74S330,
que son PLA de 12 entradas y 6 salidas. Si denotamos los cuatro bits de cdigo
de operacin con las letras A a D, del ms significativo al menos significativo,
algunas de las salidas son:
ALUL = ABCD

lineas de control

El nivel de microprogramacin

= ABC

Slo deben generarse internamente] 5 trminos producto, ya que A BCD no se


necesita.
Habiendo rediseado el hardware, necesitamos reescribir el microprograma. Lo muestra la figura 4-20.Se han dejado las mismas etiquetas para que sea
ms fcil comparar los dos microprogramas. Tambin se ha conservado la sintaxis. Podamos haberlo escrito usando un lenguaje ensamblador tpico (por
ejemplo, con los cdigos de operacin de la figura 4-]7), pero hemos usado de
nuevo LMAN porque es mucho ms fcil de leer. Ntese que las sentencias
LMAN de la forma alu = reg usan la microinstruccin TEST para ajustar los
bits N y Z. Asegrese el lector de que entiende la diferencia entre el microprograma en binario, tal como se carga en la memoria de control, y la versin en
lenguaje ensamblador que se da en el texto.
Aunque ms largo, este microprograma es ms simple que el anterior puesto
que cada lnea slo realiza una operacin. En consecuencia, muchas lneas del
original han tenido que dividirse en dos, tres, e incluso cuatro lneas en ste.
Otra causa que aumenta el nmero de microinstrucciones es la ausencia de
microinstrucciones de tres direcciones. Vase, por ejemplo, las lneas 22 y 27 del
primer microprograma.
El microprograma original usa 79 palabras de 32 bits, que dan un total de
2528 bits de memoria de control. El segundo usa 160 palabras de 12 bits, que
hacen un total de 1920 bits. La diferencia representa un ahorro de 240,70 de memoria de control. En una computadora integrada ep una pastilla, tambin

222

Organizacin

o:

de computadoras/Un

enfoque estructurado

Cap, 4 El nivel de microprogramacin

23: a/u:= ae; {JZER}


ir z then goto 22;
24: goto O;

mar:= pe; rd ;

1: rd ;

pe:= pe + 1;
2: ir:= mbr ;

tir : = /shift (ir);


ir n then goto 28;
3: tir: = /shift (tir);
ir n then goto 19;
4: tir := lshi]: (tir);

ir n then

25: a/u:=tir;

ir n then goto 27;


26: pe:= ir; {JUMP}
pe := band (pe, amask);
goto O;

goto 11;
27: ae: = ir; {LOCO}

5: atu := tir ;

ir n then

ae

goto 09;

goto O;
IVr;

10: IVr;
goto O;
11: a/u := tir ;
ir n then goto 15;
12: mar:= ir; rd ; {ADDD}
13: rd;
14: a:= mbr ;

ac

~=

band(ac, amask);

goto O;

6: mar:= ir; rd ; {LODD}


7: rd ;
8: ac:= mbr ;
9:' mar:= ir; mbr:= ae;

:=

{STOD}

28: tir: = /shift (tir);


ir n then goto 40;
29: tir: = /shift (lir);
ir n then goto 35;
30: a/u: = tir ;
ir n then goto 33;
31: a:= ir; {LODL}
a := a + sp ;
32: mar:=a;rd;
rd ;

oc + a;

goto O;
15: mar :=' ir; rd; {SUBD}
16: rd ;
99: ae:= ac + 1;
17: a:= mbr ;

a:=inv(a);
18: ae := ae + a;
goto O;
19: tir := /shift (tir);
ir n then goto 25;
20: alu := tir ;
ir n then goto 23;
21: alu := ae; {JPOS}
ir n then goto O;
22: pe:= ir;
pe : = band (pe , amask);
goto O;

Fig. 4-20. El microprograma

ac := mbr ,
goto O;
33: a: '" ir; {STOL}
a := a + sp ,
34: milr: = a ; mbr :'" ae ; wr;
wr;
goto O;
35: a/u:'" tir ;
ir n then goto 38;

38 a :=,ir{SUBL}

58 a:= mbr ;

a:=a+sp;
39: mar:= a; rd;

mar:= ac; mbr:= a; wr;


wr;

rd ;
goto 99;

goto O;
59: alu := tir ;
ir n then goto 62;

40: tir : = lshif: (tir);


ir n then goto 46;
41: a/u:= tir ;
ir n then goto 44;

60: sp := sp + (-I);{PUSH)
61: mar:'" sp; mbr:= ac; wr;
IVr;
goto O;

42: alu := ae; {JNEG}


ir n then goto 22;
43: goto O;

62: mar:
63: rd ;

44: alu := ae; {JNZE}


ir z then goto O;
45: pc := ir;
pe : = band (pe, amask);
goto O;
46: tir : = /shift (tir);
ir n then goto 50;
47: sp := sp + (-1)', {CALL}
48: mar:= sp ; mbr:= pe; wr;
wr;
49: pc := ir;
pe := band (pe, amask);
goto O;
50: tir := /shift (tir);
ir n then goto 65;
51: tir : = /shift (tir);
ir n then goto 59;
52: alu:= tir;
ir n then goto 56;

:=

a + sp;

37: '/lUlr:= a; rd ;
rd ;
a:= mbr ;
(lC

:'"

ac + a;

goto O;

del Mic-2.

sp := sp + 1;
64: ac:= mbr ;
goto O;
65: tir:= /shift(tir);
ir n then goto 73;
66: a/u:= tir ;
ir n then goto 70;
67: mar: = sp ; rd ; {RETN}

68: rd ;
sp = sp + 1;
69: pc := mbr ;
goto O;
70: a:= ac; {SWAP}
71:ac:=sp;
72: sp := a;
goto O;
73: a/u:= tir ;
ir n then goto 76;

53: mar: '" ac; rd ; {PSHl}

rd;
36: a:=ir;{ADDL}

= sp ; rd ; {POP}

54: sp := sp + (-1);
55: a:= mbr ;
mar:= sp; mbr;= a; wr;
wr;
goto O;
56: mar: = sp ;rd; {POPl}
57: rd :
sp := sp + 1;

74: a: = ir; {INSP}


a := band (a, smask);
75: sp: = sp + a ;
goto O;
76: a:'" ir; {DESP}

a:'" bandia , smask y;


77: a : inv (a);
78: a:'" a + 1;

Fig. 4-20, (continuacin),

sp

:=

sp + a;

goto O;

223

224

'11

j.
!"

Organizacin

de computadoras/Un

enfoque estructurado

representa un ahorro de 24070en el espacio de la pastilla (chip) ocupado por la


memoria de control, lo que lo hace ms barato y fcil de fabricar. El precio que
hay que pagar por la memoria de control ms pequea es que han de ejecutarse
ms microinstrucciones por macroinstruccin. Normalmente, esto hace ms
lenta la mquina. En consecuencia, las mquinas veloces y caras tienden a ser
horizontales y las ms lentas y baratas, verticales.
La existencia de microinstrucciones muy codificadas, como las del Mic-2,
plantea serios problemas conceptuales acerca de lo que es la microprogramacin. El juego de microinstrucciones de la figura4-17 podra pasarcasiporel
juego de instrucciones del lenguaje de mquina convencional de una micro o
minicomputadora muy simple. La PDP-8, por ejemplo, es una minicornputadora con palabras de 12 bits cuyas instrucciones no son mucho ms potentes
que stas. Considerando que el "significado" de las instrucciones est determinado por el' hardware (la PLA o circuito del decodificador de OP), se podra
decir que el Mic-2 es realmente una mquina no microprogramada en la que se
ejecuta un intrprete para otra mquina. Si el microprograma de la mquina
vertical se guardara en la memoria principal (como sucede en la IBM 370/145,
por ejemplo), la distincin entre una mquina microprogramada muy vertical y
una cableada (no microprogramada) perdera an ms nitidez. Vase a Dasgupta (1979) si se desea profundizar en los aspectos de codificacin y paralelismo
en el microcdigo.
4.5.2. Nanoprogramacin
Los diseos vistos hasta ahora tenan dos memorias: la central (utilizada para guardar el programa de nivel 2) y la de control (utilizada para guardar el
microprograma). Con una tercera memoria, la nanomemoria, se pueden realizar interesantes compromisos entre la organizacin horizontal y la vertical. La
nanoprogramacin
es apropiada cuando se repiten varias veces muchas
microinstrucciones. El microprograma de la figura 4-16 no tiene esa propiedad.
La microinstruccin ms frecuente es la que slo tiene lec y nicamente aparece
CinCO veces.
La figura 4-21 ilustra el concepto de nanoprogramacin.
La parte (a)
muestra un microprograma de n microinstrucciones de w bits cada una. Se necesitan nw bits de memoria de control en total para guardarlo. Supongamos
que un estudio detallado del microprograma muestra que slo se usan m microinstrucciones diferentes de las 2"' posibles, siendo m< <no Se podra utilizar una
nanomemoria especial de m palabras de w bits para guardar cada microinstruccin nica. En el microprograma original se podra reemplazar cada instruccin
por su direccin en la nanomemoria. Como la nanomemoria slo contiene 111
palabras, la memoria de control necesaria tiene solamente logz m (redondeado
al entero mayor) bits de anchura, como se muestra en la figura 4-21(b).

Cap. 4

El nivel de microprogramacin

225

--wbits-

Microprograma

Microprograma

"--wbits-

Nanoprograma

t '--- __

(a)

_'

(b)

Fig. 4-21. (a) Microprograma convencional. (b) Nanoprograma correspondiente


si slo aparecen en el microprograma m microinstrucciones.

El microprograma se ejecuta como sigue. Primero se extrae una palabra de


la memoria de control y se usa para seleccionar una palabra de la nanomernoria, que se extrae y se guarda en el registro de microinstruccin. Los bits de este
registro se utilizan como seales de control durante un ciclo. Al finalizar este
ciclo, se extrae la siguiente palabra de la memoria de control y el proceso se repite.
Por ejemplo, supongamos que el microprograma original tiene 4096 x 100
bits pero slo aparecen 128 microinstrucciones distintas. Bastara una nanomemoria de 128 x 100 bits para guardar las microinstrucciones necesarias. La memoria de control tendra ahora 4096 x 7 bits, apuntando cada una de sus palabras a una nanoinstruccin.
El ahorro de memoria en este ejemplo sera:
ahorro

4096 x 100 - 4096 x 7 - 128 x 100

368 128 bits

El precio que debe pagarse por el ahorro de memoria es una ejecucin ms


lenta. La mquina con la memoria de control de dos niveles funcionar con menor rapidez que la original, debido a que el ciclo de extraccin requiere ahora
dos referencias a memoria, una a la memoria de control y otra a la nanomemoria. Estas dos extracciones no pueden traslaparse.
La nanoprogramacin
es verdaderamente eficaz cuando se usan mucho las
mismas microinstrucciones. Si se pudieran contar como iguales dos microinstrucciones casi iguales, el microprograma contendra menos microinstrucciones
distintas, pero ms frecuentemente usadas. Se puede variar la idea bsica para
permitir esto con slo utilizar como parmetro las palabras de la nanomemoria.
Por ejemplo, dos microinstrucciones pueden diferir solamente en un campo
que diga qu registro ha de sacarse a cierto bus. Poniendo el nmero del re-

226

Organizacin

de computadoras/Un

enfoque estructurado
Cap. 4 El nivel de microprogramacin

gistro en la memoria de control, en lugar de ponerlo en la nanomemoria (es decir, omitiendo el campo del registrode las nanoinstrucciones), las dos microinstrucciones podran apuntar a la misma nanopalabra. Cuando sta se extraiga y
se ponga en el registro de microinstruccin, el campo de registro se tomar de la
micromemoria y no de la nanomemoria.
Naturalmente, con este mecanismo aumenta la anchura de la memoria de
control, que puede o no compensar la ganancia obtenida con una nanomemoria
ms pequea.

4.5.3. Mejora del rendimiento


Aunque el objetivo de la nanoprogramacin
es reducir el tamao de la memoria de control, incluso al precio de una ejecucin ms lenta, tambin se ha
invertido gran cantidad de tiempo y esfuerzo en el objetivo opuesto: intentar
acelerar la ejecucin, incluso al precio de una mayor memoria de control. Estos
dos criterios de diseo aparentemente incompatibles tienen que ver con dos
estrategias de mercadotecnia: la de mquinas baratas y la de mquinas rpidas.
En esta seccin examinaremos algunas de las maneras en que se puede modificar nuestra sencilla microarquitectura para que las mquinas funcionen ms rpido.
Hasta ahora hemos supuesto que los cuatro subciclos tenan la misma duracin. Aunque esto es sencillo, pocas veces produce el mejor rendimiento, ya
que invariablemente uno de los cuatro necesita mucho ms tiempo que los otros
tres. Si los cuatro duraran lo mismo que el peor de los casos, la velocidad de la
mquina disminuira notablemente. La forma de corregir esto es permitir que la
duracin de cada subciclo sea independiente de la de los dems. La duracin de
cada subcicIo debe ajustarse a la necesaria para realizar su funcin.
Aunque esto constituye un paso hacia adelante en la direccin correcta, es
an demasiado conservador, ya que la duracin de cada subciclo est todava
determinada por el peor de los casos en ese subciclo. Considrese, por ejemplo,
el subciclo 3 de nuestros ejemplos. Si la funcin de la ALU es la suma, probablemente se necesite ms tiempo (debido a los retrasos en la propagacin del
acarreo) que si la operacin fuera simplemente seleccionar A. Si la duracin del
subciclo 3 se determinara en el momento del diseo, debera ser la de la suma y
no la de seleccionar A. Otra estrategia consistira en que cada operacin que va
a realizarse determine la duracin del subciclo, de modo que sea tan corta como
sea posible.
Una vez tomada la decisin de hacer que la duracin de cada subciclo dependa de la operacin, debemos encontrar una forma de llevar a la prctica esta
estrategia. Acelerar o desacelerar el reloj es una tcnica difcil, por eso lo que se
hace es conseguir un reloj maestro con un periodo mucho ms corto que la du-

AC
Mem

000100
000050

000100
170000

077777
177775

100001
000010

000010
100001

000030
N =O
V=O

010100
N=O
V=O

100002
N = 1
V = 1

077771
N=O
V = 1

100007
N = 1
V = 1

Fig. 4-22. Algunos ejemplos de restas de nmeros de 16 bits en complemento


(octal). Tambin se muestran los bits N y O de cada resultado.

227

a2

racin del. subciclo ..As, cada subciclo dura un determinado nmero de impulsos. Po~ ejemplo, SIA.LV tardara entre 75 y ISO nseg en realizar una operacin,
se podna u~ar un reloj maestro con un periodo de 25 nseg, durando el subciclo
correspondiente entre tres y seis periodos.
Nos que~a averiguar cmo sabe la mquina cunto debe durar un subciclo.
Hay dos P?slbles SO,lu.ciones.Una de ellas es que la microinstruccin tenga cam~os que dlg~n explctarnente los tiempos necesarios. La otra es derivar estos
tiempos basandose en los campos de operacin (utilizando una PLA), de la misma f~rma que se.~eneran las .dems seales de control en una mquina vertical.
~a primera SO~U.CIO~
,cuesta bits de la memoria de control y la segunda cuesta lgica de decodificacin y tiempo.
Otra f?r.~a de obtener mayor potencia de la mquina, consiste en incrementar la nexI~lhdad d.~ los microsaltos condicionales. Como ejemplo, considrese
una macrOInstruCClOn .OMITE SI MENOR, que compare el registro AC con
una pala~ra de ~emofla. ~ salte a la siguiente macroinstruccin si AC es menor.
Para reahz~r la ~nstruCClon, se requiere restar la palabra de memoria de AC (o
de una.copla de este), lo que puede dar como resultado un desbordamiento, como se Ilustra en la figura 4-22.
~ebidoal desbordamiento potencial, no es posible decir, con slo ver el bit
de slg~o del resultado, cual de los operandos era menor. En el cuarto ejemplo
de la figura 4-_2~, AC es menor que la palabra de memoria pero el resultado de
la resta e~ p~sltlva. La co~dicin correcta a probar es N O-EXCLUSIVO V, en
donde V indica la .presencla o ausencia de desbordamiento. (El hardware asigna
a V ~I valor de 1 siempre que el acarreo al bit de signo difiera del acarreo del bit
de signo.)
" Afortunadamente,
l~ mayora de las ALU no slo generan N y Z sino tambien D y A (acarreo). Sin embargo, si slo hubiera cuatrosaltos condicionales
para c~~a uno de los bits NZDA, la macroinstruccin OMITE SI MENOR
re~uenna muc~as microinstrucciones. Para mayor flexibilidad, muchas rnqUll1a.sno pe,r~lten ~xaminar individualmente los bits de estado de la ALU. En
cambio, un Ul1lCObit de. las microinstrucciones provoca el O lgico de los bits
NZDA con los. cuatro bits menos significativos del campo ADDR y se salte al
resul~ado. La figura 4-23 da algunos ejemplos. Si los 4 bits menos significativos

228

Organizacin

de computadoras/Un

NZDA

Direccin
hacia donde
salta

10000000

1001

10001001

10001000

1001

10001001

10001011

1001

10001011

10001011

1000

10001011

10001011

0000

10001011

10001111

0000

10001111

10001111

1100

10001111

10000000

1100

10001100

Campo

DIR

Fig. 4-23. Algunos ejemplos de saltos a mltiples destinos, basndose en los bits
NZDA.
.11,

i
! i

, !

J,

Cap. 4

enfoque estructurado

fueran O, esto se convertira en un salto condicional con 16 alternativas. Si todos fueran 1, se convertira en salto incondicional a una direccin especfica terminada en 1111.
Con esta ayuda la instruccin OMITE SI MENOR sera mucho ms fcil de
interpretar. Elegiramos un campo ADDR que terminara en 0101, como
10000101 (binario), y realizaramos el salto. Las microinstrucciones situadas en
10001101 y 10000111 traern el caso AC < memoria y las situadas en .10000101
y 10001111 tratarn el caso contrario. No se necesita ninguna decodificacin
adicional. Tambin podramos haber usado una direccin de base terminada en
0000, en lugar de la que termina en 0101, pero estas direcciones son muy valiosas, yaque son las nicas disponibles para saltos con 16 posibilidades. Por
tanto, no debe elegirse a la ligera.
Es claro que con este tipo de control del secuenciamiento de las microinstrucciones, la tarea de situar las microinstrucciones en la memoria de control
puede causar verdaderos dolores de cabeza. La primera instruccin ejecutada
despus de un salto de 16 alternativas debe tener un salto incondicional, ya que
la palabra siguiente (excepto si es la ltima) se utiliza como uno de los posibles
destinos del salto. A dnde debera saltar cada una de estas microinstrucciones? Ciertamente no a una direccin de la forma xxxxOOOO,ya que son demasiado valiosas, pero tambin podran necesitarse tarde o temprano las
dems, excepto las de la forma xxxxll11. La decisin debe tomarse con cuidado, evitando agotar algn tipo de direccin. Por ejemplo, una vez que se han
agotado las direcciones pares, ya no es posible verificar el bit de acarreo e, as
que la seleccin de direcciones debe hacerse con mucho cuidado.

229

El nivel de microprogramacin

4.5.4. Procesamiento en lnea (ppeline)


Una forma ms para acelerar la mquina consiste en conformar el hardware
con varias unidades funcionales y despus unirlas para que trabajen en lnea o
en forma escalonada (pipeline). * En la figura 2-5 se observ cmo funciona una
computadora con cinco unidades escalonadas. En la figura 4-24 se muestra que
si la instruccin l se extrae en el ciclo 1, se ejecutar en el ciclo 5. En forma parecida, si la instruccin 4 se extrae en el ciclo 8, se decodifica en el 9, etc., se
ejecutar en el ciclo 12. Bajo condiciones ptimas, en cada ciclo de ah en adelante se ejecuta una instruccin, dando un promedio de ejecucin de una instruccin por ciclo, en lugar de una cada cinco ciclos.
Desafortunadamente,
hay estudios que han demostrado que alrededor del
30070de las instrucciones son saltos y stos hacen estragos en la lnea de procesamiento. Los saltos pueden clasificarse en tres categoras: incondicionales,
condicionales e iterativos. Un salto incondicional indica a la computadora que
detenga la extraccin de instrucciones en forma consecutiva y se dirija a una direccin especfica. Un salto condicional verifica una condicin y.salta si sta se
cumple. Un ejemplo tpico es una instruccin que checa un registro y salta si ste contiene un valor de cero. En caso contrario, no selleva a cabo el salto yel
control contina en la secuencia actual.
Por lo general las instrucciones iterativas decrementan un contador de iteraciones y saltan al inicio si el contador no es cero (v.g. todava hay iteraciones
por hacer). Estas instrucciones son un caso especial importante de los saltos
condicionales, ya que se sabe de antemano, que casi siempre habr ese salto.
Considrese lo que sucede en la lnea de procesamiento (pipeline) de la figura 4-24 cuando se encuentra una instruccin (sealada como B) de salto condicional. La siguiente instruccin a ejecutar debera ser la siguiente a la del salto,
'Nola

del R.T.: Cada unidad trabaja en una tarea especfica como en una linea de produccin

industrial.

Ciclo

Extraccin

de instrucciones

Decodificacin

de instrucciones

Clculo de direcciones
Extraccin
Ejecucin

de operandos

la

11

8
2

Fig. 4-24. Unidad de procesamiento en lnea de 5 etapas. Las instrucciones estn


etiquetadas con nmeros. La instruccin marcada como B es un salto condicionar.'

230

Organizacin

de computadoras/Un

enfoque estructurado

pero tambin podra ser la direccin a la cual salt, llamada blanco del salto.
En virtud de que el extractor de instrucciones no sabe cual sigue sino hasta que
se ejecuta el salto, se demora y no puede continuar hasta la ejecucin de ste.
En consecuencia la lnea se vaca. Slo despus de que termina el ciclo 7, se sabe
qu instruccin sigue.
.
.
A la prdida de cuatro ciclos causada de hecho por el salto se le denomina
penalizacin por salto. Resulta evidente que con un salto en una de cada tres
instrucciones, la disminucin en el desempeo es sustancial.
Se han realizado una gran cantidad de investigaciones alrededor del problema de recuperar algo de este desempeo (DeRosa y Levy, 1987; McFarling y
Hennessy, 1986; Hwu y col. 1989 y, Lilja, 1988). Lo ms sencillo consiste en esperar que el salto no se realice y continuar procesando como si el salto fu~ra una
simpleinstniccin aritmtica. Si resulta que en efecto, el salto no se realiza, no
se ha perdido nada. Si por el contrario el salto se efecta, se deben eliminar las
instrucciones que estn actualmente en la lnea y empezar de nuevo.
Esta opcin presenta sus propios problemas. En algunas mquinas, se
puede modificar un registro como el resultado intermedio de un clculo de direcciones. Si una instruccin eliminada modific a uno o ms registros, estos
deben ser restaurados, lo que significa que debe haberun mecanismo para grabarios valores originales. Resulta instructivo hacer un modelo de la prdida en
el desempeo.
Sea P, la probabilidad

de que una instruccin sea un salto.

Sea P, la probabilidad

de que el salto se realice.

Sea b la penalizacin por salto.


El tiempo promedio de ejecucin (en ciclos) se puede calcular como la suma
ponderada de los dos casos: instrucciones regulares e instrucciones de salto.
Tiempo promedio de ejecucin

(1- P;)(l) + Pj[P,l+ b)+ (1- P,)(I)]

Un poco de lgebra revela que el tiempo promedio por instruccin es 1 + bPjP,.


Luego la eficiencia de ejecucin es 1/(1 + bPjP,). Asignando los valores (tpicos estimados) de b = 4, P, =: 0.3 y P, = 0.65, la mquina corre a menos del
60070de su capacidad potencial.
Qu puede hacerse para mejorar el desempeo? Para empezar, si se pudiera predecir la direccin del salto, se podra extraer la instruccin apropiada
(siguiente) y eliminar la penalizacin. En la frmula para la eficiencia se puede
entonces reemplazar P, por la probabilidad P; de que la suposicin sea falsa.
Existen dos clases de predicciones: estticas (al tiempo de compilacin) y dinmicas (al tiempo de ejecucin). Con prediccin esttica, el compilador hace

Cap. 4 El nivel de microprogramacin

231

una suposicin para cada una de las instrucciones de salto que genera. Suponer
por ejemplo, en las instrucciones iterativas que el salto regresar al inicio de la
iteracin, es correcta la mayora de las veces. Cuando se trata de una condicin
improbable, tal como una llamada al sistema que genera un cdigo de error, es
muy posible que el salto no se lleve a cabo. En muchos casos se utilizan diferentes instrucciones para estos casos y el solo hecho de observar el cdigo de operacin proporciona una buena sugerencia.
.
Otro esquema ms elaborado para los diseadores de mquinas consiste en
proporcionar dos cdigos de operacin para cada tipo de salto y hacer que el
compilador use el primero si cree que el salto se llevar a cabo y el segundo en
caso contrario. En forma alternativa, para programas de uso intensivo, se
pueden correr primero en un simulador, registrando, el comportamiento de cada salto; luego,el programa binario puede "parcharse". con el cdigo de operacin apropiado (probablemente se realice, probablemente no se realice).
En el mtodo de prediccin dinmica, el microprograma construye, durante
la ejecucin, una tabla con las direcciones que contienen saltos y guarda un registro del comportamiento de cada uno. Este mtodo tiende a hacer ms lenta la
mquina al llevar el registro, de modo que requiere de alguna ayuda del hardware. Algunas mediciones han mostrado que de esta manera no es difcil lograr
un 90% de precisin.
La prediccin de los saltos no es el nico punto de ataque. Otra opcin es
determinar por anticipado en la lnea, hacia que direccin ser el salto. Algunas
pruebas, como el salto si es igual son mucho ms fciles de hacer que en salto si
menorque. Las primeras se pueden hacer con un comparador, mientras que las
segundas requieren de un ciclo completo de trayectoria de datos para hacer una
resta. Con este enfoque, siempre que el microprograma encuentre un salto, hace una verificacin rpida en una etapa temprana de la lnea para ver si puede
resolver el salto de inmediato, en cuyo caso sabe en donde continuar con la
extraccin de la siguiente instruccin.
Los compiladores pueden ser de gran ayuda, por ejemplo, cuando el programador escribe una iteracin variando / desde I hasta 10, el compilador puede verificar i para ver si es igual a 10, en vez de ver si es menor de 11, de manera que
el microprograma puede librar la cuestin con una comparacin en lugar de
una resta.
Para ocuparse de aquellos saltos que no se pueden resolver en las primeras
etapas, el compilador puede tratar de encontrar algo til para que la computadora trabaje, mientras espera que se ejecute el salto. Considrese la declaracin
aritmtica seguida de una comparacin, de la figura 4-25(a). Un compilador
con una optimizacin hbil pudiera producir un cdigo ms parecido al de la
figura 4~25(b), el cual no est en lenguaje Pascal legal, pero muestra el orden de
eventos. Primero genera el cdigo para hacer la comparacin, luego hace la
operacin aritmtica. Despus de que el salto ha ingresado en la lnea de proce-

232

Organizacin

de computadoras/Un

Cap. 4

enfoque estructurado

a := b s c;

ir b < e

ir b . e
then declaracin;

a := b + e;

(a)

then declaracin
(b)

Fig. 4-25. (a) Un fragmento en lenguaje Pascal. (b) Como pudiera ser el tratamiento por parle del compilador.

"

,.
! '
r . '.,

samiento, le siguen varias instrucciones ordinarias, las cuales sin lugar.a duda
deben ejecutarse, as que no hay necesidad de hacer ninguna prediccin ni eliminacin. Para usar esta tcnica con efectividad, los microprogramadores y los
diseadores de compiladores tuvieron que trabajar en estrecha coordinacin
durante el diseo .
Si todo lo dems falla, siempreexiste la posibilidad de seguir ambas trayectorias en paralelo. Para hacerlo, se requieren dos lneas de procesamiento en el
hardware y no evita el problema de eliminacin. No obstante, este mtodo se
utiliza en ocasiones en las computadoras de orden superior, en las que el aspecto importante es el desempeo y no el precio. Desde luego, si cadatrayectoria se
topa con otro salto antes de resolver el primero, el asunto .se vuelve an ms
complicado. Probablemente no sea la mejor idea tener" flojeando" algunas
docenas de lneas de procesamiento, para enfrentar el peor de los casos.
Despus de toda esta teora respecto a lo que podrahacerse, regrese por un
momento a la mquina de ejemplo. Esta, no tiene distintas unidades de hardware para extraccin, decodificacin, etc., de modo que no es posible formar
estas lneas de procesamiento, pero con cambios menores al microprograma, se
puede lograr un nmero limitado de traslapes entre las microinstrucciones de
extraccin y ejecucin, lo que tambin es una forma de realizar las lneas.
En la figura 4-10, por ejemplo, si la siguiente microinstruccin pudiera
extraerse de alguna manera durante el subciclo 4, ya no se necesitara el subciclo
1 y el reloj slo generara impulsos para los subciclos 234234234 ... El principal
problema surge con las microinstrucciones de salto condicional. Si la mquina
esperara a que las lneas de estado de la ALU estn disponibles antes de niciar
la extraccin de la microinstruccin siguiente, sera demasiado tarde. El ciclo
habra prcticamente terminado y se podra conseguir poco traslape. En algunas mquinas el problema se resuelve usando las lneas de estado de la ALU del
ciclo anterior que, por supuesto, debern guardarse en biestables para evitar
que se desvanezcan. Estos valores estn disponibles al comienzo de cada
microinstruccin y por tanto puede empezar la siguiente extraccin inmediatamente, mucho antes de que se termine la ejecucin de la microinstruccin en
curso. No es necesario decir que esto complica en gran medida la vida del
microprogramadCJ''.

El nivel de microprogramacin

233

Desde el punto de vista tcnico, es posible escribir microprogramas para una


mquina de este estilo en una forma razonable. Por ejemplo, para examinar alguna palabra de la memoria de anotaciones y saltar si es negativa, el
microprograma puede pasar la palabra por la ALU en una microinstruccin
quena contenga un salto. La siguiente microinstruccin ser una no-operacin
con un salto condicional. Es decir, no har nada excepto examinar los bits de
estado pe la ALU, que se haban memorizado, y saltar. El precio a pagar por
programar en forma razonable es doblar la duracin del salto, lo que no es muy
deseable.
La nica solucin es conseguirse un frasco lleno deaspirinas y tratar de sacar el mximo provecho de cada situacin. Por ejemplo, el microprogramador
podra hacer una hiptesis de dnde suele saltar la microinstruccin y empezar
a hacer el trabajo que probablemente se necesite. Por desgracia, si el salto fuera
a otra alternativa, sera necesario eliminar parte de lo hecho.
He aqu un ejemplo sencillo: reescribimos las lneas 11 a 18 de la figura 4-16
para una mquina con extraccin y ejecucin traslapadas de microinstrucciones. Los resultados se muestran en la figura 4-26(a). En este ejemplo tenemos suerte, ya que despus de ejecutar la lnea 1I sabemos que seguir el cdigo
de ADDD o de SUBD, que empiezan por la misma microinstruccin. Por tanto, basta poner la microinstruccin comn en la lnea 12 para ocupar la mquina mientras se realiza el salto.
Un ejemplo menos elegante es el de la figura 4-26(b). En la lnea 52 sabemos que vamos a entrar en la microrrutina de PSHI o en la de POPI, pero, lamentablemente no empiezan por la misma microinstruccin. Supongamos, sin
embargo, que un anlisis estadstico mostr que los programas del Mac-I usan
PSHI muchas ms veces que POPl. Entonces podramos proceder como se indica en la figura 4-24(b). Para PSHI todo "a bien, pero para POPI, cuando se
llega a la lnea 56, se ha iniciado una lectura en memoria de una palabra incorrecta. Segn los detalles especficos del hardware, puede ser posible o no
abortar una lectura de memoria a medio realizar sin perturbar el funcionamien-

11: alu :=tir;


12: mer : ir; rd; if n then goto 16;

52: alu:= tir ;


53: mar:= ae; rd; if n then goto 56;

13: rd;

54: sp : sp (-1); rd;


55: mar : sp; wr; goto 10;

14: ae:= mbr + ae; goto O;


16:ae:=ae + 1; rd;
17: a: = inv (mbr);
18:ae:=ae + a; gotoO;
(a)

56: rd;
57: mar := sp; sp : sp + 1; rd;
58: rd;
59: mer : ae; wr; goto 10;
(b)

Fig. 4-26. Dos ejemplos con extraccin y ejecucin traslapada


ciones

de microinstruc-

234

Organizacin

de computadoras/Un

Cap. 4

enfoque estructurado

too Si no podemos abortarla, simplemente la terminamos y luego iniciamos la


lectura correcta. En este ejemplo POPI requiere 15 microinstrucciones en lugar
de las 13 de la figura 4-16. Sin embargo, si el uso del traslape reduce el tiempo
bsico de microinstruccin en 15070, incluso POPl sermsrpida
que antes.
La situacin se volvera enextremo compleja si se utilizaran saltos condicionales de alternativas mltiples, formados haciendo el O lgico de NZDA con
losbits menos significativos de ADDR en vez de comprobaciones sobre los bits
individuales. Adems, en muchas mquinas, el traslape de la extraccin y la
ejecucin de las microinstrucciones se hace de tal modo que, al principio de la
ejecucin de la microinstruccin n, la eleccin de la microinstruccin n+ 1 ha de
hacerse utilizando los bits de estado de la ALU de la microinstruccin n -l. No
vamos a continuar profundizando en el tema, pero con esto basta para entender
completamente la definicin de microprogramacin dada por Rosin.

El nivel de microprogramacin

235

Tarjeta de memoria

Tarjeta de la CPU

Memoria
principal

Memoria
pequea,
rpida y cara

Memoria grande,
lenta y barata

Bus

Fig. 4-27. La memoria cach se ubica por lo general en la tarjeta de la CPU.

4.5.5. Memoria cach


Por tradicin, las CPU han sido siempre ms rpidas que las memorias y
aunque se han desarrollado las segundas, los CPU tambin lo han hecho, manteniendo as el desequilibrio. Lo que esto significa en laprctica es que despus
de que la CPU enva una solicitud a la memoria, debe permanecer ociosa durante un tiempo sustancial, aguardando a que la memoria responda. Como se
ha visto, es comn que la CPU establezca una lectura de memoria durante un
ciclo del bus y no obtenga los datos hasta dos o tres ciclos ms tarde, aun cuando no haya estados de espera.
En realidad, el problema no es de tecnologa sino econmico. Los ingenieros saben como construir memorias tan rpidas como las CPU, pero son tan
caras que equipar a una computadora con un megabyte o ms es impensable
(excepto quiz para las supercomputadoras,
en las que prcticamente no hay
lmite y el precio no representa objecin). De ah que la eleccin se reduce a tener una pequea cantidad de memoria o una gran cantidad de memoria lenta.
Lo preferible sera una gran cantidad de memoria a un bajo precio.
De sumo inters son las tcnicas conocidas para combinar estos tipos de memoria a fin de obtener, a bajo precio, la velocidad de la memoria rpida y la capacidad de la memoria lenta. A la memoria pequea y rpida se le llama cach
(del francs cacher que significa esconder) y est bajo el control del microprograma. En seguida, se describir cmo se utilizan y funcionan estas memorias.
Se puede encontrar ms informacin en (Agarwall op. cit., 1989; Farrens y
Pleszkun, 1989; Kabakibo op. cit., 1987; Kessler op. cit., 1989; Pohm y Agarwall, 1983; Przybylski op. cit., 1989; Smith, 1982; y Wang op. cit., 1989).
Desde hace aos es sabido que los programadores no accesan las memorias
en forma completamente aleatoria. Si una referencia a memoria dada es a la
direccin A, es comn que la siguiente referencia se realice en los alrededores de

A. Un ejemplo sencillo es un programa en s, con excepcin de los saltos y las

llamadas a procedimientos, las instrucciones se extraen de localidades de memoria consecutivas. Es ms, la mayora del tiempo de ejecucin del programa
se emplea en iteraciones, en las que un nmero limitado de instrucciones se ejecutan de manera repetida. En forma parecida, es comn que en un programa
manejador de matrices se efecten muchas referencias a la misma matriz, antes
de cambiar a otra actividad.
Se le llama principio de localidad a la observacin de que las referencias a
memoria realizadas en un intervalo de tiempo corto, tienden a usar slo una
fraccin de la memoria total, y representa la base para todos los sistemas de memoria cach. La idea general es que cuando un palabra es referenciada, se le
trae de la memoria grande y lenta hacia la cach, de modo que la siguiente vez
que se utilice, se pueda accesar muy rpido. En la figura 4-27 se ilustra una
distribucin comn de la CPU, la memoria principal y la cach. Si una palabra
se lee o escribe k veces en un intervalo corto, la computadora necesitar de 1 referenciaa la memoria lenta yk - 1 referencias a la memoria rpida. Entre ms
grande es k, mejor es el desempeo general.
Podemos formalizar este clculo llamado e al tiempo de acceso a la memoria cach, m al tiempo de acceso a la memoria principal y h a la proporcin
de aciertos, que es la fraccin de todas las referencias que pueden ser satisfechas
fuera de la cach. En el pequeo ejemplo del prrafo previo, h = (k - 1)/ k,
algunos autores definen tambin la proporcin de fallas como 1- h.
Con estas definiciones podemos calcular el tiempo medio de acceso de la sigui ente manera:
tiempo medio de acceso

(1- h)m

236

Organizacin de computadoras/Un

enfoque estructurado

Cap. 4

Cuando h tiende al, todas las referencias pueden ser satisfechas en la memoria
cach y el tiempo de acceso se aproxima a c. Por otra parte, cuando h tiende a
0, se necesita una referencia a memoria cada vez y el tiempo de acceso se aproxima a e+m, primero un tiempo e para verificar (sin xito) la cach y luego un
tiempo m para efectuarla referencia a memoria. En algunos sistemas, la segunda referencia puede iniciarse en paralelo con la bsqueda en la cach, de modo
que si no encuentra la palabra en sta, el ciclode memoria ya ha comenzado.
Sin embargo, esta estrategia es ms complicada pues, requiere que la memoria
pueda detenerse sobre sus pistas, cuando la palabra fue localizada en la cach.
El algoritmo bsico de bsqueda en la cach y el iniciar (o detener) la referencia
a la memoria principal dependiendo del resultado de dicha bsqueda, son aspectos que maneja el microprograma.
Se utilizan dos formas diferentes de organizacin de la cach, junto con una
tercera que es un hbrido de las dos primeras. Para los tres tipos, se asume que
la memoria sea de 2m bytes, dividida (de manera conceptual) en bloques consecutivos de b bytes, lo que da un total de 2 b bloques. Cada bloque tiene una
direccin que es un mltiplo de b. El tamao b del bloque es por lo general una
potencia de dos.
..
.
.
El primer tipo es la memoria cach asociativa, cuyo ejemplo se muestra en la
figura 4-28. Consiste en cierto nmero de renglones o lneas, cada uno de los cuales contiene un bloque y sunmero correspondiente, junto con un bit de Validez que indica si el rengln est actualmente en uso o no. El ejemplo de la figura
4-28 ilustra una cach con 1024 renglones y una memoria con 224 bytes, dividido en 222 bloques de 4 bytes. En este tipo de cach el orden de los accesos es
aleatorio.
m

No. de
bloque

Direccin

Bit de
validez

Nmero de bloque

Valor

137

600

2131

1410

160248

290380

O
1

1024
lineas

O
12

16

224

L_J

T___ -,-I
__

_J.l...._____,J j
22 Bits __

32 Bits

--+-

lb)

la)

Fig. 4-28. Un ejemplo del esquema de la memoria cach. (a) Memoria con bloques de 4 bytes. (b) Memoria cach asociativa con 1024 lineas.

El nivel de microprogramacin

237

Al inicializar la computadora, todos los bitsde Validez toman el valor 0, para indicar que ninguna entrada a la cach es vlida. Suponga que la primera instruccin hace referencia a la palabra de32 bits que se encuentra en la direccin
O. El microprograma checa todos los renglones de la cach buscando uno que
sea vlido y contenga el bloque nmero O. Al no encontrarlo, enviar una solicitud al bus para extraer de la memoria la palabra O.Si esta palabra se necesita de
nuevo, la prxima vez ser tomada de la cach, eliminando la necesidad de una
operacin del bus.
Al correr el tiempo, ms y ms renglones de la cach se marcarn como vlidos. Si el programa completo y susdatos utilizan de 1024 palabras, todo el
programa y sus datos aparecern en la cach y correr a mayor velocidad, sin
hacer ninguna referencia a la memoria a travs del bus. Si se necesita ms de
1024 palabras, en algn momento la cach estar llena y un rengln previo deber descartarse para dar lugar a uno nuevo. En la prctica, la decisin de cul
eliminar debe hacerse muy rpido (en nanosegundos). La VAX y muchas otras
mquinas seleccionan un rengln en forma aleatoria. En el captulo 6 se abordan otros algoritmos posibles bajo el ttulo de memoria virtual, en donde
ocurre el mismo problema.
El aspecto que distingue a la memoria cach asociativa de los otros tipos,
consiste en que cada rengln contiene el nmero de bloque y su entrada. Cuando se presenta una direccin de memoria, el microprograma debe calcular el nmero del bloque relevante (fcil) y luego buscar ese nmero de bloque en la
cach (difcil). A fin de evitar una bsqueda lineal, la cach asociativa dispone
de un hardware especial que puede comparar cada entrada con el nmero de
bloque dado en forma simultnea, en lugar de hacerlo en un lazo de microprograma. Este tipo de hardware hace que dicha memoria sea cara.
Para reducir el costo, se invent la memoria cach de mapeo directo. Este tipo evita la bsqueda poniendo cada bloque en un rengln cuyo nmero se
puede calcular fcilmente a partir del nmero del bloque. Por ejemplo, el nmero de rengln puede ser el nmero de bloque mdulo el nmero de renglones. Con bloques de 4 bytes (una palabra) y 1024 renglones, el nmero de
rengln que corresponde a la direccin A es igual a (A/4) mdulo 1024. En el
ejemplo de la figura 4-29 se puede observar que las palabras en las direcciones
0,4096, 8192, etc., caen en el rengln O; las palabras en las direcciones 4,4100,
8196, etc., se mapean al rengln I y as sucesivamente.
Mientras que las memorias cach de mapeo directo eliminan el problema de
buscar, crean por otro lado un nuevo problema; cmo indicar cul de las muchas
palabras que corresponden al rengln lo est ocupando. En efecto, se han creado 1024 clases de equivalencia basada en los nmeros de bloque mdulo el ta.mao de la cach. En el ejemplo, el rengln Opuede contener cualquiera de las
palabras 0,4096,8192, etc., la forma de sealar cul est en un momento dado
en dicho rengln es poner parte de la direccin en el campo etiqueta de la cach.

238

Organizacin de computadoras/Un

enfoque estructurado
Cap. 4

Bit de
validez

Rengln

o
2

1
1
1

Etiqueta

Valor

2
1
3

Entrada O

Direcciones que usan este rengln

12130
170
2142

0,4096,8192, 12288,
4,4100,8196,12292,
8,4104,8200, 12296,
12, 4108, 8204, 12300,
16,4112,8208,12304,
20,4116,8212,12308,

.
.
.
'"
...
'"

El nivel de microprogramacin

Entrada'

~~

239

Entrada n-'

Rengln

B Etiqueta Valor

O
2

3
4

~~

~
1023

."t'

::j::

5
4092,8188, 12284, ...

H::

:::

(a)

B: bit de validez
Bits

12

10

Etiqueta

Rengln

00

(b)

Fig. 4-29. (a) Una memoria cach de localizacin directa, con 1024 renglones de 4
bytes cada uno. (b) Clculo del rengln y etiqueta de una direccin de 24 bits.

Este campo contiene aquella parte de la direccin que no puede calcularse a


partir del nmero de rengln.
Para hacer este punto ms claro, considrese una instruccin en la direccin
8192 que mueve la palabra ubicada en la direccin 4100 a la 12296. El nmero
de bloque correspondiente a la direccin 8192 se calcula dividindola entre 4
(tamao del bloque del ejemplo), para obtener 2084. En seguida, el nmero de
renglnse calcula como 2048 mdulo 1024, lo que es lo mismo que usar 10 bits
de orden inferior de 2048. El nmero de rengln es O. Los 12 bits de orden superior contienen un 2, de modo que esa es la etiqueta. La figura 4-29(a) muestra a
la cach despus de haber procesado las tres direcciones.
En la figura 4-29(b) se puede ver la direccin en forma separada. Los dos
bits de orden inferior son siempre O(ya que la cach trabaja con bloques enteros
y stos son mltiplos del tamao del bloque, 4 bytes en el ejemplo). En seguida
est el nmero del rengln (10 bits) y por ltimo la etiqueta (12 bits). Es muy fcil
construir hardware que extraiga directamente el nmero de rengln y la etiqueta, de cualquier direccin de memoria.
El hecho de que muchos bloques se mapeen en un mismo rengln puede
causar problemas. Supngase que lainstruccin moviera la direccin 4100 a la
12292 en lugar de a la 12296; ambas direcciones se mapearan al rengln 1. Dependiendo de los detalles del microprograma, la direccin que se calculara despus permanecera en la cach, mientras que la otra sera purgada. Esto no es
un desastre en s pero s se degrada el desempeo de la cach si muchas palabras

Fig. 4-30. Una memoria cach asociativa agrupada con n entradas por rengln.

de las utilizadas resulta que estn en el mismo rengln. La meta, despus de todo es mejorar el rendimiento.
,La salida de esta dificultad consiste en expandir la cach de mapeo directo
con ms de un registro por rengln. La PDP-11/70, por ejemplo, tena dos registros por rengln. A la memoria cach con varios .registros por.rengln se le
denomina memoria cach asociativa agrupada y se Ilustra en la figura 4-30.
Tanto la cach asociativa como la de mapeo directo son de hecho, casos especiales de la asociativa agrupada. Si se reduce el nmero de renglones a .~, ~odos los registros de la cach estarn en el mismo rengln. y hab: q~~ distinguirlos slo por sus etiquetas ya que todos caen en la rrusma dlre~clon. ~ste
caso es slo una cach asociativa. Si n = 1 se regresa a una mernona cache de
mapeo directo con un registro por rengln.
..
Las memorias cach asociativas y de mapeo directo llenen diferentes puntos
fuertes y dbiles, la de mapeo directo es ms sencilla; fcil de con~truir y
tiene un tiempo de acceso ms rpido, ya que puede encontrar el rengln adecuado indexando en la cach con una porcin de la direccin como ndice. Por
otra parte, la cach asociativa tiene una mayor proporcin de aciertos para un
nmero dado de renglones, pues nunca se presentan conflictos. No se puede dar
el caso de que k palabras importantes no puedan ubicarse simultneamente en
la cach porque tuvieron la mala suerte de caer en el mismo rengln. ~uand~ ,se
disea cualquier computadora real, se realiza siempre una Intensa slmulaCI?n
de la cach para observar el desempeo que se est adquiriendo y a que precro.
Adems de determinar el nmero de renglones, los diseadores deben tambin seleccionar el tamao del bloque. En los ejemplos, se ha utilizado (por
simplicidad) una palabra de 32 bits, pero tambin es posible y se usan con frecuencia 2, 4, 8, o ms palabras. Una ventaja de usar un tamao grande de bloques es que hay menor gasto general para extra~r u~ bloque de ?cho palabras
que para ocho bloques de una palabra, en especial SI el bus perrnue transferen-

240

Organizacin

de computadoras/Un

enfoque estructurado

cias en bloque. La desventaja es que puede no necesitarse todas las palabras, as


que algunas extracciones pueden desperdiciarse.
Otra parte importante en el diseo de la cach es cmo manejar las escrituras. Por lo general se utilizan dos estrategias. En la primera denominada con
escritura a memoria, cuandouna palabra se escribe en lacache de inmediato se
escribe .en la memoria. Este enfoque asegura que los registros en la cach son
siempre los mismos que los correspondientes a la memoria.
La otra poltica de escrituraJlamada retrocopado, no actualiza la memoria
siempre que cambia la cach,sinoque slo 10 hace cuando un registro es eliminado de la cach para darlugar a que uno nuevo ocupe ese rengln. Cuando se
utiliza el retrocopiado, es necesario un bit en cada registro de la memoria cach
que indique si ste ha cambiado desde que se carg en sta.
Al igual que en todos los dems aspectos de diseo de la cach, existen aqu
ciertas consideraciones. Es obvio que con escritura a memoria cause ms trfico
del bus que el retrocopiado. Por otra parte, si unaCPU iniciauna transferencia
de entrada/salida de memoria a disco y la memoria est incorrecta (porque palabras quese modificaron recientemente an no han sido copiadas a memoria
desde la cach), se escribirn datos incorrectos en el disco. Este problema se
puede evitar, pero agrega complejidad al sistema.
Si el porcentaje de lecturas es ms alto que el de escrituras, puede resultar
ms simple usar la cach con escritura a memoria y aceptar el trfico del bus.
Sin embargo, si existen muchas escrituras, pudiera ser mejor utilizar el retrocopiado y hacer que el microprograma explcitamente limpie la cach por completo antes de iniciar una operacin de E/S.
Otro aspecto de diseo relacionado con las escrituras, es qu hacer si una
escritura provoca una prdida en la cach. U na estrategia consiste en extraer la
palabra en la cach y luego actualizarla, si se est usando cach con escritura a
memoria. Una estrategia diferente es escribir directamente a memoria, pero no
extraer la palabra a la cach excepto en lecturas. A este aspecto se le conoce con
el nombre de poltica de asignacin de escrituras. Ambos mtodos descritos se
encuentran en uso.
Al mejorar la tecnologa de los circuitos integrados,' ha sido posible poner
caches muy rpidas, directamente en la pastilla dela CPU. Debido a la falta de
rea en la pastilla, estas memorias son pequeas, as que sera desable tener dos
niveles de cach, una en la pastilla de la CPU y otra en la tarjeta. Si no se puede
encontrar una palabra en la cach integrada en la pastilla, se hace una solicitud
a la cach en el nivel de tarjeta. Si falla, se utiliza la memoria principal.
Considerando todo lo anterior, el uso de la memoria cach es una tcnica
importante para incrementar el rendimiento de un sistema. Casi todas las computadoras de mediana y gran escala utilizan alguna forma de esta tcnica. Se
puede encontrar informacin adicional sobre el tema en (Hill, 1988; Przybylski
op. cit., 1988; Short y Levy, 1988; y Smith, 1986, 1987).

Cap, 4

4.6. EJEMPLOS

El nivel de microprogramacin

241

DEL NIVEL DE MICROPROGRAMACION

En esta seccin se abordar el nivel de microprogramacin


en los dos
ejemplos que hemos venido utilizando: las familias lntel y Motorola. En virtud
de que las mquinas reales son demasiado complicadas, esta seccin ser muy
breve. En ambos casos se examinar uno de los miembros ms simples de la familia, a fin de evitar detalles innecesarios.

4.6.1. La microarquitectura

del Intel 8088

La microarquitectura de todas la CPU de lntel es similar porque evolucionaron de la primera, la 8086 (McKevitt y Bayliss, 1979). Virtualmente, la
8088 es la misma mquina que la 8086, excepto por un interfaz del bus de 8 bits
en lugar de 16. La trayectoria de datos, la ALU y los registros internos son idnticos. En forma parecida, el 80286 no vari tampoco en trminos de la trayectoria de datos principal, pues al igual que sus dos predecesores, es tambin internamente una mquina de 16 bits. Sin embargo, el 80286 consta de cuatro
unidades funcionales mltiples independientes, como se puede observar en la figura 3-40. El 80386 por su parte, tiene una trayectoria de datos de 32 bits y ocho
unidades funcionales, lo que en cierto modo lo hace diferente a los otros.
El anlisis se enfocar al 8088 como el miembro ms sencillo de la familia,
pues los otros son en esencia similares, aunque difieren en algunos detalles. El
8088 utiliza una mezcla de microcdigo y lgica aleatoria (circuitos especializados de hardware) para proporcionar un buen funcionamiento, mientras minimiza la extensin del microcdigo. Las microinstrucciones estn en formato
vertical, con campos multibit que especifican funciones generales, en lugar de
bits que controlen compuertas individuales en la trayectoria de datos.
El corazn del 8088 es la trayectoria de datos principal, que se ilustra en forma simplificada en la figura 4-31. La trayectoria de datos tiene dos secciones, la
parte inferior ubicada en dicha mitad de la figura y la parte superior en la mitad
ms alta. Ambas corren en forma independiente, en paralelo.
La parte inferior es comparable a la trayectoria de datos de la mayora de las
otras computadoras, incluyendo nuestros ejemplos. Contiene una ALU multifuncin, que toma dos entradas, calcula alguna funcin simple y produce una
salida. Las entradas provienen de tres registros de 16 bits, TMPA, TMPB y
TMPC, los cuales se cargan previamente al ciclo de la ALU. La salida pasa al
bus de donde se puede dirigir a cualquiera de los tres registros de entrada o a
cualquier otra parte dentro de la trayectoria. La ALU puede realizar operaciones tanto en 8 bits como en 16. Los cdigos de condicin resultantes de las
operaciones de la ALU se pueden almacenar en el registro PSW bajo el control
del microprograma .
.?

242

Organizacin

de computadoras/Un

Cap. 4 El nivel de microprogramacin

enfoque estructurado

.~

a.
:>

'"

e
'0

'
u

'"

<J)

os
ss

Bus de la ALU

ES

pc
OPERANDO
INDIRECTO

Cola de

{Oo
O,
instrucciones
1----,0'""2-+---0"'"3'---1

'----.!..---'_-=----'

Memoria o ~"j-_C~-;_-:-:X_-j
registros internos
O
principales

Cruce

(5

.:

~'"
e

'0

'

'"

<J)

I Cdigos

de condicin

Fig. 4-31. Diagrama altamente simplificado

de la trayectoria

de datos del 8088.

243

Laparte inferior de la trayectoria de datos contiene tambin los 8registros


internos de palabras para AX, BX, ex, DX, SI, DI, BP ySP. Un registro se
puede copiar de estos registros internos al bus de la ALU y de ah, a alguno de
los registros temporales, donde puede ser.usado como entrada para la ALU. La
salida de sta, puede ser enviada directamente a los registros internos sin tener
que pasar porun registro temporal (TMP).
El recuadro marcado como "cruce" entre el tablero de notas y el bus de la
ALU tiene la habilidad de intercambiar bytes mientras los copia en cualquier direccin. Se requiere de esta caracterstica para accesar los registros de 8 bits de
los registros internos. Por ejemplo, para sumar AL y BH, AX se puede copiar
en TMPA. Luego, BX se puede copiar en TMPB intercambiando los bytes en el
proceso, de modo que BH ocupa el byte de orden inferior de TMPB y BL el by
te de orden superior. Una adicin deSbits suma entonces AX y BH, cuyo resultado se puede enviar de regreso ya sea a AL o a BH, dependiendo de lainstruccin.
La parte superior de la trayectoria de datos est relacionada con la artimtica de las direcciones. Recuerdeque en el 8088, una direccin fsica de memoria
se forma agregando una direccin de 16 bits al registro de segmento apropiado,
para formar una direccin fsica de 20 bits que sale en el bus de direcciones. La
parte superior contiene su propio tablero de registros para contener los cuatro
registros de segmento, el contador de programa y dos registros adicionales.
Tambin comprende la cola de pre-extraccin, la cual se describe ms adelante.
La parte superior contiene un sumador que se utiliza para combinar porciones de 16 bits ndices de direcciones (offset) yregistros de segmento. Est
conectado por medio de alambres de modo que los 4 bits de orden inferior del
registro ndice vayan directamente al bus de direcciones, sin pasar por el sumadar, mientras que los bits 4 al J 5 se suman a los bits O al JJ el registro de segmento para formar los 16 bits de orden superior de la direccin del bus. Se
proporciona una pequea memoria ROM para las constantes comunes, por
ejemplo, para sumar 1 al contador de programa despus de haber extrado un
byte de memoria.
El 8088 tiene procesamiento de microinstrucciones en lnea. Existen cuatro
unidades para pre-extraer instrucciones, decodificarlas, realizar los clculos de
direcciones y ejecutarlas. Las tres ltimas son relativamente convencionales,
pero el pre-extractor es en cierta forma poco comn. Este, corre por completo
separado del resto del procesador. Siempre que el bus est ocioso, el preextractor enva una solicitud a memoria para leer el siguiente byte en el flujo de
instrucciones. Los bytes ledos son almacenados temporalmente en una cola en
el tablero de registros superior. Cuando se requiere de un nuevo byte de instruccin, ste se toma de la cola.
Las dimensiones de la cola son un parmetro de diseo interesante. Si son
demasiado pequeas, la CPU se demorar con frecuencia aguardando por un

244

Organizacin

de computadoras/Un

enfoque

byte de la memoria. Sin embargo hacer la cola demasiado grande no estampoco bueno: El pre-extractor no sabe que significan los bytes que extrae, y lo continahaciendo"mientras
haya espacio 'en la. cola. En particular despus de un
salto, aun cuando ste sea incondicional, contina extrayendobytes que no sern utilizados. Si la cola es muy larga, el pre-extractor desperdiciar una parte
sustancial de la capacidad del bus, llamando bytesdespus de las instrucciones
desalto.El8086tena
una colade 6 bytes, pero sta se redujoa4 en el 8088.
Adems de ancho de banda del bus, staesJanicadiferencia
entre ambos procesadores.
",
Adems de la trayectoria de datos, el 8088 tiene una seccin de control que
almacena al microprograma y maneja ala trayectoria (vase la figura4-32).
Cuando se inicia una nueva instruccin en elnivel demquina convencional, su
byte de cdigo de operacin se saca de la cola deinstrucciones y secarga en el
IR (Registro de Instrucciones).
La unidad de hardware etiquetada como decodificador de grupo en la figura
3-42, extrae informacin de IR yla disemina por todala mouina. Los registros
M y N toman campos que-se utilizan en el clculo de las direcciones de fuente y
destino de los operandos. El registro X'contiene la informacin del cdigo de
operacin que se utiliza para indicar ala' ALUqu funciones realizar.

Registro de retorno de la subrutina

De la cola

Cap.4

estructurado

de

El nivel de microprogramacin

245

El decodificador de grupo extrae tambin el bit de byte/palabra del cdigo


de operacin. Estebit controlasi las operaciones de la ALU son en 8 o 16 bits
de ancho y si las transferencias hacia o desde el tablero de registros son en 8 o 16
bits.
Las microinstrucciones tienen un ancho de 21 bits. Se requiere de 504 de
ellas y se almacenan en una memoria ROM de 504 x 21 en la seccin de
control. Cuando se extrae una instruccin de mquina, un arreglo lgico
programado (PLA) convierte el cdigo de operacin, en la direccin de inicio de
microcdigo quemaneja dicha instruccin. A diferencia de los ejemplos, en los
que las instrucciones se verifican bit a bit,no existe decodificacin de software,
sino que se realiza totalmente por hardware para ahorrar tiempo.
El microcdigo se divide en secuencias de hasta 16 microinstrucciones; cada
secuencia maneja una o ms instrucciones de mquina o proporciona un procedimiento de servicio general, como el clculo de direcciones. Existen dos clases
de microsaltos: cortos (direccin de 4 bits), para saltar dentro de la secuencia
actual y largos, para hacerlo a cualquier parte del microprograma. Existen tambin llamadas a microprocedimientos
y son similares a los saltos largos, excepto
porque depositan su direccin de retorno en el registro SR (Retorno de Su brutina). Los microprocedimientosno
pueden ser anidados, En total, las 504 palabras de memoria ROM contienen alrededor de 90 secuencias, promediando 5
o 6 palabras cada una.
" La estrategia general para interpretar muchas de las instrucciones aritm,ticas y lgicas escomo sigue. Primero se llama a un microprocedimiento para hacerlos clculos de direcciones. Este utiliza los registros M yN, los cuales ya
contienen, donde corresponde, los campos de registro de fuente y destino.
Cuando retorna el microprocedimiento de clculo de direcciones, los operandos
estn disponibles en localidades fijas y el registro X contiene el cdigo de la
ALU para esta instruccin demaquina (colocada ah por el hardware). El procedimiento principal ejecuta ahora un ciclo de la trayectoria de datos, con el cdigo ele funcin de la ALU y los operandos provenientes de los registros. El
procedimiento ni siquiera tiene que saber que-operacin est realizando. De esta forma, ADD, SUB, AND, ORy otras cuantas instrucciones pueden cornpar-

control

Operacin
Bits

Al
control de
la ALU

I FUENTEI DEST

~t

-.

ce
(a)

de la ALU

Operacin de memoria
Salto coito
Salla largo
Llamada a microprocedimiento
Contabilidad
(b)

Byte/pal,abra

Fig. 4-33. (a) Formato


Fig. 4-32: Diagrama

I ALU IRE~

TIPO

sumamente

simplificado

ele la seccin de control del 8088.

ele microinstrucciones
de la ALU cle180SS'; 'lb) Tipos ele
micromstrucciones.

246

Organizacin

de computadoras/Un

enfoque estructurado

tir el mismo microcdigo, aun cuando realicen operaciones diferentes. Desde


luego, las instrucciones PUSH, CALL y JMP son por completo diferentes y cada una requiere de su propio microcdigo.
En la figura 4-33(a) se muestra una microinstruccin tpica del 8088 que
tiene dos partes que se ejecutan en paralelo. La parte izquierda, que contiene
dos campos de 5 bits, permite a cada microinstruccin realizar un movimiento
de registro aregistro. Los 32 registros que se pueden usar como origen o fuente
y destino son los registros de 8 y 16 bits de los dos tableros y los registros temporales.

Cap. 4

'"

:J

nCi

del Motorola

b~
o:

o:
r-,

o
o

>

:J

o:

o:

LL

W
LL

i-

::l

::E

68000

Como un segundo ejemplo de microarquitectura de una mquina real se ver rpidamente el procesador Motorola 68000 (Stritter y Tredennick, 1978). El
68000 es una pastilla un poco ms grande que el 8088, con un espacio potencial
para 68000 transistores (de ah su nombre), aunque slo se usan aproximadamente 40000, con el resto del espacio ocupado por alambres y dems.
Antes, se ha mencionado el aspecto de si el 68000 es una mquina de 16 o de
32 bits. Esta cuestin se presenta de nuevo en la microarquitectura. En la figura
4-34 se muestra la trayectoria de datos principal.
Como se puede apreciar, la "trayectoria de datos" est formada de hecho
por tres trayectorias de datos separadas de 16 bits de ancho, cada una de las

o
VI

-"O

La parte derecha es una microinstruccin codificada de manera vertical, que


consiste en los campos de tipo, cdigo de la ALU, registro y cdigo de condicin. Existen seis tipos de microinstrucciones, como se puede ver en la lista de la
figura 4-33(b) y se distinguen por el campo TIPO. Todas las microinstrucciones
tienen 10 bits para mover un registro fuente a uno de destino, pero el formato
de los 11 bits menos significativos vara de un tipo a otro.
El cdigo de la ALU puede ordenar la ejecucin de una funcin especfica,
o indicar a la ALU que use el cdigo en el registro X. Los 3 bits del campo de registro proporcionan el operando, y el bit final indica si se deberan o no activar
los cdigos de condicin. Cada microinstruccin se ejecuta en un solo ciclo de
reloj, de modo que no es posible mover un valor del conjunto de registros internos a un registro TMP y luego utilizar ese registro como un operando de la
ALU en el mismo ciclo.
Los saltos largos y las llamadas a microprocedimientos
representan un
problema al requerir de ms bits de los disponibles en la microinstruccin, para
designar el destino. La solucin es usar una memoria ROM de traslacin que
mapee direcciones de 5 bits en las de todo el microprograma. Los saltos largos y
las llamadas utilizan direcciones de 5 bits para indicar el destino que desean.
Desde luego, esta estrategia significa que slo se podr saltar o llamar hacia 32
direcciones, pero esto es suficiente.
4.6.2. La microarquitectura

247

El nivel de microprogramacin

r-,

o
,
o

r-,

o:
w

e,

::l
U1

o:

o:
w

'o:

o,

e,

:l

::l

::l

U1
e,
U1

U1
i-

e,

U1

1'.

248

I
1;
j'

11
,',

Organizacin

de computadoras/Un

enfoque estructurado

cuales puede operar en forma independiente a las otras y en paralelo. La parte


izquierda maneja los 16 bits de orden superior de la aritmtica de direcciones.
La parte del medio se hace cargo de los 16 bits inferiores de las direcciones y la
parte derecha realiza operaciones en los datos.
Cada parte tiene dos buses que toman datos de los registros y los alimentan
en el sumador o en la ALU. Tambin se usan para llevar la salida de la ALU de
regreso a los registros. En la parte superior de cada uno de los buses est un interruptor, que puede abrirse o cerrarse por medio de software. Al abrir el interruptor, los buses pueden conectarse elctricamente. Si por ejemplo, los seis
.. interruptores se abren, Jos registros en la parte izquierda se pueden usar como
operandos para la ALU en la parte derecha.
Veamos ahora los registros, empezando con los de la izquierda. El recuadro
marcado como 00-07 SUPERIOR contiene los 16 bits de orden superior de
los ocho registros de datos. El recuadro bajo el anterior, contiene los 16 bits de
orden superior de los ocho registros de direcciones (AO-A7). En seguida est el
apuntador de pilas del modo supervisor, dos registros de utilera: TDAT (Datos
Temporal) y TDIR (Direccin Temporal) y la mitad superior del contador de
programa(CP). Todos estos 20 registros se pueden ubicar, por determinacin
del microprograma, en el bus izquierdo o en el derecho.
Ambos buses conducen a un sumador de 16 bits. Este no es una ALU
completa y slo puede sumar. En virtud de que se utiliza principalmente para la
aritmtica de direcciones, no se requiere que haga nada ms; construir una
ALU completa hubiera empleado mayor rea de la pastilla. Ntese que la entrada izquierda del sumador es un multiplexor (MUX), que puede seleccionar el
bus de la izquierda o la parte superior de una ROM de constantes (CONST),
una vez ms, bajo el control del microprograma.
La salida de la ALU tiene un biestable y se puede dirigir a cualquiera de los
buses, de modo que los resultados se pueden almacenar en los registros. Adems, el biestable puede conducir el bus de direccin externa para salir a la parte
superior de una direccin de memoria de 32 bits.
La parte media, es en esencia la misma, excepto que no contiene los registros internos de datos o el registro TOAT. La ROM de constantes contiene,
por supuesto, los 16 bits de orden inferior de stas y no los ele orden superior. La
salida del biestable puede conducirel bus ele direcciones ele orden inferior. Es
posible habilitar ambas partes en forma simultnea, de manera que se puede
poner en el bus de memoria a un tiempo una direccin completa ele 32 bits.
La parte ele la derecha es similar a las otras dos y contiene la porcin de orden in ferior de tos registros internos de datos y la misma porcin de TDAT.
Tambin tiene una ROM de constantes, aunque sta se encuentra en el otro bus
y contiene diferentes constantes. Sin embargo, la idea es parecida.
Aparecen en .esta parte tres nuevas caractersticas. Primero, el sumador ha
sido sustituido por una ALU completa, para realizar clculos aritmticos y fun-

Cap. 4

El nivel de microprogramacin

249

ciones booleanas en los registros D. Ya que la ALU slo tiene un ancho de 16


bits, las operaciones de 32 bits requieren de dos ciclos de la trayectoria de datos.
En segundo lugar, existe un registro extra de utilera (MUL/DIV) que se requiere para las operaciones de multiplicacin y divisin. Y tercero, no slo
enva salidas al bus (de datos), sino que, a diferencia ele las otras dos partes, es
tambin posible aceptar datos de entrada.
Vale la pena mencionar, aunque no se muestra en la figura, que existe un
conjunto de tres registros para almacenar las instrucciones recin arribadas.
Como el 68000 tiene procesamiento en lnea (pipeline) se necesita de los tres. El
primero de los registros contiene la instruccin que se est ejecutando; el segundo la instruccin que se est decodificando; yel tercero la que se est extrayendo de memoria.
Tampoco se muestra el hecho de que la interfaz contiene interruptores de
cruce en arnbas direcciones, hacia y desde el bus de datos, como en el 8088, a fin
de que los bytes superior e inferior de una palabra de 16 bits puedan intercarnbiarse mientras van o vienen del bus de datos. Se necesita de esta caracterstica
para direccionar y manipular bytes individuales.
El 68000 utiliza un almacn de control de dos niveles con un microprograma
y un nanoprograma, como se puede ver en la figura 4-35. Los detalles son en
cierto modo diferentes que el ejemplo dado en el texto, pero la meta es la misma: reducir el nmero ele bits en el almacn de control haciendo que el
microprograma determine la secuencia de nanoinstrucciones ejecutadas y haciendo, de hecho, que las nanoinstrucciones manejen las compuertas en las trayectorias de datos. El microprograma consiste de 544 palabras de 17 bits y el nanoprograma de 336 palabras de 68 bits, para un total de 32 096 bits. Esta
implantacin representa un ahorro del 13070 sobre otra de un solo nivel con 544
palabras de 68 bits, que hubiera requerido de 36 992 bits. En virtud de que en el
momento de introducir esta pastilla al mercado, representaba el estado de arte
en la materia, se consider que dicho ahorro vala la pena. Para fines de comparacin, el microprogramadel 8088 tiene 10 584 bits en 504 palabras de 21 bits.
Las memorias ROM tanto para el microprograma como para el nanoprograma estn direccionadas por nmeros de 10 bits, que permiten hasta
1024 entradas en cada uno de ellos. Como ya se ha mencionado, slo se requieren 544 para la primera y 336 en la segunda. En ambos casos, las entradas
estn distribuidas en el espacio de direccionamiento de manera muy cuidadosa.
En la nanoprogramacin
convencional, el hardware extrae primero una
microinstruccin, y sta contiene la direccin de la nanoinstruccin a utilizar.
En seguida, se extrae y ejecuta la nanoinstruccin.
Este es un proceso inherente
de dos etapas, ya que no se puede extraer la nanoinstruccin hasta que est disponible la microinstruccin.
Los diseadores del 68000 gustaron de la idea de ahorrar rea en la pastilla
utilizando la nanoprogramacin,
pero les desagrad hacer ms lenta la m-

250

Organizacin

de computadoras/Un

enfoque estructurado
Cap. 4

MicroROM
-+ 17 -BitI s+

El nivel de microprogramacin

251

NanoROM
O

68-Bits

lO

1 1

Formato 1 IL._FC_____S_IG_U_IE_N_T_E
_M_lc_R_o_,N_sT_R_u_c_c_,o_N_lyl_T_IP_o-,-l_o
yl 1

10O

TRAMPA

CONTROL DE PRE-EXTRACCION

21 O
2
Formato 2
43 O

60 O

.:

544
palabras de 17 bits
realmente utilizadas

Fig. 4-36. Formatos de instrucciones

1024

8
SIGUIENTE MICROINSTRUCCION

1 1

.CONTROL.DE PR E-EXTRACCION

80 2
906

FC

1024
336
palabras de 68 bits
realmente utilizadas

Fig. 4-35. El 68000 tiene un almacn de control de dos niveles con una microROM
y una nanoROM,

qUina,.p.o: tener que esperar a que la microinstruccin estuviera disponible antes de irucrar a ext~aerIa ~anoinstruccin. Por ello, utilizaron un truco para hacer todo e~ un mismo ciclo. En la mayora de los casos, la nanoinstruccin
corresp?ndle~te a .Ia microinstruccin que est en la direccin n, se encuentra
en la misma direccin, de modo que ambos se pueden extraer al mismo tiempo.
.En los ~~sos en que dos o ms microinstrucciones comparten una misma nano~nstrucc~on, se ha quitado un transistor del circuito decodificador de nan.omstruCClon.es p~:a mapear dos o ms direcciones en la misma palabra. Por
eJ~mplo, la direccin 0000011111 se puede mapear en la direccin 0000010111
dejando fuera un transistor, de modo que las microinstrucciones
en las direcclon~~ 31 y 23 pueda,n. utilizar. ambas la nanoinstruccin 23. Por supuesto, la
elec~lon exacta deque instruccin va donde resulta decisiva, pero los diseadores tienen ~omputadoras que les ayudan a armar el rompecabezas .
. ~n la fIgura4-36 s~ m~estran .Ios dos formatos de microinstrucciones que
utiliza el 68000. Las miCrOInstrucciones no se ejecutan en forma secuencial como en el 8088. En vez de ello, cada una nombra a su sucesora. Se requiere de es-;

del 68000.

te esquema dada la necesidad de que microinstrucciones especficas mapeen en


determinadas nanoinstrucciones,
El formato 1 se utiliza para todas las microinstrucciones con excepcin de
los saltos condicionales, los cuales usan el formato 2. Ambos tienen un bit que
se emplea para iniciar la pre-extraccin de la siguiente instruccin, adems
tienen en el otro extremo 2 bits (FC), para enviar seales a las patas de la pastilla que indican si una referencia a memoria representa el espacio de instrucciones, el espacio de datos, la recepcin de interrupciones, o ninguna de stas.
El formato 1 contiene unos cuantos bits de uso diverso y una direccin de 10
bits que indica de donde extraer la siguiente microinstruccin.
El formato 2
tiene un campo de 5 bits que selecciona una de las 32 condiciones preestablecidas para probar, tales como los cdigos de condicin y bits en el registro de instrucciones. El resultado de la condicin produce 2 bits que se combinan con los
8 bits de la microinstruccin para seleccionar uno de los cuatro sucesores posibles.
Las nanoinstrucciones de 68 bits estn codificadas en forma horizontal con
38 campos distintos, la mayora de ellos de uno o dos bits. Los campos controlan las compuertas de todos los registros y las transferencias de los registros internos a los buses, la seleccin de registros, el control de interruptores, el
establecimiento de cdigos de condicin, la funcin de la ALU, el uso de memorias ROM de constantes y multiplexores, as como la operacin de la memoria. Por lo anterior, se puede apreciar la necesidad de utilizar tantos bits.
4.7. RESUMEN
En su nivel de microprogramacin,
la CPU consta de dos componentes
principales: la ruta de datos y la seccin de control. La primera se compone
principalmente de una memoria interna y una porcin con ALU y registros de
corrimiento. Un ciclo consiste en la extraccin de algunos operandos de la me-

Cap. 4

252

Organizacin de computadoras/Un

El nivel de microprogramacin

253

enfoque estructurado

PROBLEMAS
moria interna, su paso por la ALU y registros de corrimiento, y posiblemente el
almacenamiento de los resultados en la memoria interna.
La seccin de control consta principalmente de la memoria de control, donde se guarda el microprograma. Cada microinstruccin de la memoria de
control controla las compuertas de la ruta de datos durante un microciclo. En el
ejemplo dado los microciclos se dividieron en subciclos controlados por un reloj. Durante el primer subciclo se extrajo la microinstruccin de la memoria de
control y se puso en un registro interno. En el segundo subciclo se guardaron las
entradas de la ALU en sendos registros para mantenerlas estables durante la
microinstruccin completa. En el tercer subciclo la ALU y el registro de corrimiento realizan su trabajo. Finalmente, en el cuarto subciclo se guarda el resultado de nuevo en la memoria interna por si se necesitaba en una microinstruccin posterior.
El secuenciamiento de las microinstrucciones puede calificarse de extravagante. Pocas mquinas tienen un contador de microprograma explcito en el
nivel de microprogramacin. En cambio, las microinstrucciones casi siempre
contienen la direccin de base de sus sucesoras. Normalmente se hace el O lgico
de la direccin base con unos pocos bits de estado para producir la direccin final. En muchas mquinas la direccin base de una microinstruccin se combina
con los bits de estado resultante de la anterior para producir una direccin de
salto que no tiene efecto sino hasta una microinstruccin despus.
Las microinstrucciones se pueden organizar en forma horizontal, con un bit
para cada seal de control; verticalmente, con unos cuantos campos que requieren de una decodificacin compleja; o a veces en forma combinada.
La organizacin horizontal conduce a mquinas en paralelo ms rpidas y
con palabras ms grandes. La organizacin vertical conduce a mquinas ms
lentas y memorias de control ms pequeas.
Se pueden utilizar varias tcnicas para mejorar el desempeo. Una de ellas
es la nanoprogramacin,
en donde el microprograma contiene apuntadores
(cortos) hacia nanoinstrucciones (largas) que de hecho controlan las compuertas. La nanoprogramacin reduce la cantidad de espacio dedicado a memorias
ROM en la pastilla, a costa de una ejecucin ms lenta.
Otras formas de mejorar el desempeo son: ciclos de tiempo variables, ramificacin mltiple, procesamiento en lnea y uso de memorias cach. Sin embargo, cada tcnica lleva aparejado cierto grado de mayor complejidad.
Por ltimo, se abordaron las microarquitecturas de dos de las pastillas disponibles comercialmente, el 8088 y el 68000. El 8088 tiene una trayectoria de
datos, tradicional, aumentada por una seccin superior para realizar clculos
en los registros de segmentos y utiliza microinstrucciones verticales de 21 bits.
El 68000 tiene tres trayectorias de datos independientes de 16 bits, dos para direcciones y una para datos. Utiliza un control a dos niveles con microinstrucciones de 17 bits y nanoinstrucciones de 68 bits.

1. Describa algunas de las ventajas Y desventajas


2. Traduzca la siguiente funcin del
funeton min(i, i. k: SmallInt):
var m: Smalllnt;
begin
if i <jthenm :=i else m :=
if k <m then m : = k;
min:= m
end;

de la microprogramacin.

Pascal al lenguaje ensamblador


SmallInt;

del MAC-l.

.
J;

El tipo Smalllnt est en el mismo rango en el texto.


3. Traduzca

la sentencia del Pascal.

if i < j then goto lOO;


al lenguaje ensamblador del Mac-l , Tanto i como j son enteros de 16 ~ts en
complementoa2.
Tenga cuidado: si i=32767 Y i= -10, una resta puede ar un
desbordamiento

que no sea detectado.

4 En la figura 4-!I(b) volvemos a cargar K en la linea etiquetada con E4. Las dos sen. tencias precedentes aseguran que K est en AC. Por qu volverlo a cargar?
5. Calcule el tiempo de ejecucin en microinstrucciones

de todas las instrucciones del

Mac-l que se ejecutan en el Mic-!.


6. Repita el problema anterior, aplicado al Mic-2.
7. Intente compilar la sentencia del Pascal
n := a[i]
a instrucciones

del Mie-l directamente,

salta completamente

el nivel Mac-I. Co-

mente su intento.
8. Considere una posible revisin del Mic-l en la q~e se eliminen los ~os2~a~~osL~~
.
' t COND y DIR y se obtengan mlcrotnstruCClones
e
.
secuenciarmen o
'.
.
d"
d 22 bits Tambin
microsaltos se realizan ahora con microinstruccIOnes
isnntas .~
'.
1,
I bits N y Z de la ALU para ponerlos a disposicin de un nucrosa
se memorizan os 1
'
d 1M' 1
el del que reto posterior. Compara el tamao del programa original e IC- con
quiere este nuevo diseo.

,p

254

Cap. 4 El nivel de microprogramacin


Organizacin de computadoras/Un

9. Realizan exactamente la misma funcin las dos sentencias siguientes del Mie-l?
Explquelo.
.
a : = a + a; if n Ihen goto O;
a : = ishift(a); if n Ihen goto O;

Reescrbalo en lenguaje ensamblador.


de bits existen en la siguiente microinstruccin

del Mie-l?

ac : = mbr + a; if n then goto lOO;

11..
.I

.1

12. Suponga ~ue trabaja en una empresa que est vendiendo una mquina con el Mic1 como mvell y el Mac-I como nivel 2. El fabricante de semiconductores que normalmente le proporciona las pastillas acaba de anunciar una gran liquidacin de
ALU de ~ompleme~,to a l. Su departamento de compras aprovech la oportunidad
y com~ro una carmen completo de ellas. Seguir funcionando el microprograma
de la figura 4-16 con la ALU de complemento a 1 en lugar de la original de complemento a 2? Naturalmente, en la nueva mquina los nmeros negativos se han de
representar en complemento al,
13. Si. las. lectura~ y escrituras en la memoria principal del Mic-I necesitaran tres
mlcr~lOstrucCtOnes y no dos, quedar afectado el tamao del microprograma? Si
es aSI, en cunto?
14. El ca~lP.o CON~ de la palabra del Mie-l es
gos d.lstIntos. SI se necesitara uno de estos
exarmnar un nuevo bit de estado de la ALU
los cuatro cdigos existentes recomendara

17. Hay algn lugar en el microprograma del Mic-2 en el que el rnicroprograrnador se


haya visto obligado aelegir entre velocidad y memoria de alguna forma no requerida por el microprograma del Mie-l? Si la hay, mencione un ejemplo.
18. Las microinstrucciones

del Mic-2 son mucho ms compactas que las del Mie-l (12
bits frente a 32). Puede imaginar un Mic-3 con una microinstruccin an menor?
Explquelo.

11001000000 10001100 100000000 1000

il
I

control. Suponga que tiene que modificarel Mie-l para aadir un bit a uno de los
campos COD o DIR a costa de quitar un bit a uno de los 11 campos restantes. Sugiera dnde encontrar ese bit sin afectar sustancialmente a la funcionalidad del
Mic-!.

10. Accidenta~me~te ha introducido su nico listado de un importante microprograma


e~ una maquina destructora de documentos, en lugar de ponerlo en la fotocopiadora que est alIado. Ahora tiene que reconstruir el programa fuente a partir de
un vaciado de memoria. En el curso del desensamble .se encuentra con el nmero binario
..

11. Cuntas combinaciones

255

enfoque estructurado

de 2 bits, lo que da lugar a cuatro cdicdigos para alguna otra cosa, como
indicador de desbordamiento
. cul de
sacrificar?
'G

15. Proponga un mecanismo para dotar al Mie-l de procedimientos al nivel de microp:o~ramacin. Debe encontrar alguna forma de llamada y regreso de microprocedimientos, que no podrn estar anidados (es decir, que un microprocedimiento
no
pueda llamar a otro). Puede modificar la arquitectura del Mie-l pero minimice
los cambios necesarios.
'

19. Al presidente de Nano-Micro-Mili Memorias Sociedad Annima le han impresionado tanto las ventas de sus nanomemorias que piensa aadir una pico memoria
a su lnea de productos. La nanomemoria hara referencia a la picomemoria del
mismo modo que la memoria de control hace referencia a la nanomemoria; es decir, la nanomemoria tendra picodirecciones. Usted es el vicepresidente encargado
de librar a la empresa de las ideas absurdas. Qu piensa de esta propuesta?
20. Si el microprograma de la figura 4-16 se tuviera que reescribir utilizando nanoprogramacin,
cuntos bits necesitarn la memoria de control y la nanomemoria? Compare este nmero con el tamao de la memoria de control del diseo
original.
21. Suponga que en el lugar de un procesador en lnea de 5 etapas que se trat en el texto, se tiene una lnea de n etapas, Cul sera, en este caso, la penalizacin por salto?
22. Considere una mquina en la que el 20OJo de las instrucciones son saltos condicionales y otro 10OJoson saltos iterativos. Los saltos condicionales se pueden predecir con una precisin del 60 OJoy los iterativos con una precisin del 90%. La penalizacin por suposiciones errneas es de cuatro ciclos. No hay penalizacin por los
saltos incondicionales ni para las suposiciones correctas. Cul sera la eficacia de
utilizar procesamiento en lnea (pipeline) en esta mquina?
23. En la figura 4-29(b), cul es la direccin de 1;, palabra cuyo contenido es 2131?
24. Un sistema con memoria cach tiene un 9570de proporcin de aciertos, un tiempo
de acceso de 100 nseg en los aciertos a la cach y un tiempo de acceso de800 nseg
cuando no se encuentra la instruccin en la cach. Cul es el tiempo de acceso
efectivo?
JZ

16. Los microarquitectos tienen que realizar constantemente soluciones intermedias


entre elegancia (es decir, ortogonalidad en los campos) y tamao de la memoria de

25. Se est diseando una cach para una computadora con 2 bytes de memoria. La
cach tendr 2K renglones y utilizar un bloque de 16 bytes. Calcule, tanto para 6'

256

Organizacin de computadoras/Un

enfoque estructurado

una cach asociativa como para una de localizacin directa, cuntos bytes ocupar la cach?
~
26. A primera vista, la presencia o ausencia de memoria cach no parece tener nada
que ver con la decisin de ubicar o no los registros de E/S en el espacio de direcciones de memoria. Piense un poco ms para ver si se puede encontrar algunos
problemas potenciales (si no encuentra ninguno, siga pensando),
27. El 68030 tiene instrucciones y cachs de datos integrados en la pastilla, Tambin
tiene un tipo especial de ciclo del bus (lee-modifica-escribe), para leer y modificar
una palabra de memoria en una sola e indivisible operacin, Existe alguna interaccin entre estas dos caractersticas? Si es as, explquela.

28. Escriba un procedimiento en el lenguaje ensamblador del Mac-l que multiplique


dos enteros con signo cuyo producto quepa en 16 bits.

EL NIVEL DE MAQUINA
CONVENCIONAL

29. Escriba un programa en lenguaje ensamblador del Mac-! que verifique que el
microprograma funciona correctamente. Compruebe cada instruccin con una serie de operandos conocidos para ver si se producen los resultados esperados. Es habitual que los reparadores de computadoras utilicen programas de este tipo para
localizar fallas en el material.

1I
11,

'tI
'11

30. El fabricante del Mac-l acaba de recibir un telegrama de su cliente ms importante:


"Necesito nueva instruccin que desplace AC a la izquierda n bits, donde n son
los 4 bits menos significativos de la instruccin. Lo necesito maana a las 8 de la
maana, Enve telegrama con nuevo microprograma. Urgente", Su trabajo es realizar el microcdigo para la instruccin de desplazamiento.

1I

"
,1

,1

'j

31. Escriba un simulador del Mie-l en su lenguaje ensamblador favorito, El simulador


debe leer el microprograma como una serie de lneas de entrada de 32 caracteres (O
o l) seguida de una lnea en blanco, Luego debe leer el programa Mac-I a razn de
16 bits por lnea y ejecutarlo.

En este captulo se introduce el nivel de mq~i~a .convencional ~nivel 2) YdS~


revisan muchos aspectos de su arquitectura, Hlstoncamente, ,el n1v,el2 se e
sarroll antes que los dems, y por ello an se le suele denomll1~r (m~orrectate) "el" lenguaje de mquina, Esta situacin se ha estaotecdo aSI porque
;ne:uchas mquinas el microprograma est en memo:ia de lectura ~ola,mente,
lo que significa que los usuarios (a diferencia del fabnc~nt~ de la maqu~a) no
pueden escribir programas para el nivel 1, Incluso en maqumas que pue en del
micro rogramadas por el usuario, la enorme complejidad de la,arqUlte,ctura e
nivel es suficiente para descorazonar a los programadores ma~ atrevidos, Debido a que no hay mquinas con protecciones de hardware al nivel 1, ta~poco
e~ osible permitir a una persona que depure mi,cro,prog:ama~ nuev~s ~lentras
ot~ est usando la mquina. Esta caracterstica inhibe aun mas la pracnca de la

microprogramacin
5.1. EJEMPLOS

por los usuarios,


DEL NIVEL DE MAQUINA CONVENCIONAL

Ms que intentar la defnicin rigurosa de lo que es el nivel de la m~uinta


ional (lo que de cualquier manera es casi imposible), se presentara es, e
convenci
, M ( la El proponivel viendo los ejemplos usuales, primero lntel y despues o oro :
..
sitode estudiar las familias de CPU exis.tentes es mostrar como ,las Ideas, verltol
s
"
d
1" Se compararan y veran
das aqu pueden aplicarse en el , mun orea,
strar cmo diferentes
contrastes de estas mquinas en diversas formas, para mo
diseadores toman distintas elecciones,

257

Вам также может понравиться