Você está na página 1de 36

Leccin 4

Variaciones sobre instrucciones y


direccionamientos

4.1. Propsito Los repertorios de instrucciones de Smplez y


de Smplez+i4 estn extraordinariamente simpli-
En la Leccin 2, Smplez+i4 nos sirvi para in- ficados. Estas mquinas ficticias slo son herra-
troducir un concepto fundamental del nivel de m- mientas didcticas para explicar las ideas bsicas
quina convencional: el direccionamiento de la me- de los niveles de mquina convencional y de mi-
moria y sus modos. En los ordenadores reales este croarquitectura, y carecen de muchas caractersti-
concepto se plasma de muy variadas maneras. Uno cas que se encuentran en todas las UCP, como las
de los objetivos de esta Leccin es presentar una instrucciones para llamar a y volver de subprogra-
panormica de los distintos modos de direcciona- mas, las instrucciones lgicas y de desplazamien-
miento y su utilidad. Nos extenderemos particu- to, la disponibilidad de registros de propsito ge-
larmente en los modos relativos, muy importantes neral y de otros modos de direccionamiento... To-
por su utilidad para la reubicacin de programas do esto lo veremos aqu de una manera general,
(Apartado 3.8). sin hacer referencia a ningn ordenador concreto
(pero s aludiremos a algunos en los Ejercicios).
La memoria de pila permite disear un tipo de
mquina llamada as, de pila, que se distancia lige- En resumen, si en la Leccin anterior hemos es-
ramente del modelo de von Neumann en lo que se tudiado las variantes principales en cuanto a re-
refiere al acceso a los datos, buscando mayor efi- presentacin y procesamiento de los datos, en sta
ciencia en la evaluacin de expresiones aritmti- nos proponemos presentar las que se refieren a re-
cas. Pero, sobre todo, este tipo de memoria, simu- presentacin y tipos de las instrucciones.
lada en una memoria normal (de acceso alea- Las medidas de prestaciones para comparar
torio), es la base de un esquema muy comn pa- UCP tienen mucho que ver con los repertorios de
ra resolver los problemas asociados al anidamien- instrucciones. Terminaremos con una introduccin
to de subprogramas y de interrupciones (Aparta- a este importante campo, y a las diferencias entre
do 3.6). Dedicaremos un Apartado a este asunto. CISC y RISC.

131
132 Leccin 4. Variaciones sobre instrucciones y direccionamientos

4.2. Tipos de software operativo (Leccin 17). El sistema operativo de-


fine una mquina virtual cuyo modelo funcional
En el nivel de mquina convencional hay deta- est formado por las mismas instrucciones de la
lles condicionados por los niveles superiores. An- mquina convencional (salvo algunas excepciones
tes de entrar en los tipos de instrucciones y modos que veremos en el siguiente prrafo) ms las lla-
de direccionamiento que pueden encontrarse en madas al sistema, que el programador de aplica-
las UCP es necesario anticipar algo propio del ni- ciones utiliza, por ejemplo, para realizar las opera-
vel de mquina operativa: la distincin entre soft- ciones de intercambio de datos con los perifricos
ware de sistemas y software de aplicaciones. de manera mucho ms cmoda que si utilizase la
La idea de rutina de uso general, que intro- mquina convencional.
dujimos en Smplez+i4 con las rutinas de servi- En estas condiciones, es esencial que los pro-
cio de interrupciones, se generaliza, dando lugar gramas de aplicaciones no puedan, por error o de-
a un conjunto de programas que acompaan a un liberadamente, interferir unos con otros ni, por su-
determinado hardware para facilitar su uso: ruti- puesto, afectar al buen funcionamiento del sistema
nas bsicas grabadas en ROM (Apartados 1.3, 18.9 operativo. Para asegurar esta proteccin es pre-
y 19.3), rutinas de biblioteca, manejadores de pe- ciso que la UCP incluya algn mecanismo. Uno
rifricos, etc. Todo esto es software del sistema; muy sencillo y muy extendido consiste en que la
el software de aplicaciones est formado por los UCP tiene dos modos de funcionamiento: un mo-
programas que se escriben para resolver proble- do usuario y un modo supervisor. En cada mo-
mas concretos (aplicaciones), haciendo uso del mento, la UCP est funcionando en un modo o en
software del sistema disponible. otro. El sistema operativo (o parte de l) se ejecu-
Por tanto, los programadores de aplicaciones ta en modo supervisor. Algunas instrucciones son
se encuentran con una mquina arropada, en el privilegiadas, en el sentido de que solamente pue-
sentido de que disponen no slo de un hardwa- den ejecutarse en el modo supervisor, y cualquier
re, sino tambin de un conjunto de programas de intento de ejecutarlas en el modo usuario da lugar
uso general que han sido previamente escritos para a interrupcin por violacin del modo usuario
ellos por programadores de sistemas. y, por tanto, a un paso automtico al sistema ope-
En principio, esta distincin no tendra por qu rativo (que contiene todas las rutinas de servicio
tener consecuencias en el nivel de mquina con- de interrupciones). Lo mismo ocurre con los acce-
vencional. Ahora bien, con el fin de aprovechar lo sos a ciertas zonas de la MP, que slo se permiten
mejor posible los recursos de hardware, aparece en el modo supervisor.
la idea de la multiprogramacin, que consiste en Resumiendo, el programador de sistemas traba-
que varios programas puedan compartir, de mane- ja con el modelo funcional de la mquina conven-
ra ordenada, la UCP. Por ejemplo, cuando un pro- cional; el de aplicaciones lo hace con el de la m-
grama no puede seguir ejecutndose porque est quina operativa: las llamadas al sistema y las ins-
esperando una transferencia con un perifrico, la trucciones de la mquina convencional menos las
UCP pasa a ejecutar otro (sistemas multitarea). privilegiadas1 .
Varios usuarios pueden compartir una UCP que va En la Leccin 17 volveremos sobre estos con-
alternando la ejecucin de los distintos programas, ceptos, que aqu hemos introducido porque cier-
dando la impresin a cada uno de estos usuarios tos registros, instrucciones y modos de direccio-
de disponer de una UCP propia (sistemas de namiento tienen relacin con ellos.
tiempo compartido o multiusuario). Todas estas 1
En realidad, ambos trabajan en un nivel ms alto, el de
operaciones tienen que estar controladas por soft- mquina simblica, definido por un lenguaje ensamblador, o,
ware (de sistemas), concretamente, por un sistema ms frecuentemente, por un lenguaje de alto nivel.
4.3. Formatos de instrucciones 133

4.3. Formatos de instrucciones


CO MD1 CD1 MD2 CD2 MD3 CD3 DIR. SIG.

Cada UCP tiene su propio formato de instruc- (a) cuatro


ADD d3, d2, d1
ciones. Sera imposible describirlos todos, y de- (d1)+(d2) > d3
CO MD1 CD1 MD2 CD2 MD3 CD3
masiado especfico y prolijo presentar detallada-

(obsoletos)
(b) tres
mente algunos casos particulares. Nos limitaremos ADD d2, d1
a comentar, de manera general, las principales va- CO MD1 CD1 MD2 CD2 (d1)+(d2) > d1
o: (d1)+(d2) > AC
riantes, partiendo de las ideas bsicas vistas con (c) dos
Smplez: campos CO (cdigo de operacin), CD ADD d
CO MD CD
(campo de direccin) y (en el caso de Smplez+i4) (AC)+(d) > AC

(d) una
MD (modo de direccionamiento).
En Smplez, el campo CO tiene una longitud fi- CO CR MD CD
ADD .1, d
(R1)+(d) > R1
ja de tres bits, lo que limita a ocho el nmero de (e) una y media
instrucciones. Pero las instrucciones que no hacen ADD .15, .1, .7
referencia a memoria (DEC, CLR y HALT) no nece- CO CR1 CR2 CR3
(R1)+(R7) > R15
(f) media, media y media
sitan el campo CD. Como hemos hecho al definir
el modelo funcional de Smplez+i4, se pueden uti- CO CR1 CR2
ADD .1, .7
(R1)+(R7) > R1
lizar algunos de los bits intiles de estas instruc- (g) media y media
ciones como extensin del cdigo de operacin
DEC .1
para codificar otras instrucciones que no hagan re- CO CR
(R1)1 > R1
(h) media
ferencia a memoria. En el Apartado 4.6 veremos
otro ejemplo de ampliacin de Smplez basado en CO
PUSH, POP, ADD, SUB, ...
(mquinas de pila)
esta misma idea. (i) cero
Un diseo ptimo del formato de instrucciones
Figura 4.1 Formatos de instrucciones.
es deseable si se quiere tener el mximo nmero de
instrucciones con la mnima longitud de formato. matos. Junto a cada uno se da un ejemplo de ins-
Esto conduce generalmente a tres caractersticas truccin2 . Los cuatro primeros slo tienen inters
presentes en casi todos los formatos de instruc- histrico (son tpicos de mquinas con acumula-
ciones (salvo en los de los ordenadores llamados dor), pero es interesante comentarlos.
RISC, que comentaremos en el Apartado 4.9): En las instrucciones de Smplez y Smplez+i4 el
La longitud de los distintos campos no es la campo CD es nico, porque direccionan a un solo
misma para todas las instrucciones. operando en la MP. Ahora bien, la mayora de las
No todos los campos aparecen en todas las ins- operaciones aritmticas y lgicas se realizan so-
trucciones. bre dos operandos y producen un resultado, por lo
Las instrucciones pueden ser cortas o largas, o, que resulta natural concebir instrucciones que in-
lo que es lo mismo, unas ocupan un solo byte, cluyan tres direcciones de memoria: las dos de los
otras dos, otras tres... . 2
En estos ejemplos se hace abstraccin del modo de direc-
cionamiento y de cmo ste se representa en el ensamblador
Cuatro, tres, dos, una, media,... y cero di- que se est utilizando. As, en el caso de Smplez+i4, en lugar
de d en ADD .A, d (Figura 4.1(e)) tendramos que escri-
recciones bir /d, o [/d], o /d[.X], o [/d][.X], dependien-
do de cmo se direccione al operando. Las instrucciones que
Las instrucciones pueden hacer referencia (o aparecen en la figura seran las de una UCP con varios re-
no) a direcciones de memoria y/o a registros de gistros aritmticos: .1, .15... representan a los registros
la UCP. La Figura 4.1 muestra varios tipos de for- R1, R15...
134 Leccin 4. Variaciones sobre instrucciones y direccionamientos

operandos y una tercera para almacenar el resulta- Hay instrucciones que no operan sobre memoria
do (Figura 4.1(b)). Algunas mquinas incluan un ni sobre registros (HALT, EI, DI, etc.) cuyo forma-
cuarto campo de direccin, que indicaba explcita- to es el de la Figura 4.1(i). Este formato es tam-
mente la direccin donde se encuentra la siguiente bin el de ciertas instrucciones que s hacen re-
instruccin a ejecutar (Figura 4.1(a)). De este mo- ferencia a memoria, pero con una direccin im-
do, la instruccin de bifurcacin sera innecesaria, plcita que no aparece en la instruccin. Esto es
ya que todas las instrucciones incluiran explcita- posible con un tipo de memoria en la que el acce-
mente una bifurcacin. La justificacin estaba re- so se realiza de un modo diferente al que venimos
lacionada con la tecnologa de la MP, y puede ver- considerando hasta ahora. Se trata de la memoria
se en el Apartado 4.123 . Con el formato de dos de pila (o, simplemente, pila), que puede estar
direcciones (Figura 4.1(c)) el resultado poda de- realizada en hardware o simulada en una memoria
positarse en el lugar que inicialmente ocupaba uno de acceso aleatorio. Por una parte, las mquinas
de los operandos o bien en el acumulador. El for- de pila (que incluyen una pila cableada, es de-
mato de una direccin (Figura 4.1(d)) es el que ya cir realizada en hardware) ofrecen una alternativa
conocemos a travs de Smplez: slo se direcciona interesante para la ejecucin de expresiones arit-
un operando en la MP, y las operaciones se reali- mticas. Por otra, la simulacin de una pila en la
zan entre este operando y el contenido del acumu- MP es el mecanismo ms utilizado para resolver
lador, quedando el resultado en el acumulador. el problema de preservacin de la direccin de
Ya sabemos (Apartado 3.2) que actualmente las retorno en las llamadas a subprogramas (Aparta-
UCP ponen a disposicin del programador un con- do 1.10) y en las interrupciones (Apartados 2.8)
junto de registros aritmticos o de propsito ge- (aunque no es el nico: presentaremos otros en el
neral (RPG). Si una instruccin hace referencia a Apartado 4.7). Dado el inters de este concepto, le
uno (o varios) de esos registros, su formato debe prestaremos una atencin especial, dedicndole el
incluir un campo (o varios) para identificarlo. Si Apartado 4.6. Pero veamos antes los distintos mo-
la UCP tiene, por ejemplo, diecisis RPG, ser ne- dos de direccionamiento para acceder a operandos
cesario un campo de cuatro bits, que puede con- almacenados en una MP de acceso aleatorio.
siderarse como una direccin de registro. Re-
sultan as instrucciones de 1 + 21 direcciones
(Figura 4.1(e); 12 slo es una manera de decir 4.4. Modos de direccionamiento
que la direccin de registro tiene menos bits que la
Consideremos instrucciones con el formato de
de memoria)4 . Normalmente, en este caso existen
la Figura 4.1(e). Como hemos visto con Sm-
tambin instrucciones aritmticas y lgicas que no
plez+i4, la direccin efectiva de MP a la que se re-
direccionan a la MP, sino a dos registros, dejando
fiere una instruccin es funcin del contenido del
el resultado en otro (o bien en uno de los dos); son
campo CD y de lo que indique el campo MD. Si
instrucciones de 12 + 12 + 12 direcciones, Figu-
el resultado de esta funcin se expresa con n bits,
ra 4.1(f) (o de 12 + 12 direcciones, Figura 4.1(g)).
el espacio de direccionamiento (nmero de pala-
Las instrucciones de 12 direccin, Figura 4.1(h),
bras de la MP que pueden direccionarse) es 2n .
operan sobre un nico registro.
El introducir modos de direccionamiento res-
3
Sin embargo, este direccionamiento explcito de la si-
ponde a varios objetivos. He aqu algunos:
guiente instruccin se ha conservado, por otras razones, en Facilitar las tareas de programacin.
el nivel de micromquina, como veremos en la Leccin 12. Conseguir programas con menos instrucciones
4
Las instrucciones ADD, LD y ST de Smplez+i4 son de
1+ 12 direcciones, aunque el campo de direccin de registro
y por tanto ms eficientes.
slo tiene un bit (el bit 8, vase la Figura 2.2). Reducir la longitud de las instrucciones.
4.4. Modos de direccionamiento 135

n1 0
Ampliar el espacio de direccionamiento.
Implementar mecanismos de proteccin.
Veremos los distintos modos de direcciona- MD

miento que suelen encontrarse, generalizando los CO i=1 operando

ya estudiados en Smplez+i4: directo, indirecto,


indexado e inmediato. A los modos relativos les
(a) Instruccin en una palabra
dedicaremos otro Apartado
7 0

Direccionamiento absoluto o directo


MD
Esperamos que, a estas alturas, el lector no ne- i=1
CO
cesite de ninguna aclaracin sobre lo que es el di-
operando
reccionamiento directo: DE = (CD).

Direccionamiento inmediato (b) instruccin de dos bytes, con


operando en el segundo
7 0
En el modo inmediato, el operando est incluido
en la misma instruccin. En Smplez+i4 lo hemos
aplicado solamente para las instrucciones de car- MD
gar y restar, pero, en general, resulta muy til CO i=1

para todas las operaciones aritmticas y lgicas.


Normalmente, un determinado bit del campo MD operando
del formato de instrucciones (i en la Figura 4.2)
indica si el direccionamiento es inmediato o no. En
las mquinas con longitud de palabra suficiente-
mente larga este operando est incluido dentro de
(c) instruccin de cinco bytes, con
la misma palabra de la instruccin (Figura 4.2(a)), operando de treinta y dos bits

