Documentos de Académico
Documentos de Profesional
Documentos de Cultura
131
132 Leccin 4. Variaciones sobre instrucciones y direccionamientos
(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
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
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
puntero
operando
registro de ndice
MD DE
operando
CO I=1 CD
J=1 +
Relativo a programa
En el modo relativo a programa DR = (CP). Es (a) (CD)>0
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
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
CD
15 0
Figura 4.8 Registros de base y de lmite.
+ registro de segmento 0 0 0 0
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
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
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 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
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
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
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
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...).
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
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).