por lo que estas instrucciones no hacen en reali- Figura 4.2 Direccionamiento inmediato.
dad referencia a memoria (no es preciso un acceso
a la MP para ir a buscar el operando). Pero si a
la MP se accede por bytes, el operando est en el y hemos visto, con Smplez+i4, su principal utili-
byte siguiente al del cdigo de operacin, por lo dad: la implementacin de punteros.
que podemos decir que la direccin efectiva es El puntero puede ocupar varios bytes para po-
la de ese byte. Algunas UCP admiten dos moda- der direccionar toda la memoria. La Figura 4.3(b)
lidades: una, a veces llamada modo literal, para (en la pgina siguiente) muestra un caso en el que
operandos inmediatos pequeos (de un byte, Figu- el campo de direccin de la instruccin tiene un
ra 4.2(b)) y otra para operandos que requieren dos solo byte, pero el puntero tiene dos, de modo que
o ms bytes (Figura 4.2(c)). el direccionamiento indirecto permite direccionar
216 = 26 210 = 64 KB (por supuesto, el operan-
do podra ocupar tambin dos o ms bytes).
Direccionamiento indirecto
Frecuentemente, el puntero no est en la MP, si-
Tambin sabemos (Apartado 2.4) que con el di- no en un registro de la UCP; lo veremos ensegui-
reccionamiento indirecto ya no es DE = (CD), sino da, al hablar de los direccionamientos basados en
DE = (MP[CD]), o, abreviadamente, DE = ((CD)), registros de propsito general (RPG).
136 Leccin 4. Variaciones sobre instrucciones y direccionamientos

n1 0

registro de ndice
MD
MD
CO I=1 CD
CO J=1 CD
+

DE
puntero operando

operando (a) direccionamiento indexado

MD registro de ndice
I=1
(a) instruccin, puntero y operando CO J=1 CD
en una palabra cada uno
+
7 0 DE
operando

MD
CO I=1 puntero

(b) direccionamiento postindexado

puntero
operando
registro de ndice

MD DE
operando
CO I=1 CD
J=1 +

(b) instruccin de dos bytes, puntero


puntero de dos y
operando de uno
Figura 4.3 Direccionamiento indirecto. (c) direccionamiento preindexado

Figura 4.4. Direccionamientos indexado, indirecto


Direccionamiento indexado
indexado e indexadoindirecto.
Hemos visto, con Smplez+i4, que la posibili-
dad de disponer de un registro de ndice X y de ha- les. Naturalmente, tiene que haber un convenio de
cer uso de l para el clculo de la direccin efecti- codificacin para que en MD se exprese que el di-
va en tiempo de ejecucin (DE = (CD)+(X), Figu- reccionamiento es indexado, y cul es el registro
ra 4.4(a)) tiene varias ventajas. Por una parte, faci- de ndice que utiliza la instruccin.
lita la programacin de operaciones que implican Cuando el direccionamiento indexado se com-
el recorrido, dentro de un bucle, de palabras con- bina con el indirecto, caben dos posibilidades:
secutivas de la MP. Por otra, conduce a programas
postindexacin (o indirectoindexado):
ms cortos y ms eficientes que los que recurren
DE = ((CD))+(X), Figura 4.4(b)
a la modificacin de instrucciones o al direcciona-
miento indirecto para implementar ese recorrido. preindexacin (o indexadoindirecto):
Normalmente se dispone de varios registros de DE = ((CD)+(X)), Figura 4.4(c)
ndice, o de RPG que pueden utilizarse como ta- La primera, que es la adoptada en Smplez+i4,
4.5. Direccionamientos relativos 137

es la ms frecuente5 , pero en algunas UCP existen Modos autoincremento y autodecremento


las dos posibilidades.
Como antes, tanto la instruccin como el pun- Algunas UCP disponen tambin de direcciona-
tero y el operando pueden ocupar varias palabras miento indirecto (a travs de la MP o, lo que es
(o varios bytes). En la Figura 4.4, para simplificar, ms frecuente, a travs de un registro) combina-
hemos puesto cada uno en una sola lnea de la do con incremento o decremento del puntero. Hay
memoria. cuatro posibilidades, segn que el puntero se in-
cremente o se decremente, y segn que tal cosa se
haga antes o despus del clculo de la direccin
Direccionamientos basados en registros de
efectiva:
propsito general
Autopreincremento: se incrementa el puntero
Cualquier RPG se puede utilizar como regis- y luego se calcula la direccin efectiva.
tro aritmtico (o sea, equivalente al acumulador Autopostincremento: se calcula la direccin
de una UCP del tipo de Smplez). Esto es un di- efectiva y luego se incrementa el puntero.
reccionamiento directo a registro, puesto que el
Autopredecremento y autopostdecremento:
operando se encuentra directamente en ese regis-
lo mismo que las anteriores, pero decrementan-
tro. Pero tambin suele darse la posibilidad de di-
do el puntero.
reccionamiento indirecto a travs de un registro,
Es frecuente encontrar solamente dos de esas
es decir, que la direccin en la MP del operando
posibilidades, generalmente autopostincremento
sea DE = (Ri). Esta posibilidad es muy interesan-
y autopredecremento, simplificndose sus deno-
te, puesto que permite tener los punteros en los
minaciones: autoincremento y autodecremento.
RPG, y, por tanto, ahorrar accesos a la MP.
Adems, cuando las instrucciones pueden operar
Si se combina el direccionamiento indirecto a
sobre datos de distinta longitud, el nmero en que
registro con el indexado no tiene sentido hablar de
se incrementa o decrementa el puntero es el n-
preindexacin. La direccin efectiva es:
mero de palabras de la MP que ocupa el dato.
DE = (Ri) + (Rx) As, con la instruccin ADD.B (sumar byte), en
Quin hace de registro de ndice, Ri o Rx? Se- caso de utilizar el modo autoincremento el pun-
gn la frmula, son indistinguibles. La diferencia tero se incrementa en una unidad (de modo que
est en la funcin que se le atribuya en el progra- queda apuntando al siguiente byte), mientras que
ma a cada registro. El que haga de puntero tendr con ADD.W (sumar palabra de dos bytes) y con
normalmente un contenido fijo, la direccin de co- ADD.L (sumar palabra larga, de cuatro bytes) se
mienzo de la zona de datos, y el que haga de ndice incrementa en dos y cuatro unidades, respectiva-
cambiar su contenido durante la ejecucin para mente. De este modo, situada la instruccin dentro
obtener un elemento u otro de la zona. de un bucle, permite ir recorriendo los datos que
5
Lo cual parece razonable: lo normal es tener que recorrer se suponen almacenados uno detrs de otro en una
un vector o zona de la MP a la que apunta un puntero, no zona de la MP. Tendremos ocasin de ver ejemplos
tener que recorrer vectores de punteros. Pero la preinde-
de su utilidad en las Lecciones siguientes.
xacin tambin es til. Por ejemplo, en Algortmez veremos
(Apartado 6.13) que en las llamadas a subprogramas la trans-
misin de un argumento puede hacerse pasando su direccin
por la pila. La recuperacin de este argumento desde el sub- 4.5. Direccionamientos relativos
programa implica utilizar el puntero de pila (registro cuya
funcin explicaremos en el Apartado siguiente) como si fue-
ra un registro de ndice (para obtener la direccin que se ha
En general, en el direccionamiento relativo
guardado en la pila) y luego aplicar indireccin para buscar la UCP interpreta que el contenido del cam-
el argumento. po CD representa un desplazamiento sobre una
138 Leccin 4. Variaciones sobre instrucciones y direccionamientos

direccin de referencia, DR, de manera que


DE = (CD) + DR. DR puede determinarse en
tiempo de carga o en tiempo de ejecucin, y estos MD CD
CO (prog) 0
modos resultan especialmente tiles para reubicar +

programas (Apartado 3.8). Veamos los cuatro mo-


dos ms utilizados para determinar DR. DE
instrucc. u operando
CP

Relativo a programa
En el modo relativo a programa DR = (CP). Es (a) (CD)>0

decir, la direccin efectiva se obtiene sumando el


contenido del contador de programa, CP, con el
desplazamiento indicado en la instruccin. Ahora
bien, qu contiene exactamente CP en el momen- instrucc. u operando
to de la ejecucin de la instruccin? En el Aparta- DE

do 3.2 hemos dicho que en Smplez y Smplez+i4


MD CD
apunta siempre a la instruccin siguiente a ejecu-
CO (prog) 1
tar. Y as es en muchas UCP (por ejemplo, en Al- +

gortmez, Leccin 6), que actualizan CP antes de


hacer el clculo de la direccin efectiva; en tal ca-
so, DR es la direccin de la instruccin siguiente CP
(o de su primer byte). Pero no as en otras (es- (b) (CD)<0
pecialmente, en los RISC, como Regstrez, Lec-
cin 8), en las que DR es la direccin de la ins- Figura 4.5 Direccionamiento relativo a programa.
truccin actual. En cualquier caso, como veremos
al estudiar esas mquinas, el programador (salvo
que trabaje en el nivel de mquina convencional miento pueda ser positivo o negativo: el bit ms
puro, es decir, en binario) no tiene que ocuparse significativo del campo CD se interpreta como bit
de ese detalle (s tiene que hacerlo el diseador del de signo (Figura 4.5).
ensamblador o del compilador).
Este modo se utiliza principalmente para las ins- Lo ms interesante del direccionamiento relati-
trucciones de bifurcacin (y en algunas UCP s- vo a programa es que permite conseguir progra-
lo existe para estas instrucciones). Normalmente, mas independientes de su ubicacin. En efecto,
una instruccin de bifurcacin apunta a otra ins- lo que se especifica en la instruccin (en el campo
truccin relativamente cercana a ella, de modo que CD) es un desplazamiento relativo a la ubicacin
basta con un campo CD pequeo. Sin embargo, de esa instruccin; si la distancia (en direcciones
los datos pueden estar en otra zona completamen- de memoria) entre esa instruccin y la instruccin
te distinta de la MP, y en ese caso sera necesario o dato direccionado se conserva, se pueden colo-
otro modo de direccionamiento (indirecto, relati- car en cualquier parte de la MP. Y si esto es cierto
vo a base, etc.) para acceder a ellos. Para que sea para todas las instrucciones del programa, el pro-
posible bifurcar a instrucciones que estn antes o ceso de ajustar direcciones relativas para ligarlas a
despus de la actual (y para poder acceder, en su las reales que mencionbamos en el Apartado 3.8)
caso, a datos almacenados ms arriba o ms abajo es innecesario. Volveremos sobre esto, concretn-
que la instruccin), es necesario que el desplaza- dolo con un ejemplo, en el Apartado 6.6.
4.5. Direccionamientos relativos 139
0000
PGINA 0
Relativo a pgina
Este modo era un recurso de algunos pequeos
ordenadores para poder direccionar fcilmente to- 00FF
0100
da la MP con un campo CD pequeo. La MP se
considera estructurada como una sucesin de zo-
nas o pginas. Un bit del campo MD indica si la
instruccin hace referencia a la pgina 0 o a la p-
FE00
gina en la que se encuentra la instruccin. Actual- PGINA FE A0
mente no es muy utilizado, pero esa idea original
de paginar la MP ha resultado muy fructfera, FEA0 byte direccionado

como veremos en los Apartados 7.10 y 15.8. Me-


rece la pena, por esto, que nos detengamos en un MD instruccin: 7 0
CO P=1 A0
pequeo ejemplo ilustrativo.
(CD)=A0 15 8
Imaginemos un ordenador con una MP de CP: FE
64 KB (216 = 65.536 bytes). Las direcciones tie- 15 0
nen diecisis bits, es decir, estn comprendidas en- FEFF DE: FEA0
FF00
tre 0 y D65.535 = HFFFF. Pero las instrucciones PGINA FF

tienen como mximo dos bytes. Si entre los cam-


pos CO y MD se ocupan ocho bits, para CD s-
lo quedan ocho, por lo que pueden direccionarse FFFF

directamente 28 =256B. Evidentemente, con direc- Figura 4.6. Ejemplo de direccionamiento relativo a p-
cionamiento indirecto podemos ampliar la capaci- gina (direcciones en hexadecimal).
dad de direccionamiento utilizando punteros, co-
mo veamos con Smplez+i4, pero esto multiplica
DE = (CD), si P = 0
el nmero de accesos a memoria para ejecutar las
DE = (CD) + direccin del primer byte de la p-
instrucciones (y ms en este ejemplo, en el que ca-
gina de la instruccin, si P=1
da puntero tendra que ocupar dos bytes). La solu- Las instrucciones tendrn normalmente P=1
cin del direccionamiento paginado en este ejem- (slo se direccionar a travs de punteros en la p-
plo puede consistir en: gina 0 cuando sea preciso acceder a un dato que
Considerar la MP estructurada en 256 pginas est en otra pgina, o bifurcar a otra pgina).
de 256 bytes cada una. Dada una direccin com- El direccionamiento relativo a pgina viene a
pleta (de diecisis bits), los ocho bits menos signi- ser equivalente a un direccionamiento relativo a
ficativos representan una direccin relativa al co- programa en el que slo intervienen los bits ms
mienzo de la pgina, y los ocho ms significativos significativos del registro CP (que son los mismos
pueden considerarse como el nmero de pgina para todas las palabras situadas en una pgina). La
(comprendido entre 0 y D255 = HFF). Por ejem- direccin efectiva (en el caso de P=1) se calcula
plo, la direccin D65.184 = HFEA0 correspon- mediante la yuxtaposicin de los bits de CD (ocho
de a un byte situado en la pgina HFE = D254, en el ejemplo) y los bits de mayor peso (ocho en
y su direccin relativa dentro de ella es igual a el ejemplo) del registro CP.
HA0 = D160 (Figura 4.6). Si un programa cabe en una pgina, puede escri-
Sealar mediante un bit del campo MD, P, si birse como si fuese a ejecutarse en la pgina 0. En
la direccin es relativa a la pgina 0 o a la pgina el momento de la carga, se le puede ubicar en cual-
donde se encuentra la instruccin, de modo que: quier otra pgina y funcionar exactamente igual.
140 Leccin 4. Variaciones sobre instrucciones y direccionamientos

Por tanto, el programa es tambin independiente


de su ubicacin, en el sentido de que se puede car-
gar en cualquier pgina (pero no se puede despla-
zar arbitrariamente). Si no cabe en una pgina, o si (RB)=B RB

se decide poner los datos en una pgina diferente,


tendremos que hacer referencias a travs de pun-
teros colocados en la pgina 0; en este caso, si los MD
datos o las instrucciones a los que se hace referen- CO (base) CD +

cia a travs de esos punteros se cambian de pgina,


es preciso cambiar los valores de los punteros. DE
B+(CD) instrucc. u operando

Relativo a base
Para este modo la UCP necesita uno o varios re-
Figura 4.7 Direccionamiento relativo a base.
gistros especiales, los llamados registros de base.
Si se utiliza RB como registro de base, la direccin
efectiva es DE = (CD)+(RB). En principio, parece cionamientos son relativos a base, el programa es
que no hubiera diferencia con el direccionamien- independiente de su ubicacin. A veces se utiliza
to indexado (de hecho, la misma Figura 4.4(a) es este modo slo para el acceso a la zona de datos, y
aplicable aqu, cambiando registro de ndice por el relativo a programa para el acceso a la zona del
registro de base), y as es en cuanto al clculo de cdigo (es decir para las bifurcaciones y acceso a
la direccin efectiva. La diferencia est en el uso punteros).
que se hace de cada uno de estos modos. En algunas UCP, la suma de la direccin de ba-
El direccionamiento indexado es muy til, co- se se hace automticamente en todos los accesos a
mo hemos visto, para recorrer zonas de la MP. La la MP (sin que la instruccin lo especifique en el
funcin de un registro de ndice es contener un n- campo MD), y las instrucciones para acceder al re-
dice que va cambiando durante la ejecucin del gistro o registros de base son privilegiadas; en tal
programa. Por el contrario, en el direccionamiento caso, el programa no puede poner nada en RB en
relativo a base, el contenido del registro de base se tiempo de ejecucin. La idea es que sea el sistema
fija en el momento de la carga, o bien al comenzar operativo el que, en tiempo de carga, fije el valor
la ejecucin, y normalmente no cambia durante el de la direccin de base (o las direcciones de base:
resto de la ejecucin. La funcin de este registro es una para la zona del cdigo y otra para la de da-
contener la direccin de referencia, constante du- tos). El programa, en tal caso, no es independien-
rante la ejecucin, que se suma a CD en tiempo de te de su ubicacin: Considerado aisladamente, no
ejecucin. puede colocarse en cualquier sitio. Pero s es reu-
El programa puede escribirse como si fuera a bicable: el sistema operativo introduce, antes de
cargarse a partir de la direccin 0, aun a sabien- que el programa empiece a ejecutarse, la direccin
das de que se va a cargar a partir de una direccin de base en el registro de base (o las direcciones
de referencia, o direccin de base B, desconocida de base en los registros de base). En este tipo de
en tiempo de traduccin. Basta con incluir las ins- UCP es frecuente que cada registro de base vaya
trucciones necesarias al principio para introducir acompaado de un registro de lmite (de acceso
en un registro de base, en tiempo de ejecucin, la tambin privilegiado), y que se genere una inte-
direccin B a partir de la cual se ha cargado real- rrupcin si el programa intenta acceder a una di-
mente (Figura 4.7). Entonces, si todos los direc- reccin que excede la contenida en el registro de
4.5. Direccionamientos relativos 141

segmento, las pginas podran solaparse. Aun-


que, en efecto, esto puede suceder, lo que normal-
RB1 mente ocurre es que los segmentos no tienen la
zona asignada
al cdigo longitud mxima (64 KB en el ejemplo), sino la
RL1 que necesite el cdigo o los datos.
En la Figura 4.9 se representa un programa car-
RB2 gado a partir de la direccin HB0000 que accede
zona asignada
a los datos a una zona de datos cargada a partir de la direccin
RL2
15 0

CD

15 0
Figura 4.8 Registros de base y de lmite.
+ registro de segmento 0 0 0 0

lmite. De este modo, el sistema operativo puede


19 0
asignar zonas de la MP a cada programa y asegu-
rar que unos no invaden las zonas de los otros. En = direccin efectiva

la Figura 4.8 se representa una situacin en la que


hay un programa cargado, con una zona asignada 00000

para el programa en s (o cdigo) y otra para los


RSD
datos que maneja. 20000 2000
segmento
de datos

desplaz.
Relativo a segmento 20000
2AB72 dato direccionado +
Este modo viene a ser una combinacin del re-
lativo a base y el relativo a pgina. La UCP tiene 2FFFF
(mx.)
en este caso registros de segmento. Cuando se ha-
ce un acceso a la MP, el registro de segmento que
se utilice acta como un registro de base, pero su B0000
contenido se desplaza n bits a la izquierda antes de CO=LD MD
sumarlo a la direccin. I1 RSC
(CD)=AB72 B000
segmento
de cdigo

Supongamos que la longitud del campo CD es


diecisis bits (con los que se pueden direccionar CO=BR MD
desplaz.

64 KB) y que tenemos un registro de segmento de I2


(CD)=FE1C
B0000
+
diecisis bits. Si el contenido del registro se des-
plaza cuatro bits antes de obtener la DE (vase la
parte superior de la Figura 4.9), esta DE tiene vein- BFE1C instrucc. direccionada
te bits, es decir, se puede direccionar una MP de
1 MB. Podemos decir que cada uno de estos re- BFFFF
(mx.)
gistros define un segmento en la MP de longitud
mxima 64 KB, que es como una pgina flotan-
te, en el sentido de que su direccin de comienzo
FFFFF
puede elegirse cargando inicialmente un valor en
el registro de segmento. Si hay varios registros de Figura 4.9. Ejemplo de obtencin de la direccin efec-
tiva con un registro de segmento.
142 Leccin 4. Variaciones sobre instrucciones y direccionamientos

H20000. RSD es el registro de segmento de datos (Acceso a un elemento de un vector cuya direccin
y RSC el de segmento de cdigo (se han elegido de comienzo relativa est en un puntero de la zona
las direcciones de segmentos, H2000 y HB000, del cdigo).
con los doce bits menos significativos a cero pa-
ra facilitar la interpretacin del ejemplo, pero po-
Reubicacin dinmica
dran tener cualquier valor de diecisis bits). Las
instrucciones mostradas tienen tres bytes, con un En el Apartado 3.8 explicbamos la necesidad
CD de diecisis bits. Hay una (I1) que accede a de ligar las direcciones relativas generadas por el
un dato de direccin relativa HAB72, que se con- traductor a las reales de la MP para que el pro-
vierte en la direccin absoluta H2AB72, y otra grama pueda reubicarse, y decamos que estas li-
(I2) que transfiere control a una instruccin de di- gaduras pueden realizarse mediante software (con
reccin relativa HFE1C, cuya direccin absoluta un cargador reubicador) o mediante hardware (con
es HBFE1C. registros de base o de segmento). Aqu hemos vis-
Las UCPs que tienen este modo de direcciona- to que el direccionamiento relativo a programa (y,
miento han evolucionado: los contenidos de los con ciertas limitaciones, tambin el relativo a p-
registros de segmento ya no se combinan direc- gina) permite construir programas independientes
tamente con el del contador de programa para ob- de su ubicacin, en los que no es necesario preocu-
tener una direccin efectiva, sino que apuntan a parse del ajuste de direcciones, porque las ligadu-
estructuras de datos en la MP que contienen infor- ras se hacen automticamente en tiempo de ejecu-
maciones adicionales sobre el segmento. cin: cuando se suma el desplazamiento (direccin
relativa) al contenido del contador de programa se
Combinacin con otros modos est obteniendo la direccin real de la MP. Pero la
restriccin de utilizar siempre el modo relativo a
El desplazamiento debe ante todo sumarse a la programa puede ser demasiado fuerte.
direccin de referencia para obtener un resultado Hemos visto asimismo que con los direcciona-
sobre el que luego puede aplicarse indireccin y/o mientos relativos a base y a segmento la ligadura
indexacin. se hace en tiempo de ejecucin, que es cuando se
Por ejemplo, en una instruccin que use direc- suma a la direccin relativa la direccin de base
cionamientos relativo a programa y postindexado (constante de reubicacin). La direccin de base
la direccin efectiva es6 : se determina en tiempo de carga, cuando el siste-
DE = ((CD) + (CP)) + (RI) ma operativo pone los valores iniciales en los re-
gistros.
Si hay un registro de base (o de segmento) para En algunos sistemas operativos de multiprogra-
el cdigo, RBC, y otro para datos, RBD, la direc- macin no slo es necesario que el programa se
cin efectiva en un caso de aplicar tambin direc- pueda reubicar antes de empezar a ejecutarse, sino
cionamiento postindexado resulta: que se pueda reubicar en cualquier momento de su
ejecucin. Se habla en este caso de reubicacin
DE = ((CD) + (RBC)) + (RBD) + (RI) dinmica. Esto es as porque, como decamos en
6
En algunas UCP no pueden coexistir los direccionamien- el Apartado 4.2, el sistema operativo puede sus-
tos indexado y relativo a programa, porque ste se deriva de pender la ejecucin del programa y activar a otro.
aqul mediante el truco de utilizar el contador de programa Si la MP es escasa, el programa suspendido puede
como si fuese un registro de ndice (con convenio de prein-
dexacin). Tendremos ocasin de verlo en el ejemplo que se
llevarse temporalmente a disco para dejar espacio.
desarrolla a continuacin y, con mucho ms detalle, en la Lec- Y cuando vaya a reactivarlo, el sistema operativo
cin siguiente. tendr que cargarlo de nuevo en la MP. Pero en ese
4.5. Direccionamientos relativos 143

intervalo de tiempo pueden haberse suspendido y El ensamblador reubicante traduce las instruccio-
activado otros programas, y es muy probable que nes correspondientes a las direcciones [0], [52],
la configuracin de programas en la MP haya cam- [53] y [54] poniendo en CD los valores 52, 1, 51 y
biado y que la recarga de nuestro programa tenga 51, respectivamente, y pone esas direcciones en el
que hacerse en una zona distinta de la que ocupaba diccionario de reubicacin. Si el sistema operativo
inicialmente. decide cargar el programa a partir de la direccin
Pues bien, la reubicacin dinmica no puede 2.000, el cargador reubicador suma la constante
conseguirse slo con software7 ; si el programa no de reubicacin 2.000 a estos valores. Al ejecutarse
es independiente de su ubicacin, son precisos re- el programa, las instrucciones [52] y [53] (que en
gistros de base o de segmento. En efecto, un car- realidad estn en las direcciones 2.052 y 2.053) in-
gador reubicador puede ajustar las referencias re- troducen en PUNT (direccin 2.051) el valor 2.001.
lativas que hacen las instrucciones siempre que se Supongamos que justo despus de la instruccin
carga o recarga el programa, y cada vez har las [53] se suspende la ejecucin, el sistema operati-
ligaduras que corresponda. El problema aparece vo lleva el cdigo binario, tal como est, al disco,
cuando la referencia se hace de manera indirecta y ms tarde decide volver a cargarlo pero a partir
a travs de un puntero. Normalmente, el programa de la direccin 3.000. Un primer problema (que no
pone un valor inicial en ese puntero, que es una sera difcil de resolver) es que, adems del cdigo,
direccin absoluta obtenida por el cargador reubi- habra que conservar y salvar el diccionario. Su-
cador a partir de la direccin relativa del programa puesto que se hace as, el cargador vuelve a ajustar
fuente. Una vez puesta esa direccin, si el progra- los campos de direccin iniciales de las instruccio-
ma y/o los datos se recargan en otro sitio, el car- nes, sumndoles ahora 3.000. Pero no tiene modo
gador puede volver a ajustar las direcciones relati- de saber que tambin debera ajustar el valor del
vas, pero no tiene modo de saber que tambin debe puntero. Por tanto, en [51] (ahora [3051]) perma-
ajustar el valor del puntero. necera el valor 2.001, lo que, obviamente, condu-
Un ejemplo puede ser til para comprender el cira a resultados errneos (debera ser 3.001).
prrafo anterior. Un programa fuente para un or- Sin embargo, con registros de base o de segmen-
denador como Smplez+i4 (con instrucciones de to inicializados por el sistema operativo en el mo-
longitud igual a una palabra, y una direccin por mento de la carga (y utilizados para todos los acce-
palabra) podra empezar as: sos a la MP) no hay problema. En este ejemplo, si
[0] BR /PRINC tuvisemos un registro de base, RB, el cargador no
[1] ZONA RES 20 tendra que ajustar nada (es decir, sera un carga-
[51] PUNT RES 1
dor absoluto). Al cargar el programa por primera
[52] PRINC LD .A, #ZONA
; esta instruccin carga en el vez, el sistema operativo introduce el valor 2.000
; AC la direccin de "ZONA" en RB, y este valor se suma al desplazamiento en
[53] ST .A, /PUNT todos los accesos a memoria. Como la instruccin
[54] BUCLE LD .A, [/PUNT] [52] tiene direccionamiento inmediato, no accede
; accede a "ZONA" a travs a memoria, y su resultado es poner el valor 1
; del puntero en el registro AC. La [53] s accede a memoria, e
... introduce ese valor en la direccin 2.051 (PUNT).
7
Para ser precisos, deberamos decir que no puede conse- Observe que el puntero ahora es relativo. Cuando
guirse razonablemente. Como se puede desprender de las se ejecute [54], en cada uno de los accesos a me-
Lecciones anteriores, casi todo puede hacerse mediante soft-
ware. Pero en este caso seran necesarios ensambladores y
moria se sumar el valor que tenga RB (3.000, si
cargadores con ms inteligencia y ms conocimiento so- ha ocurrido lo que decamos ms arriba), y se ac-
bre la ejecucin de los programas. ceder a la direccin adecuada.
144 Leccin 4. Variaciones sobre instrucciones y direccionamientos

En resumen, la reubicacin dinmica implica es poner a cero los ocho bits menos significativos
que las ligaduras de direcciones relativas a direc- de R0.
ciones reales se hagan en tiempo de ejecucin, y Las instrucciones tienen longitud variable. Su
lo ms adecuado para esto es el direccionamiento primer byte est dedicado exclusivamente al c-
relativo a base o a segmento. digo de operacin, y le pueden seguir uno o dos
especificadores de operando. Cada uno de stos
Un ejemplo algo revesado tiene al menos un byte en el que los tres prime-
ros bits indican el modo de direccionamiento y los
Veamos un caso con instrucciones de longitud cinco siguientes se interpretan como una direccin
variable y diversos modos de direccionamiento, de uno de los treinta y dos registros. Si el operando
entre ellos el relativo a programa. Hemos de hacer est en la MP, siguen cuatro bytes, que correspon-
una advertencia previa: este ejemplo resultar dif- den al campo de direccin, CD.
cil de asimilar en una primera lectura; el lector de-
bera volver a l despus de estudiar los modos de CO CO

direccionamiento de Algortmez (Apartado 6.6). MD R MD1 R1


Se trata de una UCP que tiene treinta y dos re- (a) 1/2 direccin MD2 R2
gistros, R0 a R31, de treinta y dos bits. Estos re-
CD0
gistros pueden contener un dato o una direccin.
CD1
R31 es especial: es el contador de programa. Pero CO

R31 puede manipularse desde un programa como MD1 R1 CD2

otro cualquiera de los treinta y dos registros, es MD2 R2 CD3


decir, el contador de programa no es transparente
(b) 1/2+1/2 direcciones (c) 1+1/2 direcciones
al programador. Veremos que esta caracterstica
funcional hace posible dotar a la mquina de cier- Figura 4.10. Formatos de instrucciones para el ejemplo
tos modos de direccionamiento que en principio del texto.
no estn definidos en el modelo funcional.
Las direcciones (y el bus A) tienen treinta y dos En la Figura 4.10(a) podemos ver el formato
bits, por lo que la capacidad mxima de la MP (es de instrucciones de 12 direccin (por ejemplo,
decir, el espacio de direccionamiento) es 232 bytes instruccin para poner a cero un registro), en la
(4 GB). Estas direcciones pueden estar en uno de 4.10(b) el de 21 + 12 direcciones (por ejemplo,
los registros o en cuatro bytes de la MP. sumar los contenidos de R1 y R2 dejando el re-
Los cdigos de operacin de las instrucciones sultado en R2, o sumar los contenidos de las pala-
especifican, en su caso, si el operando o los ope- bras de memoria cuyas direcciones se encuentran
randos son de un byte, media palabra (dos bytes), o en R1 y R2, dejando el resultado en la segunda),
una palabra (cuatro bytes). En cualquier caso, todo y en la 4.10(c) el de 1 + 12 direcciones, que ha-
operando almacenado en la MP se direcciona por ce referencia a un operando sobre registro (o di-
su byte menos significativo (convenio extremista reccionado por un registro) y otro sobre memoria,
menor, Figura 3.10(a)). Hay distintos cdigos de direccionado por el campo CD y con R2 como re-
operacin para instrucciones que operan sobre by- gistro de ndice (por ejemplo, cargar el registro R1
te, sobre media palabra o sobre palabra. En ensam- con el contenido de la direccin que resulte para el
blador se distinguen por un sufijo. Por ejemplo, operando 2, actuando R2 como registro de ndice
CLR .0 es poner a cero el registro R0 CLR.H para obtener esta direccin). Con los tres bits del
.0 es poner a cero los diecisis bits menos sig- campo MD se codifican los modos de direcciona-
nificativos (media palabra) de R0, y CLR.B .0 miento que muestra la Tabla 4.1.
4.5. Direccionamientos relativos 145

MD Modo Direccin efectiva


000 Registro DE = Ri (operando = (Ri))
001 Registro indirecto DE = (Ri) (operando en la MP apuntado por Ri)
010 Autoincremento DE = (Ri), y (Ri)+k Ri
011 Autoincremento indirecto DE = ((Ri)), y (Ri)+4 Ri
100 Autodecremento (Ri)k Ri, y DE = (Ri)
101 Autodecremento indirecto (Ri)4 Ri, y DE = ((Ri))
110 Indexado DE = (CD) + (Ri)
111 Indexado indirecto DE = ((Ri) + (CD)) (preindexacin)
Tabla 4.1 Modos de direccionamiento para el ejemplo del texto.

Ensamblador Binario Acciones de la UCP


CLR .0 00000000 Pone a cero R0. Incrementa (CP) en 2.
00000000
CLR.B .0 00000001 Pone a cero los 8 bits menos significativos de R0. Incrementa
00000000 (CP) en 2.
CLR [.0] 00000000 Pone a cero 4 bytes de la MP a partir del apuntado por R0. In-
00100000 crementa (CP) en 2.
CLR.H [.0++] 00000010 Pone a cero 2 bytes de la MP a partir del apuntado por R0. In-
01000000 crementa (R0) en 2. Incrementa (CP) en 2.
MOVE.B .0, .1 00000011 Traslada los 8 bits menos significativos de R0 al lugar corres-
00000000 pondiente de R1. Incrementa (CP) en 3.
00000001
MOVE [--.6],/1024[.7] 00000111 Mueve una palabra (cuatro bytes) de una direccin de memoria,
10100110 d1, a otra, d2=1024+(R7). Primero, decrementa (R6); el resul-
11000111 tado se interpreta como una direccin, di, cuyo contenido es la
00000000 direccin del operando a mover. Es decir, d1 es el contenido de
00000100 cuatro bytes de la MP, y la direccin del primero es di. Incre-
00000000 menta (CP) en 7.
00000000
ADD.B .7, #255 00000100 Al interpretar ADD.B y los modos de direccionamiento
00000111 (000,010), la UC suma 3 a (CP) que queda as apuntando al
01011111 operando (255). Suma (bytes) (R7) con ((R31))=255, dejando el
11111111 resultado en R7 (afecta slo al byte inferior). Al ser MD2=010
(autoincremento), incrementa posteriormente (R31) = (CP), en
1 (porque es ADD.B), que queda as apuntando a la instruccin
siguiente.
Tabla 4.2 Ejemplos de instrucciones para el ejemplo del texto.

La Tabla 4.2 contiene algunos ejemplos de ins- la codificacin de los modos de direccionamien-
trucciones con su posible codificacin en ensam- to, siguiendo la Tabla 4.1) y los resultados de su
blador, su representacin binaria (hemos elegido ejecucin.
arbitrariamente los cdigos de operacin binarios; Observe que los modos autoincremento y au-
el lector no debe prestar atencin al contenido bi- todecremento son direccionamientos indirectos a
nario del primer byte de cada ejemplo, pero s a travs de uno de los registros; cuando se combi-
146 Leccin 4. Variaciones sobre instrucciones y direccionamientos

nan con el direccionamiento indirecto (que vie- la siguiente instruccin. Esto es precisamente lo
ne indicado por el tercero de los bits de MD), se que ilustra la ltima de las instrucciones de la Ta-
tienen, realmente, dos niveles de indireccin. En bla 4.2. Invitamos al lector a pensar sobre casos
los modos autoincremento y autodecremento, el similares para comprobar los siguientes hechos:
incremento o decremento del registro (k en la Utilizando Ri = R31 = CP con modo autoincre-
Tabla 4.1) es de una, dos o cuatro unidades, de- mento indirecto resulta el modo directo (o absolu-
pendiendo de que la correspondiente instruccin to), puesto que DE = ((Ri)) = ((CP)).
se refiera a byte, a palabra o a palabra larga; de es-
Con Ri = R31 = CP y modo indexado se obtie-
te modo, Ri, que acta como puntero, queda apun-
ne el modo de direccionamiento relativo a progra-
tando al siguiente dato en memoria. Sin embargo,
ma, ya que DE = (CD) + (Ri) = (CD) + (CP).
en los modos autoincremento indirecto y autode-
cremento indirecto, el incremento o decremento es Finalmente, con Ri = R31 = CP y modo inde-
siempre de cuatro unidades; en efecto, (Ri) en este xado indirecto sale el modo relativo a programa in-
caso no es la direccin efectiva, sino la direccin directo, ya que DE = ((CD)+(Ri)) = ((CD)+(CP)).
de la MP en la que se encuentra la direccin efec- En cualquier caso, el lenguaje ensamblador
tiva, que ocupar siempre cuatro bytes. oculta al programador estos detalles. As, en la
Como las instrucciones tienen longitud varia- ltima instruccin de la Tabla 4.2, se escribe
ble, cuando ejecuta una, la UC deber incrementar ADD.B .7,#255, y el ensamblador se encarga
adecuadamente el contenido del contador de pro- de hacer la traduccin adecuada.
grama para que quede siempre apuntando a la si-
guiente instruccin.
4.6. Pilas y subprogramas
El contador de programa como un registro Mquinas de pila
de direccionamiento
Una pila es un tipo de memoria en la que slo
Si el lector se ha tomado la molestia de analizar se pueden leer los datos en el orden inverso en que
las instrucciones de la Tabla 4.2, es seguro que ha- han sido escritos, siguiendo el principio de el lti-
br tenido alguna dificultad para interpretar la lti- mo en entrar es el primero en salir. Las dos ope-
ma. Lo que ocurre es que el contador de programa, raciones son push (introducir o apilar: escribir un
R31, se est utilizando tambin como registro de elemento en la pila) y pop (extraer o desempilar:
direccionamiento. leer un elemento de la pila). Pero, a diferencia de
Cuando el contador de programa puede mane- lo que ocurre con una memoria de acceso aleato-
jarse como otro registro cualquiera es posible ha- rio, no se puede introducir ni extraer en cualquier
cer uso de modos de direccionamiento que en prin- sitio; adems, la operacin pop (lectura) modifi-
cipio parecen no estar previstos. En este caso, co- ca el estado de la memoria. nicamente se tiene
mo CP = R31, a partir de los modos definidos ini- acceso a la cima de la pila, de modo que un nue-
cialmente resultan estos otros: vo elemento se introduce siempre sobre el ltimo
El modo inmediato se obtiene utilizando introducido, y la operacin de extraccin se reali-
Ri = R31 = CP con modo autoincremento, puesto za siempre sobre el elemento que est en la cima,
que DE = (Ri) = (CP). En efecto, al interpretar el como indica la Figura 4.11. Por tanto, en una me-
cdigo de operacin y los modos de direcciona- moria de pila no hay direcciones. La primera po-
miento de los dos operandos, la UCP incremen- sicin es el fondo de la pila. Si la pila est vaca,
tar CP adecuadamente para que quede apuntan- no hay cima; si slo contiene un elemento, la cima
do a lo que, normalmente, sera el primer byte de coincide con el fondo.
4.6. Pilas y subprogramas 147
PUSH
As, ADD suma el elemento que est en la cima
con el que est inmediatamente debajo de l, borra
cima
p
n+1
ambos de la pila e introduce el resultado sobre la
cima
p
n
p
n
cima.
p
n1
p
n1 Por ejemplo, supongamos que los contenidos de
los registros R0 a R3 son A, B, C y D. Para hacer
X = A B + C/D y dejar el resultado, X, en R4
escribiramos estas instrucciones:
p p
0 0 PUSH .0
PILA INICIAL PILA DESPUES
DE INTRODUCIR
PUSH .1
MUL
PUSH .2
POP
PUSH .3
DIV
cima
p
ADD
n
cima POP .4
p p
n1 n1
En la Figura 4.12 puede seguirse, paso a paso, el
estado de la pila (suponindola inicialmente vaca)
a medida que se ejecutan las instrucciones.
p p
0 0
PILA INICIAL PILA DESPUES
DE EXTRAER
estados de la pila tras la
instrucciones ejecucin de las instrucciones
Figura 4.11 Operaciones en una memoria de pila.
PUSH .0 A

Las mquinas de pila tienen una memoria de


B
pila para los operandos, pero tambin tienen una PUSH .1
A
memoria de acceso aleatorio, para los programas.
Las instrucciones bsicas de acceso a la pila son MUL
AxB
las correspondientes a las operaciones anterior-
mente descritas, es decir, PUSH y POP. Una C
PUSH .2
mquina de pila pura, como la que se estudia AxB
en las Lecciones 23 y 24, no tiene registros visi-
bles para el programador, y los operandos que se D
PUSH .3 C
meten o se sacan de la pila proceden de o van a
AxB
variables locales que estn en otra memoria. Pa-
ra facilitar el ejemplo siguiente vamos a conside-
C/D
rar una mquina de pila que s tiene registros, y DIV
AxB
en la que PUSH y POP tienen el formato de 12 di-
ADD
reccin, ya que deben especificar el registro cu- AxB+C/D
yo contenido se introduce o al que va a parar lo POP .4
que se extrae. Las instrucciones aritmticas y lgi-
cas operan sobre elementos de la pila, y, por tanto, Figura 4.12. Ejemplo de ejecucin de operaciones arit-
no especifican direccin (son de 0 direcciones). mticas en una pila.
148 Leccin 4. Variaciones sobre instrucciones y direccionamientos

Las operaciones para evaluar expresiones arit- sa es un mtodo muy eficiente para evaluar opera-
mticas en una pila se corresponden, formalmen- ciones aritmticas. De aqu que lo utilicen algunas
te, con lo que se llama notacin polaca inver- calculadoras y algunas UCP.
sa. La notacin aritmtica habitual es la infija: el En las Lecciones 23 y 24 estudiaremos los mo-
operador se escribe entre los dos operandos, y, delos de una mquina de pila, la Mquina Virtual
as, para expresar la suma de A y B escribimos Java.
A + B. En la notacin polaca el operador es
prefijo (+AB), y en la notacin polaca inversa,
sufijo (AB+). En ambas notaciones puede pres-
cindirse del uso de parntesis, que en la notacin Simulacin de una pila en una memoria de
habitual son necesarios para eliminar ambigeda- acceso aleatorio
des. Por ejemplo, las expresiones (A + B) C
y A + (B C) se escriben en notacin polaca
Una zona de la MP puede estar dedicada a ha-
inversa AB + C y ABC + respectiva-
cer las funciones de una pila. Conviene disponer
mente.
de un registro adicional en la UCP, que se llama
El procedimiento para interpretar una expresin
puntero de pila, PP, y que contiene en todo mo-
aritmtica en notacin polaca inversa es:
mento la direccin de la MP que corresponde a
explorar la cadena de izquierda a derecha;
la cima de la pila (Figura 4.13). Con esta disposi-
al encontrar un operador, realizar la operacin cin, la UC puede interpretar instrucciones como
con los dos operandos inmediatamente anterio- ADD, SUB, etc. (de cero direcciones), ejecutando las
res; operaciones como hemos explicado ms arriba y
eliminar esos dos operandos y el operador e in- actualizando automticamente el contenido de PP,
troducir en su lugar el resultado; de modo que el programador slo ve PP para
seguir explorando la cadena hasta que no que- poner en l un valor inicial (es decir, definir dnde
den operandos. est el fondo de la pila simulada).
Aplicando este procedimiento al ejemplo de
X = A B + C/D, que, escrito en notacin
polaca inversa es X = AB CD/+, resulta:
1. apilar A: PUSH .0;
2. apilar B: PUSH .1; MP

3. ahora aparece : MUL (elimina A y B y apila


A B));
4. apilar C: PUSH .2;
cima
5. apilar D: PUSH .3; PP
ZONA
6. aparece /: DIV (elimina C y D y apila C/D); RESERVADA
7. aparece +: ADD (elimina C/D y A B y +1 1 PARA
(pop) (push) LA PILA
apila la suma);
8. fin de la cadena: POP .4 (extrae el resultado y fondo

lo lleva a R4)
Es decir, la misma secuencia de instrucciones es-
crita anteriormente. Figura 4.13. Simulacin de una pila en una memoria
El uso de una pila y de notacin polaca inver- de acceso aleatorio.
4.6. Pilas y subprogramas 149

Uso de una pila para los subprogramas Ejemplo: una pila para Smplez
Recuerde, del Apartado 1.10, el problema de la Partiendo del modelo de Smplez descrito en la
preservacin de la direccin de retorno en las lla- Leccin 1, veamos una posible modificacin para
madas a subprogramas. Con una pila (real o simu- que incluya las instrucciones CALL y RET.
lada en MP) su solucin es muy fcil: basta con El repertorio de instrucciones que no hacen re-
que la UC reconozca dos instrucciones especia- ferencia a memoria se puede ampliar fcilmente
les de bifurcacin, a las que llamaremos CALL con el sencillo recurso de que para el cdigo de
y RET. CALL debe ir (como BR) acompaada de operacin binario 111 los bits siguientes formen
una direccin. Al interpretar la instruccin CALL, un campo de extensin, y as procedimos en Sm-
la UC guarda la direccin de retorno (el conteni- plez+i4 para aadir las instrucciones EI y DI. Pero
do del contador de programa en ese momento, que esto no nos sirve para CALL, porque es una instruc-
es la direccin de la instruccin siguiente a CALL) cin con referencia a memoria (necesita el campo
en la pila, haciendo un push. La ejecucin de RET CD). Nuestra modificacin va a afectar tambin al
consiste simplemente en hacer un pop para extraer cdigo 101 (CLR en Smplez), que ahora se lo
de la pila la direccin de retorno y ponerla en el vamos a asignar a CALL, mientras que CLR va a
contador de programa. Repare el lector en tres de- pasar al conjunto codificado por 111. Podemos,
talles de esta solucin: por ejemplo, convenir que para el cdigo 111
Las operaciones push y pop mencionadas son los tres bits siguientes (bits 8,7,6) codifican una
transparentes al programador. Es decir, ste slo instruccin sin referencia a memoria: HALT (000),
tiene que saber que existe una instruccin, CALL, CLR (001), RET (010), ADD, PUSH, POP, etc. (Las
que le permite bifurcar a una direccin donde co- tres ltimas no las vamos a usar aqu).
mienza un subprograma, y que la ltima instruc- Adems de aadir estas nuevas instrucciones, es
cin de este subprograma debe ser RET. preciso incluir un registro puntero de pila, PP, en
El anidamiento de subprogramas (que un la UCP. Como va a contener direcciones, ser un
subprograma llame a otro, e incluso a l mismo registro de nueve bits. La pila crece hacia arriba
de manera recursiva) no plantea ningn problema: en la MP, es decir, al ejecutarse CALL (lo que im-
las direcciones de retorno se irn apilando y recu- plica una operacin push) se decrementa el conte-
perando en el orden adecuado. (El nico problema nido de PP, y al ejecutarse RET (que implica pop)
prctico radica en que la pila no es infinita). se decrementa. El fondo de la pila est en la di-
reccin 507 (de la 508 a la 511 estn reservadas
La pila puede utilizarse tambin para transmi-
para los puertos de entrada y salida). Inicialmen-
tir argumentos entre el programa y el subprogra-
te, la pila debe estar vaca, es decir, el contenido
ma: la secuencia de llamada incluira instruccio-
de PP debe ser 508. En efecto, cuando se ejecuta
nes PUSH para introducirlos en la pila antes de
la primera CALL se decrementa primero el conte-
CALL, y el subprograma recuperara esos argu-
nido de PP (que queda as apuntando al fondo de
mentos con POP8 . Esto facilita la programacin
la pila) y luego se guarda el contenido de CP en la
de procedimientos recursivos y reinvocables,
direccin resultante. Supondremos que este valor
como veremos en el Apartado 6.13.
inicial, (PP) = 508, se pone automticamente9 .
8
O bien, mediante LD con direccionamiento relativo al
9
puntero de pila. Por otra parte, en lugar de pasar los valo- De igual modo que hemos supuesto que, inicialmente,
res de los argumentos pueden pasarse sus direcciones. As (CP) = 0 para empezar a ejecutar desde la instruccin alma-
es como se implementan los pasos de parmetros por valor cenada en 0. Para ser realistas, deberamos incluir alguna ins-
y por referencia tpicos de las llamadas a procedimientos en truccin que permitiese cargar un valor en PP, pero esto es
los lenguajes de alto nivel (Apartados 6.13 y 22.7). irrelevante para lo que pretendemos ilustrar aqu.
150 Leccin 4. Variaciones sobre instrucciones y direccionamientos

Dir MP. Contenido Contenido Comentarios


(dec.) (octal) (nemnico)
------- --------- ----------- ----------------------------
.....
[10] 1063 LD /51 ; transmisin
[11] 0312 ST /202 ; del sustraendo
[12] 1062 LD /50 ; transmisin del minuendo
[13] 5310 CALL /200 ; bifurca al subprograma
[14] 0064 ST /52 ; guarda el resultado
....
[20] 1145 LD /101 ; transmisin
[21] 0312 ST /202 ; del sustraendo
[22] 1144 LD /100 ; transmisin del minuendo
[23] 5310 CALL /200 ; bifurca al subprograma
[24] 0146 ST /102 ; guarda el resultado
.....
[200] 3313 BR /203 ; aqu empieza el subprograma
[201] 0000 ; resultados parciales
[202] 0000 ; sustraendo
[203] 6000 DEC ; decremento del
[204] 0311 ST /201 ; resultado parcial
[205] 1312 LD /202 ; decremento del
[206] 6000 DEC ; sustraendo
[207] 4323 BZ /211 ; si ha llegado a cero, fin
[208] 0312 ST /202 ; si no, se actualiza,
[209] 1311 LD /201 ; se carga resultado parcial
[210] 3313 BR /203 ; y se vuelve al bucle
[211] 1311 LD /201 ; resultado al acumulador
[212] 7200 RET ; instruccin de retorno

Programa 4.1 Dos llamadas a un subprograma de resta para Smplez modificado (con pila).

Con estos elementos, las llamadas a subprogra- Uso de una pila para las interrupciones
mas se simplifican, como puede verse en el Pro-
grama 4.1, que sustituye a los Programas 1.5 y 1.6 Del mismo modo que en las llamadas a subpro-
de Smplez. El programador no tiene ya que preo- gramas, la pila puede utilizarse para salvar la di-
cuparse de construir instrucciones de retorno, ni reccin de retorno en las interrupciones. Esto faci-
siquiera de saber cules son las direcciones de re- lita el anidamiento, pues un esquema como el de
torno: cuando se ejecuta una instruccin CALL Smplez+i4, en el que (CP) se guarda en una di-
la unidad de control apila automticamente la di- reccin fija (la 63), exigira que en toda rutina de
reccin de retorno, y cuando se ejecuta una RET servicio se volviese a guardar en una posicin lo-
saca la direccin de la cabeza de la pila. Y llamar cal el contenido de 63 antes de permitir que otras
desde un subprograma a otro no planteara ningn causas pudiesen interrumpir.
problema: las direcciones de retorno se iran api- En las UCP que tienen modo supervisor y modo
lando y recuperando ordenadamente (el nico pro- usuario suele haber dos pilas, una para cada modo:
blema es que la pila crezca hasta invadir zonas la pila de usuario y la pila del sistema. En este ca-
del programa). so, las direcciones de retorno en las interrupciones
se apilan en la pila del sistema.
4.7. Repertorios de instrucciones 151

4.7. Repertorios de instrucciones cuando el destino (normalmente, un registro) tie-


ne mayor longitud que el operando fuente. Su-
Para comentar algunas caractersticas generales pongamos, por ejemplo, que el contenido del byte
sobre los distintos tipos de instrucciones, las clasi- de direccin d de la MP es HF0 = B11110000.
ficaremos en cinco grupos: Si lo interpretamos como un nmero representa-
de movimientos de datos do en coma fija y complemento a 2 (con ocho
bits), se trata del nmero H10 =16. La ins-
aritmticas, lgicas y de comparacin
truccin LDU.B .R1,d se limita a llevar HF0
de desplazamientos a los ocho bits menos significativos del registro
de transferencia de control R1: si R1 tiene treinta y dos bits, los veinticua-
de gobierno tro ms significativos pueden quedar como es-
Utilizaremos los cdigos nemnicos ya intro- taban o ponerse a cero (dependiendo del mode-
ducidos en Lecciones anteriores y explicaremos lo funcional de la mquina). Pero la instruccin
los nuevos conforme vayan apareciendo. Entre los LDS.B .R1,d extiende el bit de signo, resultan-
lenguajes ensambladores hay mucha variedad, pe- do en R1 HFFFFFFF0, que interpretado como n-
ro algunos nemnicos son prcticamente univer- mero en coma fija y complemento a 2 (con treinta
sales (LD, ST, MOVE...). y dos bits) es H10 =16.
PUSH y POP son tambin, evidentemente,
instrucciones de este grupo, que operan sobre la
Instrucciones de movimientos de datos
cima de la pila y un registro (o una palabra de la
Aqu incluimos tanto movimientos internos co- MP).
mo comunicaciones con los dispositivos perifri- Otras instrucciones de movimiento son las que
cos. Nos referimos con movimientos internos transfieren informaciones (datos, estado u rde-
a las operaciones que consisten en trasladar datos nes) entre la UCP y los perifricos. Hay dos mane-
entre la memoria y los registros accesibles al pro- ras de proceder que, en el nivel de mquina con-
gramador. vencional, se reflejan en dos maneras de progra-
LD y ST se utilizan, segn el modo de di- mar el envo a y la recepcin de informaciones de
reccionamiento, para mover datos de la MP a un un perifrico:
registro, de un registro a la MP, de la MP a la MP, o
Utilizar las mismas instrucciones de movimien-
entre dos registros. Pero en muchas UCP se susti-
to disponibles para intercambiar datos entre un
tuyen por, o se complementan con, una instruccin
registro y la MP (LD, ST o MOVE) sabiendo que
genrica, MOVE, que especifica la fuente y el
ciertas direcciones no corresponden a la MP, si-
destino, donde fuente y destino pueden ser
no a perifricos. Esta ha sido la solucin adop-
posiciones de la MP o registros. En UCP que per-
tada en Smplez y la que tambin seguiremos
miten operandos de varias longitudes, hay cdigos
en Regstrez (Leccin 8).
de operacin distintos para mover bytes, palabras
o palabras largas (LD.B: cargar byte, ST.W: Tener instrucciones especficas para la entrada
almacenar palabra, MOVE.L: mover palabra lar- y la salida de datos. Los cdigos nemnicos son
ga, etc.). IN y OUT, respectivamente. Estas instruc-
Es frecuente disponer de dos versiones de la ins- ciones debern contener un campo de direccin
truccin LD: LDU (cargar sin signo)10 y LDS de perifrico (o, ms correctamente, de direc-
(cargar con signo). Esta duplicidad tiene sentido cin de puerto, puesto que cada perifrico ne-
cesita como mnimo dos direcciones: una para
10
U es por unsigned (sin signo). la transferencia de los datos y otro para reci-
152 Leccin 4. Variaciones sobre instrucciones y direccionamientos

bir rdenes o comunicar su estado). En la Lec- y SUBC, y, en su caso, ADDC.B, etc.


cin 6 presentaremos la mquina llamada Al- Tambin pueden considerarse aritmticas
gortmez, que tiene estas instrucciones. INC y DEC, aunque no siempre existen (sus
En el segundo caso hay dos espacios de di- funciones pueden realizarlas ADD y SUB con
reccionamiento independientes: uno para la MP y direccionamiento inmediato).
otro para los perifricos. En el primero, el espacio Algunas UCP tienen instrucciones aritmticas
de direccionamiento es compartido. con operandos etiquetados (Apartado 3.3). Por
ejemplo, la instruccin TADD11 suma dos ope-
Instrucciones aritmticas, lgicas y de com- randos en coma fija, y si la etiqueta de uno de
paracin ellos (o las dos) no corresponde al tipo coma fi-
ja se pone a uno un indicador.
Las instrucciones aritmticas bsicas son Las instrucciones lgicas bsicas, NOT,
ADD, SUB, MUL y DIV (y ADD.B, ADD.W, AND, OR y XOR son las correspondientes
etc.). Los algoritmos para operaciones en coma a las operaciones explicadas en el Apartado 4.4.
flotante (Apndice A) pueden estar realizados Tambin podemos incluir entre ellas a CLR (po-
en hardware (generalmente, con un procesador ner a 0 todos los bits) y a SET (poner a 1 todos
de coma flotante que conceptualmente no es los bits). Como siempre, si puede haber operandos
ms que una extensin de la UAL). En tal caso de distinta longitud se utilizan distintos cdigos bi-
existirn instrucciones como ADD.F (sumar narios, y en los cdigos nemnicos aadiremos los
en coma flotante, SUB.F, etc., y, en su caso, sufijos .B, .W, .L: CLR.B, etc.
ADD.FS (sumar con formato de coma flotante Finalmente, la instruccin CMP12 compara
corto), ADD.FL (largo), etc. Igualmente, pueden dos operandos y pone a cero o a uno el indicador
existir instrucciones para operar en decimal: N segn que el primero sea mayor (o igual) o me-
ADD.D, etc. nor que el segundo, y el Z segn que sean iguales
Es frecuente disponer de dos versiones: sin sig- o distintos. Otras instrucciones, como BN (bifur-
no (ADDU, etc.) y con signo (ADDS, etc.). La car si negativo), pueden hacer uso del resultado.
nica diferencia en su ejecucin es que la UCP tra- Es como una instruccin SUB que no deja el re-
ta de distinto modo al desbordamiento. Por ejem- sultado de la resta en ningn sitio.
plo, suponiendo (para no escribir nmeros binarios
largos) que los operandos fuesen de cuatro bits, la Instrucciones de desplazamiento
suma binaria de 0111 y 0110 sera 1101; si se ha
realizado con ADDU la UCP no da desbordamiento Las instrucciones de desplazamiento realizan
(porque, en efecto, 7 + 6 = 13, que es el resul- las operaciones estudiadas en el Apartado 3.5 (y
tado, interpretado como nmero sin signo), pero resumidas en la Figura 3.12), donde tambin vi-
si la instruccin hubiese sido ADDS la UCP habra mos sus cdigos nemnicos.
puesto el indicador V a uno (el resultado 1101, in-
terpretado como nmero con signo y complemen- Instrucciones de transferencia de control
to a 2, es un resultado incorrecto).
Todas las UCP incluyen la posibilidad de su- Adems de las transferencias de control incon-
mar y restar con el acarreo producido por una dicionadas, BR, CALL y RET, encontramos
operacin previa, para poder, en caso necesario, 11
T es por tag (etiqueta).
realizar por software operaciones sobre operandos 12
No se confunda con complementar. Con nuestros con-
ms largos que los previstos en las instrucciones: venios nemnicos, el complemento a 1 se obtiene con la ins-
ADDC (sumar dos operandos y el acarreo previo) truccin NOT, y el complemento a 2 con NEG.
4.7. Repertorios de instrucciones 153

en este grupo a las condicionadas al valor que ten- Un caso muy especial de instruccin de salto
gan los indicadores: BZ (bifurcacin si cero), (salto con una condicin que no se cumple nun-
BNZ (bifurcacin si no cero), BN (bifurcacin ca) es la instruccin NOP (no operacin): no ha-
si negativo), BNN, CALLZ, CALLNZ RETZ, ce nada, pero ocupa un espacio en memoria y un
etc. tiempo de ejecucin. Puede utilizarse para conse-
Hay que tener en cuenta que la solucin expli- guir que un programa ocupe exactamente un deter-
cada en el Apartado 4.6 para las llamadas a y re- minado nmero de posiciones de memoria o que
tornos de subprogramas no es la nica, aunque sea tarde un cierto tiempo en ejecutarse (as, teniendo
la ms utilizada. En UCP que adoptan otras solu- en cuenta los tiempos de ejecucin de las distintas
ciones, las instrucciones para llamar a subprogra- instrucciones, pueden ejercerse acciones sobre el
mas pueden ser diferentes. Por ejemplo la solucin exterior en instantes prefijados).
puede consistir en guardar la direccin de retorno
en la palabra cuya direccin es la anterior a la de la Instrucciones de gobierno
primera instruccin del subprograma; en este caso
no existe la instruccin RET13 , ya que si la lla- Son las que actan sobre la UCP y sobre unida-
mada ha sido CALL dir el retorno se har con des de control perifricas, bien sea para alterar su
BR [/dir]. En otras UCP la direccin de re- estado (por ejemplo, HALT, EI y DI) o pa-
torno se guarda en un registro, y el retorno se ha- ra comprobarlo, y normalmente son instrucciones
ce mediante una bifurcacin con direccionamiento privilegiadas. En los ejemplos de entrada y salida
indirecto a ese registro. para Smplez vimos que la comprobacin del es-
En la Leccin 8 estudiaremos una solucin muy tado de los perifricos se haca con la instruccin
eficiente (reduce el nmero de accesos a la MP) LD (y la alteracin, por ejemplo, para permitir
basada en el uso de registros para transmitir tanto o inhibir las interrupciones de un perifrico, con
los argumentos como la direccin de retorno. ST). Pero algunas UCP tienen instrucciones de
Una instruccin cuyo efecto es parecido pero no entrada y salida especficas para estas acciones de
igual al de RET es RETI (retorno de interrup- gobierno. A veces estas instrucciones se combinan
cin): adems de restaurar la direccin de retorno con una accin de bifurcacin o de salto condicio-
repone tambin el contenido del registro de estado nado. Por ejemplo, podramos tener la instruccin
y de los que la UCP haya guardado automtica- SKIPR dir: salto si el perifrico de direccin
mente en el cambio de contexto que sigue a una dir est preparado.
interrupcin (Apartado 3.6). Una instruccin que es de gobierno, pero tam-
Finalmente, algunas UCP incluyen instruccio- bin de transferencia de control, es la de llamada
nes llamadas SKIP, SKIPZ, etc. que no espe- al supervisor: BRK. Se trata de una instruccin
cifican direccin de transferencia de control: si se muy importante, porque permite construir el nivel
cumple la condicin, la siguiente instruccin no se de mquina operativa, como veremos en la Tercera
ejecuta. Podemos llamarlas instrucciones de sal- Parte.
to. Son interesantes porque su formato puede ser
muy corto, al no tener que especificar ms que el Lenguajes ensambladores
cdigo de operacin y la condicin de salto.
Cada fabricante ha elegido sus propios conve-
13
Pero s CALL, porque su efecto tiene que ser diferen- nios para los nemnicos de las instrucciones y pa-
te al de BR. En efecto, adems de guardar la direccin de
retorno en dir, ahora tiene que bifurcar no a dir sino a
ra la manera de indicar en ensamblador los modos
dir+1 (o a dir+k, si la direccin ocupa k direcciones de de direccionamiento. En la norma IEEE 694, que
la MP). hemos utilizado para definir los ensambladores de
154 Leccin 4. Variaciones sobre instrucciones y direccionamientos

Smplez y Smplez+i4 y para los ejemplos de esta En las Lecciones 6 y 7 tendremos ocasin de es-
Leccin, se definen cdigos de operacin nem- tudiar ejemplos de programacin en ensamblador.
nicos, reglas, etc., de manera suficientemente am- No obstante, conviene sealar que nuestra insis-
plia como para escribir programas para cualquier tencia sobre la programacin en ensamblador no
mquina. Es decir, dado el modelo funcional de guarda relacin con la importancia de esta activi-
un ordenador en el nivel de mquina convencio- dad; de hecho, raramente se programa hoy da en
nal (repertorio de instrucciones, registros, modos ensamblador (vase el Apartado 7.13).
de direccionamiento, etc.), siempre se puede cons-
truir un ensamblador que traduzca a su lenguaje
de mquina los programas escritos en el lenguaje
4.8. Medidas de prestaciones
IEEE 694.
La comparacin entre ordenadores es, natural-
En la bibliografa que citamos en el Aparta-
mente, un asunto de gran importancia prctica. Pe-
do 4.13 el lector puede encontrar la definicin
ro tambin es difcil y controvertido. Dado nuestro
completa de esta norma y ver ejemplos de progra-
enfoque conceptual, descriptivo y cualitativo, no
mas para distintos ordenadores y de corresponden-
vamos a extendernos en l ms que para presentar
cias entre el ensamblador del fabricante y la norma
las ideas y los trminos bsicos.
IEEE 694. La mayora de los cdigos de operacin
ya los hemos visto, as como la manera de indicar
el modo de direccionamiento (en los ejemplos del Velocidad y potencia
Apartado 4.4). En general, el modo de direcciona- En general, la velocidad de un sistema para un
miento se especifica mediante smbolos que acom- determinado estmulo puede definirse como la in-
paan a la expresin de la direccin, como resume versa de su tiempo de respuesta a ese estmulo. En
la Tabla 4.3. un ordenador sera la inversa del tiempo que trans-
Modo Smbolo Ejemplo curre desde que empieza a ejecutar un determina-
Absoluto (directo) Prefijo / /dir do programa hasta que termina.
Pgina 0 Prefijo ! !dir Por otra parte, la potencia es la cantidad total
Indirecto Corchetes [dir] de trabajo realizado por unidad de tiempo. En un
Relativo a CP Prefijo $ $dir ordenador, el nmero de programas ejecutados por
Inmediato (literal) Prefijo # #valor segundo (o por hora, o por da).
Indexado Corchetes dir[.R] En principio ambas cosas, as definidas, son
Preindexado Corchetes [dir[.R]]
idnticas. En efecto, imaginemos un programa cu-
Postindexado Corchetes [dir][.R]
Registro Prefijo . .R ya ejecucin tarda un milisegundo. La velocidad
Autopreincremento Prefijo ++ ++dir ser 1/103 = 1.000, y, si se ejecuta repetidamen-
Autopostincremento Sufijo ++ dir++ te este mismo programa, en un segundo se habrn
Autopredecremento Prefijo -- --dir ejecutado 1.000 programas. Ahora bien, hay que
Autopostdecremento Sufijo -- dir-- tener en cuenta que el tiempo de respuesta para un
Tabla 4.3. Convenios para representar el modo de di- programa de aplicacin tiene tres componentes:
reccionamiento en el ensamblador IEEE 694.
TR = TP + TS + TES
En los modos ++ y --, dir es, gene- Durante TP , la UCP est ejecutando instrucciones
ralmente, un registro. Por ejemplo, en la instruc- del programa; TS es el tiempo que la UCP em-
cin ADD .2, [.7++] la direccin efectiva es plea en ejecutar instrucciones del sistema operati-
el contenido del registro R7 (y, tras obtener el ope- vo, y TES es el tiempo durante el cual la UCP es-
rando, se incrementa el contenido de este R7). t inactiva esperando la terminacin de transferen-
4.8. Medidas de prestaciones 155

cias con los perifricos14 . Si el programa se ejecu- P1A ESA P2A P1B ESB P2B PC
ta completamente hasta terminar, sin intervencin
(a) con monoprogramacin
del sistema operativo, entonces TS = 0, pero en tal
caso la UCP pierde el tiempo durante TES . En el
Apartado 4.2 hemos avanzado una idea que estu- P1A P1B PC P2A PC P2B PC
diaremos con detalle en la Leccin 20: un sistema ESA ESB t
operativo con multiprogramacin permite que du-
(b) con multiprogramacin
rante este tiempo la UCP ejecute instrucciones de
otro programa. Obviamente, esto supone una so- Figura 4.14. Diagramas de tiempos en la ejecucin de
brecarga: el tiempo TS que el sistema operativo tres programas.
emplea en hacer la conmutacin de un programa a
otro. Pero si la sobrecarga no es muy grande con
relacin a TES se consigue una mejora de la po- Velocidad de la UCP
tencia aunque la velocidad para cada programa Centrmosnos ahora en la velocidad de la UCP.
sea menor. Aqu hemos de adelantar algo que estudiaremos
La Figura 4.14 ilustra grficamente la idea en con detalle en la Segunda Parte. El funcionamiento
un ejemplo de ejecucin de tres programas, A, B de la UCP est sincronizado mediante una seal
y C, dos de ellos idnticos (en cuanto a tiempos): binaria que va alternando dos niveles de tensin
tienen una parte de procesamiento (P1A, P1B) se- (niveles lgicos 0 y 1) con un perodo constante.
guida de una de entrada/salida (ESA, ESB) de du- A esta seal se le llama reloj15 , y cada perodo es
racin doble a la anterior y terminan con otra par- un ciclo de reloj16 . La inversa de la duracin del
te de procesamiento (P2A, P2B) de igual duracin ciclo de reloj es la frecuencia de reloj, que, con la
que la primera; el tercer programa slo tiene pro- tecnologa actual, es del orden de las centenas de
cesamiento (PC). Las franjas sombreadas corres- MHz (Megaciclos por segundo), o de varios GHz
ponden a la carga de los programas en la MP, y las (Gigaciclos por segundo).
blancas (slo en el caso de multiprogramacin) a Una frmula muy sencilla para determinar el
la sobrecarga de tiempo del sistema operativo. Es tiempo de respuesta de la UCP para un determi-
fcil observar en esta ilustracin que, si bien el nado algoritmo (suponiendo que este algoritmo no
tiempo total para la ejecucin de los tres progra- contiene operaciones de entrada/salida, y que tam-
mas (que da la referencia para la potencia) es me- poco hay sobrecarga por el sistema operativo, es
nor utilizando multiprogramacin, el tiempo que decir, TR = TP ) es:
transcurre desde que uno cualquiera de los progra-
mas empieza su ejecucin hasta que ese programa TR = I CPI/F
termina (cuya inversa es la velocidad para tal pro-
donde:
grama) es mayor con multiprogramacin.
I es el nmero de instrucciones del progra-
En resumen, la velocidad responde al punto de ma. Evidentemente, depende del algoritmo, pe-
vista individual, o del usuario, mientras que la po- ro para un mismo algoritmo, y si estamos com-
tencia es una medida ms prxima al punto de vis-
15
ta global, o de la gestin del sistema. No debe confundirse con la seal de las interrupciones de
reloj (Apartado 3.6): sta (de menor frecuencia) est generada
por un controlador externo a la UCP.
14 16
Observe que TES puede ser del orden de milisegundos Tampoco debe confundirse ciclo de reloj con ciclo de
(transferencias con los discos) o del orden de segundos o mi- memoria (Apartado 1.13). Normalmente, un ciclo de memo-
nutos (si el programa necesita un dato proporcionado por el ria tiene una duracin de varios ciclos de reloj. En el resto de
usuario). este Apartado, ciclo se refiere a ciclo de reloj.
156 Leccin 4. Variaciones sobre instrucciones y direccionamientos

parando dos UCP, depende mucho del reperto- en este caso, el nmero medio de ciclos por ins-
rio de instrucciones. Cuantas ms instrucciones truccin es CPI = 106 120 106 /60 = 2,
tenga la UCP y ms cosas permitan hacer stas, y la velocidad es V = F/CPI = 120/2 = 60
menor ser I 17 . MIPS. Imaginemos ahora que a la misma UCP le
CPI (ciclos por instruccin) es el nmero de ci- aadimos una unidad de coma flotante. La mis-
clos de reloj que requiere la ejecucin de ca- ma operacin se realizar con una sola instruccin,
da instruccin. En realidad, es un nmero me- MUL.F, cuya ejecucin tarda, por ejemplo, seis
dio, ya que no todas las instrucciones necesitan ciclos (las instrucciones de coma flotante requie-
el mismo nmero de ciclos. Este factor depen- ren ms ciclos que las de coma fija). El tiempo
de sobre todo del diseo de la microarquitectu- de ejecucin resulta ser 6/120 = 0, 05 microse-
ra, pero, en general, las instrucciones complejas gundos (una ganancia en la velocidad, para esta
van a exigir ms ciclos para su ejecucin. operacin, de 1/0, 05 = 20). Y, sin embargo, de-
beramos decir que la velocidad se ha reducido a
F es la frecuencia del reloj, y depende de la
V = F/CPI = 120/6 = 20 MIPS.
tecnologa, es decir, de factores de los niveles
Que la velocidad medida en funcin de CPI de-
de circuito elctrico y dispositivo.
pende del programa resulta bastante evidente si te-
En promedio, el tiempo de respuesta para una
nemos en cuenta que CPI vara de unas instruccio-
instruccin ser:
nes a otras. Si la UCP tiene n tipos de instruccio-
TRI = CPI/F microsegundos nes clasificadas por el nmero de ciclos que re-
(si F se mide en MHz) quiere la ejecucin de cada una (es decir, las ins-
trucciones del tipo 1 necesitan C1 ciclos, las del ti-
y de aqu procede la unidad de medida ms senci- po 2 C2 ciclos, etc.), y si la ejecucin de un deter-
lla para la velocidad de una UCP: minado programa implica la ejecucin de I1 ins-
V = 1/TRI = F/CPI MIPS trucciones del primer tipo, I2 del segundo, etc., el
nmero medio de ciclos para ese programa resulta
MIPS significa Millones de Instrucciones ser:
Por Segundo , y es una unidad muy utilizada, CPI = I1 C1 +I2 C2 +... In Cn
I1 +I2 +... In
pero excesivamente simplista, porque no tiene en
cuenta la potencia de cada instruccin individual, Vemos que CPI depende de la proporcin relati-
y adems no slo depende de la UCP (que sera va de instrucciones (o mezcla de instrucciones)
lo deseable), sino del programa. Vemoslo con un que se ejecutan cuando se ejecuta el programa.
ejemplo sencillo. Esto hace que los MIPS no sean una medida fia-
Imaginemos una UCP con F = 120 MHz que ble para comparar una UCP con otra y que, en ri-
no dispone de operaciones de coma flotante en gor, ni siquiera sea correcto hablar de los MIPS
hardware. La operacin de multiplicacin de dos de una UCP, porque varan con el programa
nmeros representados en coma flotante se har (Ejercicios 10 a 13). Pese a todo, suele mencionar-
mediante un programa (Apndice A). Suponga- se en las documentaciones tcnico-comerciales,
mos que la ejecucin de este programa implica la aunque se tiende a adoptar otras medidas ms ri-
ejecucin de sesenta instrucciones y tarda un mi- gurosas, basadas en bancos de medida.
crosegundo. Como TR = I CPI/F , resulta que, Para comparar ordenadores dedicados a tareas
17
de clculo numrico (y, que, por tanto, disponen de
Adems, como normalmente se programa en lenguajes
de alto nivel, depender tambin del compilador: un compi-
operadores de coma flotante en hardware), y, es-
lador bien diseado y adaptado a la mquina genera menos pecialmente, los llamados supercomputadores
instrucciones que otro que no lo est. (Apartado 15.2), suele utilizarse otra unidad de
4.8. Medidas de prestaciones 157

medida: MFLOPS (Millones de operaciones en tes con la intencin de acordar bancos de medida
coma FLOtante Por Segundo). Su utilidad tambin comunes. La unidad de medida de velocidad de
es muy limitada: carece de valor, por ejemplo, pa- una UCP definida inicialmente por SPEC se llam
ra medir la velocidad de la UCP con programas en SPECmarks:
los que predomina el procesamiento simblico. 1. Se ejecuta un conjunto de programas concretos,
Citemos finalmente una unidad que se utiliza determinados por SPEC.
con los ordenadores especialmente diseados pa-
2. Para cada programa se mide la velocidad de
ra procesar programas lgicos (Apartado 22.10):
manera relativa a la de un ordenador VAX-
LIPS (inferencias lgicas por segundo) y sus ml-
11/780: tiempo de ejecucin del programa en
tiplos: KLIPS y MLIPS.
el VAX dividido por el tiempo de ejecucin del
mismo programa en la mquina objeto de me-
Bancos de medida dida.
Para eludir la dependencia de un programa, se 3. La velocidad en SPECmarks es la media geo-
pueden promediar las velocidades medidas para mtrica del conjunto de mediciones18 .
un conjunto de programas. Este conjunto puede As, una UCP con 100 SPECmarks sera, en pro-
estar formado por: medio, cien veces ms rpida que la UCP del
Pequeos programas: clculo del factorial, or- VAX-11/780.
denacin de listas, inversin de matrices, etc. Los problemas de esta unidad son comunes a
Programas reales: compiladores, procesadores todos los bancos de medida:
de textos, procesadores de imgenes, etc. En principio, miden la velocidad, no la poten-
Medidas sintticas: programas especficamente cia. No dan una evaluacin precisa de las pres-
diseados para evaluar la velocidad con distin- taciones de la mquina operativa (es decir, del
tas funciones, tratando de reproducir un perfil conjunto formado por la UCP, el sistema de en-
medio del uso de esas funciones por los pro- trada/salida y el sistema operativo).
gramas reales; las ms conocidas son Whets- El perfil medio que pretenden reproducir
tone (conjunto de programas en Fortran) y puede ser muy diferente de la carga de traba-
Dhrystone (conjunto de programas en C y jo real sometida al ordenador.
Ada); la primera pone nfasis en la velocidad
En relacin con el punto anterior, los diseado-
del ordenador para clculos cientficos y de
res de hardware y de software pueden optimizar
ingeniera, mientras que la segunda est ms
sus productos para la medida.
orientada al software del sistema.
El lector interesado puede acudir a la abundante Como ejemplo del ltimo punto, es ilustrativo
bibliografa sobre el asunto para conocer ms de- el siguiente hecho. El primer banco SPEC (lla-
talles. Solamente nos queda advertir que convie- mado SPEC CPU89) consista en seis programas
ne contemplar con cierto escepticismo los datos (en Fortran y Ada) con abundancia de clculos
publicados en las documentaciones comerciales en coma flotante, y cuatro (en C) para procesa-
de los fabricantes cuando comparan sus productos miento de enteros. Uno de los programas permi-
con los de la competencia. No porque sean falsos, ta que ciertas optimizaciones en el compilador
sino porque, de entre la variedad de medidas po- llegasen a dividir por siete el tiempo de respues-
sibles, naturalmente toman las ms favorecedoras. ta para ese programa, aumentando as aparente-
En este sentido, la constitucin de SPEC (Stan- mente el nmero de SPECmarks. Posteriormen-
dard Performance Evaluation Corporation) es una 18
Si el lector resuelve los Ejercicios 14 y 15 comprender
interesante iniciativa tomada por varios fabrican- por qu se utiliza la media geomtrica, y no la aritmtica.
158 Leccin 4. Variaciones sobre instrucciones y direccionamientos

te, SPEC ha ido eliminando ese y otros progra- piladores, aplicaciones, etc.). Sin embargo, mu-
mas que presentaban parecidos problemas y refi- chos estudios sobre estadsticas de uso de instruc-
nando las medidas. En la ltima versin, SPEC ciones durante la ejecucin de los programas de-
CPU2000, se definen separadamente un conjun- mostraban que gran parte de tales instrucciones
to de doce programas en C y C++ para evaluar apenas se utilizaban; esto es an mas cierto cuando
la velocidad con enteros (SPECint2000) y otro de los programas en lenguaje de mquina no estn es-
catorce programas en Fortran y C para coma flo- critos directamente por un programador, sino que
tante (SPECfp2000). Tambin ha introducido otras proceden de un proceso de compilacin. En media,
medidas para la potencia (SPECint_rate2000 y del anlisis de programas compilados resulta que
SPECfp_rate2000) y ha definido medidas obteni- alrededor del 80 % de las operaciones se realizan
das con optimizacin de los compiladores (com- con slo un 20 % de las instrucciones del reper-
pilacin agresiva) y sin ella (compilacin con- torio (naturalmente, ste es un resultado global, y
servadora: SPECint_base2000, etc.)19 . hay una gran variacin dependiendo del programa
fuente y del repertorio de instrucciones).
Esto condujo a algunos investigadores a plan-
4.9. RISC y CISC tear una alternativa de diseo diferente: si decidi-
mos reducir al mnimo el nmero de instruccio-
El diseo del repertorio de instrucciones es una
nes (no el mnimo terico de la nota a pie de pgi-
tarea compleja, especialmente en un entorno com-
na, pero s el que resulta de eliminar todas las que
petitivo, en el que los fabricantes tienen que resol-
tengan un porcentaje muy bajo de utilizacin) ten-
ver mltiples conflictos entre costes de desarrollo,
dremos programas ms largos y, en principio, ms
plazos de fabricacin, coste y prestaciones del pro-
lentos en su ejecucin. Pero la unidad de control
ducto... No pretendemos en este curso entrar en
podr ser mucho ms sencilla, y su implementa-
detalles propios del diseo de ordenadores, pero,
cin en los niveles inferiores (desde el de microar-
desde un punto de vista descriptivo, es obligatorio
quitectura hasta el de dispositivo) podr, para el
comentar una tendencia reciente. Para entenderla
mismo espacio fsico (o sea, superficie de circui-
hay que adoptar una perspectiva histrica.
to integrado), ser mucho ms eficiente. Es decir,
Durante los aos 60, 70 y 80 la evolucin de las
que quizs el resultado final sea que la mquina
UCP de los ordenadores se caracteriz por un enri-
no resulte tan lenta. En trminos ms cuantitati-
quecimiento del repertorio de instrucciones, tanto
vos, recordando que el tiempo de respuesta para un
en cantidad (varios centenares) como en modos de
programa con I instrucciones es TR = I CPI/F ,
direccionamiento. Esto obedeca a razones prcti-
se trata de que el aumento de I quede compensa-
cas20 : cuantas ms posibilidades ofrezca el nivel
do por una reduccin de CPI y un aumento de F .
de mquina convencional ms fcil ser desarro-
Es como el ciclista que en una pendiente de subida
llar niveles superiores (sistemas operativos, com-
pone un desarrollo corto, de modo que recorrer
19
Como mquina de referencia se toma otra ms actual, la la misma distancia le exige ms pedaladas: ha au-
estacin de trabajo Ultra5_10 de Sun Microsystems con una mentado I (nmero total de pedaladas), pero si es-
UCP SPARC de 300 MHz y 256 MB de MP, pero ste es un
to le permite reducir suficientemente CPI/F (que
cambio intranscendente, como se puede comprobar estudian-
do los mencionados Ejercicios 14 y 15. sera lo anlogo al tiempo que invierte en cada pe-
20
Se ha demostrado tericamente que un ordenador con s- dalada) puede llegar antes al puerto21 .
lo dos instrucciones, sumar uno al acumulador y decre-
21
mentar el acumulador y bifurcar si resulta cero podra hacer Prosiguiendo la analoga, podemos pensar en ordenado-
lo mismo que cualquier otro ordenador (o, por decirlo tam- res de desarrollo variable, lo que exige un modelo de or-
bin de manera terica, dotado de una MP infinita, tendra la denador con repertorio adaptativo. Normalmente, el dise-
misma potencia computacional que una mquina de Turing). o es de pin fijo, y el problema es la eleccin de este
4.10. Resumen 159

A un ordenador cuyo diseo sigue la tendencia 4.10. Resumen


tradicional se le llama CISC (Complex Instruc-
tion Set Computer), por contraposicin a RISC Los formatos de instrucciones son muy varia-
(Reduced Instruction Set Computer). dos, pero, en general, las de procesamiento inclu-
Los RISC suelen tener del orden de cien instruc- yen, adems del cdigo de operacin, la especifi-
ciones y un nmero reducido de modos de direc- cacin para encontrar a los operandos y al resulta-
cionamiento, pero esta caracterstica no es la ni- do, es decir, dnde estn (en registros o en la MP)
ca, ni siquiera la ms importante; otras son: y cmo se localizan.
Tienen arquitectura load/store. Esto quiere La localizacin de los operandos en la MP de-
decir que los nicos accesos a la MP son para pende del modo de direccionamiento. Tras presen-
extraer instrucciones y datos y para almacenar tar los principales modos, directo, indirecto, inme-
datos. Todas las operaciones de procesamiento diato, indexado y relativo (a programa, a pgina,
se realizan en registros de la UCP, con instruc- a base o a segmento), hemos visto cmo el direc-
ciones de 21 , 12 + 21 o 21 + 12 + 12 direc- cionamiento relativo a programa permite escribir
ciones. programas independientes de su ubicacin, y c-
mo el relativo a base o a segmento permite que los
Sus instrucciones son sencillas: realizan ni-
programas sean reubicables dinmicamente.
camente las operaciones bsicas, no como los
Las mquinas de pila son una variante intere-
CISC, en los que suelen encontrarse instruccio-
sante de la arquitectura de von Neumann, pero
nes sofisticadas que pretenden facilitar la com-
el concepto de pila puede implementarse en una
pilacin de ciertos lenguajes de alto nivel, pero
arquitectura clsica con la ayuda de un registro
cuyo porcentaje de uso es muy bajo.
adicional, el puntero de pila, que permite simu-
Su formato de instrucciones es regular: todas lar una memoria de pila en una memoria de acce-
las instrucciones tienen la misma longitud y el so aleatorio, y que facilita el anidamiento de las
nmero de formatos diferentes es reducido (tres llamadas a subprogramas y de las interrupciones.
o cuatro); en cada formato, todos los bits tienen En el Apartado 6.13 veremos cmo se puede hacer
el mismo significado para todas las instruccio- uso de esta pila para transmitir parmetros en las
nes, y esto permite que la unidad de control sea llamadas.
ms sencilla. Los tipos de instrucciones incluidas en un re-
Como consecuencia de lo anterior, y ya en el ni- pertorio son:
vel de microarquitectura, la implementacin de de movimientos de datos: LD, ST, MOVE, PUSH,
la unidad de control suele hacerse cableada22 POP, IN, OUT;
y el nmero medio de ciclos por instruccin se
aritmticas, lgicas y de comparacin: ADD,
aproxima a 1 (o, incluso, se ejecutan varias ins-
ADDC, SUBC, MUL, DIV, NOT, AND, OR, XOR, CMP;
trucciones en un solo ciclo, como veremos en
el Apartado 15.3). de desplazamientos: SHR, SHL, ROR, ROL, RORC,
ROLC, SHRA, SHLA;
pin para obtener las mejores prestaciones medias teniendo de transferencia de control: BR, BZ, BN..., SKIP,
en cuenta todos los programas de aplicacin posibles. Con las
tcnicas de microprogramacin puede adaptarse el repertorio
SKIPZ,..., CALL, CALLZ,..., RET, RETZ...
de instrucciones al tipo de aplicaciones (Apartado 12.5), pero de gobierno: HALT, BRK, EI, DI, etc.
este cambio, en principio, no es automtico. Algunas pro- Las comparaciones entre ordenadores en lo que
puestas sobre esta idea pueden encontarse en las referencias
que se citan al final del Apartado 4.12.
respecta a sus prestaciones son difciles de es-
22
Como veremos en la Segunda Parte, lo normal en los tablecer. Hay algunas medidas, tan globales co-
CISC es que la unidad de control sea microprogramada. mo simplistas, para la velocidad de la UCP: los
160 Leccin 4. Variaciones sobre instrucciones y direccionamientos

MIPS (millones de instrucciones por segundo) y desplazamiento (contenido del campo CD cuando se
los MFLOPS (millones de operaciones en coma interpreta como un nmero a sumar o restar del conte-
flotante por segundo), y otras, tambin globales, nido de un registro) lo es de displacement, a veces
pero ms rigurosas, son las que se realizan con llamado offset.
A las pilas tambin se les llama memorias LIFO (por
bancos de medida, como los definidos por SPEC.
LastIn, FirstOut: el ltimo en entrar es el primero
Generalmente, las UCP incluyen varios cente- en salir).
nares de instrucciones en sus repertorios, con for- El trmino prestaciones tiene el sentido cuantita-
matos y modos de direccionamiento diversos y tivo habitual, por ejemplo, en la industria del autom-
complicados. Una tendencia alternativa es la de los vil (medidas de la eficiencia). Hemos traducido per-
RISC, en los que el nmero de instrucciones y formance, throughput, instruction mix y bench-
modos es reducido, el formato de instrucciones es mark por velocidad, potencia, mezcla de ins-
trucciones y banco de medida, respectivamente. (El
regular y slo se accede a la MP para leer o escri-
trmino ingls performance es polismico: segn el
bir: las instrucciones de procesamiento tienen los contexto, se puede traducir por actuacin, conduc-
operandos y el resultado en registros de la UCP. ta, desempeo, prestaciones...).

4.11. Observaciones terminolgicas 4.12. Notas histricas


La mayora de los autores consideran direcciona- Direccionamiento de la siguiente instruc-
miento directo sinnimo de direccionamiento abso-
luto, aunque algunos llaman directo a todo tipo de
cin: explcito frente a secuencial
direccionamiento que no sea indirecto, y, as, hablan Algunos de los ordenadores diseados antes de la
de directo indexado, directo relativo, etc. En al- introduccin de las memorias de ncleos con acceso
gunos microprocesadores de ocho bits con direcciona- aleatorio incluan en cada instruccin un campo para el
miento relativo a pgina se utiliza directo para refe- direccionamiento de la siguiente (Figura 4.1(a)). Esto
rirse al direccionamiento a la pgina 0 (CD slo tiene estaba justificado teniendo en cuenta que la memoria
un byte), y absoluto para las instrucciones que per- principal era un tambor magntico (padre de los ac-
miten referirse a cualquier direccin (CD con dos o tres tuales discos), en el que el tiempo de acceso a una di-
bytes). reccin depende de la posicin instantnea del tambor;
Hemos catalogado como relativos a todos los mo- el programador poda as situar las sucesivas instruc-
dos de direccionamiento en los que se suma un des- ciones de su programa en los lugares adecuados para
plazamiento a una direccin de referencia. En algunos minimizar el tiempo de su acceso. En las mquinas ac-
textos y manuales relativo se refiere exclusivamente tuales las instrucciones de un programa se almacenan
a relativo a programa. siempre en posiciones sucesivas de la memoria, y el
A un programa independiente de su ubicacin se le direccionamiento de la siguiente instruccin a ejecutar
llama tambin PIC (Position Independent Code). es implcito, ahorrndose as ese campo de direcciona-
Tanenbaum (1999) seala acertadamente que el tr- miento. Naturalmente, esto obliga a la introduccin de
mino consagrado de instrucciones de movimiento de instrucciones de bifurcacin, que, sin realizar procesa-
datos es equvoco: cuando algo se mueve deja de estar miento til, ocupan posiciones de memoria y tiempo
en el sitio original, lo que no es el caso. Sera ms ajus- de ejecucin. Pero este tributo es soportable siempre
tado al significado instrucciones de duplicacin de da- que el porcentaje de tales instrucciones en un progra-
tos. ma sea pequeo. Slo en casos excepcionales no es as;
Hemos traducido branch (o jump) por bifurca- por ejemplo, en las tcnicas de microprogramacin que
cin, y skip por salto. Algunos autores reservan estudiaremos en la Segunda Parte. Por cierto, la equvo-
jump para referirse a las bifurcaciones incondiciona- ca denominacin acceso aleatorio proviene de que
das y branch para las condicionadas. el programador puede elegir las direcciones de la MP
Pila y puntero de pila son traducciones de de modo arbitrario (que sera una traduccin de ran-
stack (o pushdown stack) y stack pointer. El dom ms apropiada en este caso que aleatorio), sin
4.12. Notas histricas 161

que esta eleccin afecte al tiempo de acceso. cesin de dos, cuatro u ocho bytes), y muchas disponen
A este respecto, es interesante observar que el mo- de instrucciones diferentes para aritmtica en BCD y
delo de von Neumann presupona una MP de acceso para aritmtica binaria.
aleatorio (a diferencia de la utilizada en el ENIAC, ba-
sada en lneas de retardo). Para construirla, propugna- Direccionamiento de la MP
ba el uso de selectrones, dispositivos fabricados por
RCA que hacan un uso ingenioso de la propiedad de La disposicin de la Figura 3.1(a) (direcciones de
persistencia de las cargas electrostticas en los tubos palabra alineadas, siempre pares) es la tpica de uno
de rayos catdicos (el mismo principio que actualmen- de los primeros miniordenadores, el PDP-11, mientras
te se sigue, en un nivel microelectrnico, en las memo- que la de la Figura 3.1(b) (una palabra o doble palabra
rias dinmicas con tecnologa MOS). Con cuarenta puede empezar en cualquier direccin de la MP, direc-
selectrones poda conseguirse una MP de 4.096 pala- cionable por bytes) corresponde a la de otro ordenador
bras de 40 bits (... la capacidad de esta memoria ex- del mismo fabricante, el VAX-11, y a muchos micro-
cede en unas diez veces a la necesaria para la mayora procesadores actuales.
de los problemas actuales..., Burks et al., 1946). Pero El esquema ms utilizado en los ordenadores espe-
la primera tecnologa econmica y fiable para las me- cializados en clculo cientfico es el de una direccin.
morias de acceso aleatorio fue la de ncleos de ferrita, Sin embargo, los ordenadores para aplicaciones comer-
inventada por Forrester en el M.I.T. e introducida en ciales, en los que existen instrucciones aritmticas de-
el ordenador Whirlwind en 1953 (Redmond y Smith, cimales que operan sobre cadenas de longitud variable,
1980); pervivi durante ms de veinte aos en todos el uso del acumulador es poco prctico, y se prefera el
los ordenadores hasta su sustitucin por las memorias formato de dos direcciones. Los ordenadores mixtos
de semiconductores. (la mayora de los diseados a partir de los aos 60)
incluyen en su repertorio ambos tipos de instrucciones.
El direccionamiento indirecto se encuentra en to-
Mquinas de palabras y de caracteres
dos los ordenadores, aunque en algunos slo se dis-
Smplez y Smplez+i4 pueden considerarse mqui- pone de este modo sobre registro, no sobre la MP. El
nas de palabras u orientadas a palabras: la unidad PDP1, introducido por Digital Equipment Corp. en
bsica de informacin que se transfiere o se procesa es 1959, tena direccionamiento indirecto multinivel a me-
la palabra, conjunto de bits elegido en el diseo para moria (Apartado 2.12). Entre las raras mquinas que
que puedan representarse con l tanto datos como ins- despus se han diseado con esta caracterstica (indi-
trucciones. En los primeros ordenadores, diseados pa- reccin multinivel) estn las de la serie HP 2100 de
ra clculo cientfico, el nmero de bits era 32, 36 o 40, HewlettPackard y la 516 de Honeywell.
adecuado para la representacin numrica en binario El direccionamiento indirecto a travs de la MP con
(en formato de coma fija o de coma flotante) con sufi- autoincremento y autodecremento se empez a incor-
ciente precisin. Como decamos en el Apartado 3.3, si porar en los ordenadores de la segunda generacin que
la frecuencia de operaciones de entrada/salida es gran- tenan pocos registros, y era una modalidad de direc-
de con relacin a la de clculos aritmticos, y esto es cionamiento indirecto sobre ciertas palabras de la MP
cierto especialmente en las aplicaciones comerciales, reservadas para ese fin. Por ejemplo, el PDP8 tena re-
compensa representar internamente la informacin nu- servadas ocho palabras, las de direcciones Q10 a Q17.
mrica con cadenas decimales codificadas en BCD y Cualquier referencia con indireccin a una de ellas ha-
trabajar con aritmtica decimal. Por esta razn, a me- ca que se tomara como direccin efectiva su conteni-
diados de los aos 50 aparecieron ordenadores llama- do, incrementndose previamente este contenido, si se
dos de gestin (por oposicin a los cientficos) en los trataba de autoincremento, o decrementndose despus
que la unidad bsica era el carcter, codificado en seis de tomar la direccin efectiva, si era autodecremento.
u ocho bits, y con instrucciones capaces de trabajar con Evidentemente, el acceder a registros y no a la MP ha-
cadenas de caracteres de longitud variable; eran mqui- ce que la ejecucin de las instrucciones sea ms rpida.
nas de dos direcciones, sin acumulador. El ejemplo sobre modos de direccionamiento desa-
Actualmente no tiene sentido distinguir entre ambos rrollado al final del Apartado 4.5 est inspirado en los
tipos de mquinas: la mayora tienen posibilidad de di- ordenadores PDP-11 y VAX-11, cuyos modos se defi-
reccionar bytes y palabras (siendo una palabra una su- nen en los Ejercicios 8 y 9.
162 Leccin 4. Variaciones sobre instrucciones y direccionamientos

Repertorios de instrucciones Fischer, 1979) ha tenido escaso xito en la industria.


Slo nos consta su adopcin por Hitachi en su familia
La primera mquina de pila fue el Burroughs de RISC SuperH.
5000, introducido en 1963. La motivacin del nuevo
Un resumen de los tres primeros proyectos sobre
enfoque arquitectnico era ajustar mejor el nivel de m-
RISC puede encontrarse en Patterson (1985). Otros ar-
quina convencional a las necesidades de los lenguajes
tculos de revisin y comparacin con los CISC son,
de alto nivel, concretamente, en aquel momento, Algol
por ejemplo, los de Colwel et al. (1985) y Stallings
(Backus, 1960, Barton, 1961). Esta idea de acercar el
(1988). Algunas referencias sobre los productos RISC
nivel de mquina convencional al de mquina simbli-
ms conocidos son las siguientes:
ca para reducir lo que se llam la brecha semntica
(semantic gap) ha sido motivadora de muchas inno- Alsup (1990) describe la familia M88000 de Mo-
vaciones. Las mquinas de pilas despertaron cierto in- torola, y Atkins (1991) el i860 de Intel. Hewlett
ters en los aos 60 y 70, pero lo fueron perdiendo en Packard llama PA (Precision Architecture) a su
los 80. Algunos ordenadores actuales combinan la ar- gama basada en RISC; una descripcin aparece en
quitectura clsica con la de pila, por ejemplo, los de Lee (1989), y detalles de implementacin y veloci-
la serie HP3000 de HewlettPackard. dad del microprocesador, en Asprey et al. (1993). El
La tendencia RISC tiene su origen en tres pro- RS/6000 (Oehler y Blasgen, 1991) de IBM ha si-
yectos de investigacin independientes iniciados a fina- do la base del PowerPC, apadrinado por una alian-
les de los aos 70. En IBM, bajo la direccin de John za de IBM, Motorola y Apple (Becker et al., 1993).
Cocke (Radin, 1982), se dise el llamado 801, que, La descripcin tcnica oficial de IBM es el libro de
aunque no lleg a realizarse, dio lugar posteriormen- Cathy et al. (1994). Digital Equipment Corp. ha desa-
te al producto R6000 de la misma empresa. En la rrollado un RISC de 64 bits, el Alpha (McLellan,
Universidad de Berkeley, David Patterson y colabora- 1993). Una comparacin entre el Alpha y el Power
dores acuaron el trmino y construyeron el RISCI PC (filosofas de diseo, arquitectura y prestaciones)
y el RISCII (Patterson y Ditzell, 1980; Patterson y puede encontrarse en Smith y Weis (1994). Sun Mi-
Squin, 1982). Y en la Universidad de Stanford, John crosystems ha definido el SPARC (Scalable Pro-
Hennessy encabez el proyecto MIPS (Hennessy et cessor ARChitecture), fabricado por varias empresas
al., 1981), cuyo nombre no tiene nada que ver con la de semiconductores; volveremos sobre esta arquitectu-
unidad de velocidad: es un acrnimo de Microproces- ra en las Lecciones 8 y 16.
sor without Interlocked Pipeline Stages. Actualmente Para estudiar con ms detalle y rigor lo relaciona-
muchos fabricantes de ordenadores y de circuitos inte- do con las prestaciones, el lector puede acudir al libro
grados incluyen productos RISC. de Jain (1991). En el Captulo 2 de Patterson y Hen-
Aunque no se han plasmado en productos, se han nessy (2004) se explican, con profusin de ejemplos,
hecho algunas propuestas de arquitecturas con reper- las medidas de velocidad; en el Captulo 1 de Hennessy
torio adaptativo, como la de Athanas y Silverman y Patterson (2003) se incluye, adems, un estudio de
(1993), que se llama PRISM, acrnimo de una expre- las relaciones entre velocidad y coste. Los artculos de
sin en ingls que puede traducirse por reconfigura- Price (1989) y Weiker (1990) describen las tcnicas de
cin del procesador mediante metamorfosis del reper- bancos de medida.
torio de instrucciones. Vanse tambin Hauser (2000) SPEC (que incluye entre sus miembros a los prin-
y Vassiliadis et al. (2003). cipales fabricantes de hardware y de software) no se
limita a la definicin de bancos para las UCP. Se ocupa
tambin del rendimiento de supercomputadores, pro-
4.13. Orientaciones bibliogrficas cesadores grficos, servidores de ficheros, servidores
de web, etc. Informes detallados sobre sus actividades
Minsky (1967) demostr que dos instrucciones son se encuentran en la Internet (SPEC, 2004). Hay otras
suficientes para cualquier clculo. Morgan (1988) pre- organizaciones dedicadas a la medida de prestaciones
senta (con fines didcticos) la realizacin microprogra- en campos de aplicaciones especializados, como TPC
mada de un ordenador con slo tres instrucciones: INC, (Transaction Processing Performance Council) (TPC,
DEC y BN. 2004) y BAPCo (Bussiness Applications Performance
La norma del ensamblador IEEE 694 (IEEE, 1985a, Council) (BAPCo, 2004).
4.14. Ejercicios 163

4.14. Ejercicios 8. El PDP11 era un ordenador (realmente, una se-


rie de ordenadores compatibles) con direcciones
1. Estudie distintas alternativas (capacidad de MP de diecisis bits, MP de 64 KB, y ocho RPG de
direccionable, tamao de la pgina, formato de diecisis bits, de los que R0 a R5 son RPG, R6
instrucciones, etc.) para redisear primero Sm- es un puntero de pila y R7 es el CP. Dispone de
plez y luego Smplez+i4 de modo que incluyan instrucciones para trabajar con dos tipos de datos:
direccionamiento relativo a pgina (conservando bytes y palabras (dos bytes). Las palabras se di-
la longitud de palabra de doce bits). reccionan por la direccin de su byte menos signi-
ficativo (convenio extremista menor y direcciones
2. Considerando Smplez+p (Smplez con pila, alineadas, Figura 3.1(a)).
Apartado 4.6), escriba un subprograma para mul-
tiplicar y otro (que har uso del anterior) para Las instrucciones sobre un operando (en registro
calcular el factorial. Haga una figura similar a la o en MP) tienen una longitud de una o de dos pa-
Figura 4.12 en la que se indique el contenido de labras. Su formato es:
la pila a medida que se calcula el factorial de 5. bits 156: cdigo de operacin
bits 53: modo de direccionamiento
3. Suponga ahora que la solucin adoptada para los bits 20: registro
subprogramas en Smplez no es la de la pila, sino
En la segunda palabra va CD (slo para el caso
la de que la instruccin CALL guarde la direccin
indexado).
de retorno en la palabra direccionada. Modifique
adecuadamente el Programa 4.1 y los del Ejerci- Las instrucciones sobre dos operandos tienen una,
cio anterior. dos o tres palabras, segn que ninguno, uno o los
dos operandos se direccionen en modo indexado.
4. Repita el Ejercicio anterior considerando Sm- Su formato es:
plez+i4 y que la direccin de retorno se guarda en bits 1512: cdigo de operacin
X. Si se precisara del registro X como ndice en bits 119: modo de direccionamiento para ope-
un subprograma, qu manipulaciones sera pre- rando fuente
ciso hacer para no perder la cadena de direcciones bits 86: registro para operando fuente
de retorno? bits 53: modo de direccionamiento para ope-
rando destino
5. Disee un formato de instrucciones para Sm-
bits 20: registro para operando destino
plez+i4p (Smplez+i4 al que se le aaden CALL
y RET, que acceden a una pila de 252 palabras Los modos de direccionamiento son los indicados
en la parte alta de la MP). Suponiendo que en las en la Tabla 4.4 (pgina siguiente), donde k es 1
interrupciones la UCP ya no guarda la direccin o 2 segn que el operando ocupe un byte o una
de retorno en la palabra de direccin 63, sino en palabra.
la pila, qu modificacin habra que hacer en el
Programa 3.5? Analice las diferencias con el ordenador hipo-
ttico explicado como ejemplo en el Aparta-
6. Suponiendo que Smplez dispone de una instruc- do 4.5, y, en particular, vase cmo se obtie-
cin SKIPZ, reprograme los bucles de espera ac- nen otros modos de direccionamiento cuando
tiva del Apartado 1.12. Ri = R7.
Suponiendo que dispone de las instrucciones
7. Suponga que se modifica la estructura interna de
explicadas en el Apartado 4.7, programe para
Smplez+i4 para que el registro que el programa-
este ordenador una solucin al problema de la
dor conoce como X sea tambin el contador de
suma de cien nmeros (Apartado 1.8), con-
programa. Estudie el efecto que esto tendra so-
siderando primero que esos cien nmeros
bre la ejecucin de instrucciones que especifican
estn en formato de byte y luego que estn en
direccionamiento indexado y las que modifican el
formato de palabra.
valor de X, y cul podra ser la utilidad de esta mo-
dificacin. Haga lo mismo suponiendo, adems, Programe el intercambio de dos zonas de la
que el modo indexado es autoincremento. MP (Apartado 1.9).
164 Leccin 4. Variaciones sobre instrucciones y direccionamientos

MD Modo Direccin efectiva


000 Registro DE = Ri (operando = (Ri))
001 Registro indirecto DE = (Ri) (operando en la MP apuntado por Ri)
010 Autoincremento DE = (Ri), y (Ri)+k Ri
011 Autoincremento indirecto DE = ((Ri)), y (Ri)+2 Ri
100 Autodecremento (Ri)k Ri, y DE = (Ri)
101 Autodecremento indirecto (Ri)2 Ri, y DE = ((Ri))
110 Indexado DE = (CD) + (Ri)
111 Indexado indirecto DE = ((Ri) + (CD)) (preindexacin)

Tabla 4.4 Modos de direccionamiento del PDP-11.

MD Modo Direccin efectiva


00 Literal operando en bits 50
0100 Indexado DE=DIR+k(Ri) (k = 1, 2 o 4)
0101 Registro DE=Ri
0110 Registro indirecto DE=(Ri)
0111 Autodecremento (Ri)k Ri, y DE=(Ri)
1000 Autoincremento DE=(Ri), y (Ri)+k Ri
1001 Autoincremento indirecto DE = ((Ri)), y (Ri)+4 Ri
1010 Desplazamiento (B) DE = (CD)+(Ri)
1011 Desplazamiento indirecto(B) DE = ((CD)+(Ri))
1100 Desplazamiento (W) DE = (CD)+(Ri)
1101 Desplazamiento indirecto(W) DE = ((CD)+(Ri))
1110 Desplazamiento (L) DE = (CD)+(Ri)
1111 Desplazamiento indirecto (L) DE = ((CD)+(Ri))

Tabla 4.5 Modos de direccionamiento del VAX-11.

9. La arquitectura de la serie VAX11, de treinta de traduccin de lenguajes de alto nivel: es muy


y dos bits, desciende de la del PDP11. Com- frecuente la iniciacin de variables con constan-
parando la Tabla 4.5 con la 4.4 puede verse que tes pequeas; si la constante puede representarse
sus modos de direccionamiento incluyen a los del con menos de siete bits, una instruccin con este
PDP-11 (excepto uno, el autodecremento indirec- modo es ms pequea que una instruccin con el
to: la experiencia haba demostrado que rara vez modo inmediato.
se utilizaba). El modo indexado del PDP-11 aqu
se llama desplazamiento, y se escinde en tres La MP es direccionable por bytes, palabras y
(seis, considerando los indirectos), segn la lon- palabras largas, sin restricciones de alineamien-
gitud del campo CD: un byte, una palabra (dieci- to. Tiene una capacidad de direccionamiento de
sis bits) o una palabra larga (treinta y dos bits). 232 bytes = 4 GB. Hay diecisis RPG de treinta y
El nuevo modo indexado se utiliza siempre junto dos bits; R0 a R11 son RPG, R12 y R13 tienen
con alguno de los otros modos (del 0110 al 1111), funciones especiales asociadas a las llamadas a
y tiene utilidad para direccionar arrays: DIR (el subprogramas, R14 es un puntero de pila y R15 es
valor obtenido con el otro modo) contiene la di- el contador de programa. Las instrucciones pue-
reccin de comienzo, y Ri el ndice dentro del den manejar operandos de distinta longitud: byte,
array, cuyos elementos pueden ser bytes (k=1), palabra, y palabra larga, y adems dispone de ins-
palabras (k=2) y palabras largas (k=4). El modo trucciones aritmticas en coma flotante con ope-
literal tambin est motivado por consideraciones randos de cuatro y de ocho bytes (cuyos formatos
pueden verse en la Figura 3.18).
4.14. Ejercicios 165

Todos los operandos pueden direccionarse en la U3, 3 y el de U4, 4. Si para elegir entre ellos inte-
MP por la direccin de su byte menos significati- resa maximizar la relacin velocidad/coste, cul
vo (Figura 3.1(b)). Los formatos de instrucciones sera la eleccin en cada uno de los dos supues-
son similares a los explicados para el ejemplo del tos?
Apartado 4.5, con la diferencia de que la variedad
13. Los dos Ejercicios anteriores ponen de manifiesto
de especificadores de operando es mucho mayor,
que la velocidad medida en MIPS no es adecuada
y pueden tener desde uno hasta diez bytes. El pri-
para comparar entre s a dos UCP. Este otro ser-
mero de esos bytes indica, en sus cuatro bits ms
vir para mostrar no slo que no puede hablarse
significativos, el modo de direccionamiento, y en
de los MIPS de una UCP sino que esa medida
los otros cuatro, una direccin de uno de los die-
puede, incluso, dar una idea equivocada del tiem-
cisis registros.
po real de ejecucin.
Responda a las mismas cuestiones planteadas en
Imagine una UCP con una frecuencia de reloj de
el Ejercicio anterior.
100 MHz que tiene tres tipos de instrucciones:
10. Calcule las velocidades en MIPS de Smplez+i4
cuando ejecuta los Programas 2.1, 2.2 y 2.3. En tipo ciclos por instruccin
los tres casos, considere, para simplificar el clcu- I1 CPI = 1
lo, nicamente las instrucciones que forman el I2 CPI = 2
bucle. Tenga en cuenta que, igual que en Smplez I3 CPI = 3
(Apartado 1.13), todas las instrucciones requie- Por otra parte, tenemos dos compiladores, Ca y
ren, al menos, un ciclo de memoria (200 ns); las Cb , que, traduciendo un mismo programa fuente,
que tienen un operando en memoria, un ciclo adi- nos han generado dos cdigos objeto con distintas
cional para la lectura o escritura de este operando, mezclas de instrucciones para esta UCP. En millo-
y las que tienen direccionamiento indirecto, otro nes de instrucciones a ejecutar, estas mezclas han
ciclo para la lectura del puntero. resultado ser:
11. Imagine que medimos los tiempos de ejecucin, I1 I2 I3
en milisegundos, de cuatro UCP, U1, U2, U3 y Ca 2 4 10
U4, ejecutando dos programas, P1 (que ejecuta Cb 32 30 2
1.000 instrucciones) y P2 (que ejecuta 10.000), y
obtenemos los siguientes resultados: Se trata de averiguar cul de los dos compiladores
est ms optimizado para esta UCP (y este pro-
P1 P2 grama). Para ello, calcule:
U1 1 10 1. La velocidad de la UCP en MIPS en funcin
U2 10 16 del compilador.
U3 1 40 2. El tiempo real de ejecucin de cada uno de los
U4 2 5 programas objetos.
Calcule las velocidades medias, en MIPS, de las 14. Cuando se comparan las velocidades medias (ob-
cuatro UCP, suponiendo: tenidas promediando las velocidades medidas pa-
1. Que la carga de trabajo se distribuye uniforme- ra varios programas) de dos mquinas normali-
mente entre P1 y P2 (es decir, ambos se ejecu- zando estas velocidades a la de una tercera m-
tan el mismo nmero de veces). quina de referencia (como se hace en las defini-
2. Que la carga es tal que de cada diez programas ciones de SPEC), la media debe ser geomtrica,
que se ejecutan uno es P2 y nueve P1. no aritmtica. Para comprender el motivo, tome
de nuevo los datos del Ejercicio 11, y suponga
Puede identificar la ms rpida y la ms lenta de
que se trata de comparar entre s a U3 y U4, to-
las UCP?
mando como referencia en un caso a U1 y a U2
12. Ampliando los datos del Ejercicio anterior, su- en otro. Complete la tabla de la pgina siguiente,
ponga que el coste de U1 es 1, el de U2, 2, el de en la que:
166 Leccin 4. Variaciones sobre instrucciones y direccionamientos

VRij es la velocidad (relativa a la mquina Ui) nidos en las dos primeras. Observando estos cua-
para el programa Pj. tro resultados finales, qu conclusin puede ob-
MaRi es la media aritmtica de las velocidades tenerse con respecto a la utilidad de los dos tipos
(relativas a la mquina Ui). de medias para comparar mquinas?
MgRi es la media geomtrica de las velocida- 15. Generalice los resultados del Ejercicio anterior,
des (relativas a la mquina Ui). sustituyendo los datos del Ejercicio 11 por varia-
bles (t11 : tiempo de ejecucin de P1 en U1, etc.).
U3 U4 Ma4/Ma3 Mg4/Mg3 Qu propiedad tiene la media geomtrica que la
P1 1 2 hace adecuada para esta forma de evaluar presta-
P2 40 5 ciones?
VR11 16. En las UCP de tipo RISC sin encadenamiento
VR12 (Apartado 15.3) el nmero medio de ciclos por
MaR1 instruccin est comprendido entre 1,3 y 1,6, y
MgR1 en los CISC entre 4 y 10. Por otra parte, los pro-
gramas en lenguaje de mquina procedentes de un
VR21 compilador vienen a tener, para el mismo progra-
VR22 ma fuente, entre 20 % y 40 % ms instrucciones
MaR2 en un RISC que en un CISC. Admitiendo estos
MgR2 datos, calcule los valores extremos de la relacin
Velocidad RISC/Velocidad CISC (suponiendo
Los cuatro espacios a rellenar en las dos ltimas que la frecuencia de reloj es la misma en ambos
columnas son los cocientes de los nmeros obte- procesadores).

Você também pode gostar