You are on page 1of 30

Leccin 3

Variaciones sobre representacin y


procesamiento

3.1. Propsito

da mquina particular para escribir programas que


realicen operaciones bsicas de procesamiento, o
que establezcan comunicaciones entre mquinas
distintas. Pero, salvo en algunos de los ejercicios propuestos, no daremos detalles de ninguna
mquina real, ya que nuestro propsito es, como
siempre, que el lector adquiera los conceptos bsicos en los que enmarcar las particularidades de los
casos reales.
Aqu nos centramos en la representacin y los
convenios de almacenamiento en la MP y en los
registros de la UCP. La organizacin del almacenamiento de datos en memorias secundarias se tratar en la Leccin 5.
Relegamos al Apndice A los sistemas de numeracin y la codificacin de caracteres, as como los algoritmos bsicos de procesamiento numrico. Usaremos los prefijos B, D, Q o
H, con un apstrofo, para indicar, respectivamente, que un nmero es binario, decimal, octal
o hexadecimal. D es optativo: si un nmero no
lleva prefijo se supone que es decimal. Por ejemplo, B101 = 22 + 1 = 5; Q101 = 82 + 1 = 65;
H101 = 162 + 1 = 257.

En las dos Lecciones anteriores hemos introducido las ideas esenciales del nivel de mquina convencional siguiendo la propuesta de von Neumann
y los modelos concretos de Smplez y Smplez+i4.
Entre otras grandes simplificaciones, los datos numricos representables en estas mquinas estn
muy limitados: nmeros enteros comprendidos entre 0 y 4.095. En esta Leccin presentaremos los
formatos y los convenios que suelen adoptarse para representar en los ordenadores, en el nivel de
mquina convencional, los datos numricos y simblicos (cadenas de caracteres), as como los tipos
de operaciones de procesamiento que pueden llevarse a cabo sobre esos datos. Tambin generalizaremos la idea del procesamiento de interrupciones
introducida con Smplez+i4. Por ltimo, haremos
una introduccin al procesamiento simblico, con
el que se construyen los sistemas del nivel de mquina simblica, incluyendo los procesos de traduccin, montaje y carga de programas.
Hay una gran variedad de formatos y de convenios. Es importante conocer los detalles de ca101

102

Leccin 3. Variaciones sobre representacin y procesamiento

3.2. Memoria principal y registros


Antes de entrar en los convenios sobre la representacin binaria de los datos conviene tener presentes algunas caractersticas de los contenedores de esos datos: la MP y los registros.

dir. byte
0
1
2

palabra de direccin 0
palabra de direccin 2

16
17

palabra de direccin 16

Bits, bytes y palabras


Sabemos (Apartado 0.8) que la unidad elemental de almacenamiento de la informacin es el bit.
Tambin, que en cada acceso a la MP se lee o se
escribe un conjunto de bits llamado palabra. En
Smplez y Smplez+i4 la longitud de la palabra es
de doce bits. Pero, generalmente, los bits se agrupan en conjuntos de ocho, y a uno de estos conjuntos se le llama octeto, o, ms habitualmente, byte.
La longitud de la palabra suele ser de uno, dos,
cuatro u ocho bytes (8, 16, 32 o 64 bits), y es igual
al nmero de lneas del bus de datos (bus D). A
veces hay que referirse a grupos de cuatro bits, o
cuartetos.
La capacidad de las memorias se mide en bytes,
y normalmente es de varios millones (o miles de
millones, en el caso de las memorias secundarias).
Por esta razn, se utilizan los factores multiplicativos kilo, mega, etc. Pero hay que tener en
cuenta que un kilobyte (abreviadamente, 1 KB)
no equivale a 1.000 bytes, sino a 210 = 1.024 bytes1 . Del mismo modo, un megabyte (1 MB) es
1.024 KB = 1.048.576 bytes. Las memorias secundarias suelen tener capacidades de gigabytes
(1 GB = 1.024 MB = 230 B), y para medir grandes
volmenes de datos se utilizan el terabyte (1 TB
= 240 B), el petabyte (1 PB = 250 B), el exabyte (1 EB=260 B), el zettabyte (1 ZB = 270 B) y el
yottabyte (1 YB = 280 B).
1

Esto quebranta el uso estndar de los prefijos en el


Sistema Internacional, por lo que algunas organizaciones
de normalizacin han propuesto la introduccin de nuevos
prefijos: Ki (kibi, por kilobinary), Mi (mebi, por megabinary), etc., para referirse a 210 , 220 , etc. Esta propuesta,
que data de 1998, y que puede consultarse en la direccin
ttsssttsrt,
ha tenido un seguimiento prcticamente nulo.

(a) palabras con direccin siempre par


dir. byte
0
1
2

palabra 0
palabra 1

doble
palabra 0

palabra 2

17
18

palabra 17

27
28

palabra 27
palabra 28

29
30

doble
palabra 27

palabra 29

(b) palabras, y dobles palabras,


con direcciones arbitrarias

Figura 3.1

Direcciones alineadas y no alineadas.

Direcciones de la MP
Aunque la longitud de palabra sea de varios bytes, la memoria principal normalmente es direccionable por bytes, palabras, dobles palabras, etc.
Cuando inicia una operacin de acceso, la UCP
pone una direccin en el bus de direcciones y le
comunica a la MP, mediante seales de control, si
quiere leer (o escribir) un byte, o una palabra, etc.
En algunas UCP de diecisis bits es obligatorio
que las palabras tengan siempre direccin par, como indica la Figura 3.1(a), y las dobles palabras
mltiplo de cuatro. Se dice que las direcciones deben estar alineadas. En otras, esta limitacin no

3.2.

103

Memoria principal y registros

existe: una palabra, doble palabra, etc. puede empezar en cualquier direccin, par o impar (Figura 3.1(b)). En las UCP de treinta y dos bits un conjunto de dos bytes se llama media palabra; si las
direcciones son alineadas, las direcciones de medias palabras deben ser pares, las de palabra, mltiplos de cuatro y las de doble palabra mltiplos de
ocho2 .

Registros
En Smplez+i4 hemos visto que el programador
poda hacer uso de dos registros: un acumulador
(para operaciones aritmticas y para intercambio
de datos entre la UCP y la MP y los perifricos) y
un registro de ndice (en principio, para direccionar operandos, aunque, como mostraban algunos
ejemplos, puede tambin utilizarse con las mismas
funciones que el acumulador).
Smplez y Smplez+i4 tienen otros registros que
son transparentes al programador, como veremos al estudiar la microarquitectura. Entre ellos
est el contador de programa, CP, un registro de
nueve bits en Smplez y de doce en Smplez+i4
que contiene siempre la direccin de la siguiente
instruccin a ejecutar (Figura 3.2). Pero en algunas UCP el contador de programa no es un registro
transparente al programador (en el nivel de mquina convencional), ya que ste puede hacer uso de
l. Estudiaremos cmo lo puede hacer y para qu
puede servir al final del Apartado 4.5 y, con ms
detalle, en la Leccin 6.
Actualmente, las UCP tienen muchos otros registros visibles para el programador:

MP

UCP

instruccin en curso

AC
UAL

CP

instruccin siguiente

Figura 3.2. El contador de programa en Smplez y en


Smplez+i4.

contener datos. Como veremos en la Leccin siguiente, las instrucciones aritmticas suelen operar con los contenidos de dos de estos registros,
dejando el resultado en un tercero. De este modo se reducen los accesos a la MP y se acelera la
ejecucin de los programas: es mucho ms rpido
acceder a los registros que a la MP.

Registros de direccionamiento
El tener ms de un registro de ndice facilita
la programacin (es posible que el lector lo haya
pensado si ha trabajado sobre los ejercicios propuestos en la Leccin 2). Pero hay otros modos de
direccionamiento (los estudiaremos en el Apartado 4.5) que implican la existencia de otros registros, entre ellos el contador de programa, del que
ya hemos hablado, o registros de base, de segmento y punteros de pila.

Registros de propsito general


Registros aritmticos
La idea de un registro acumulador ha quedado obsoleta: las UCP disponen de varios registros
(8, 16, 32, e incluso muchos ms) previstos para
2

En estas mquinas, el intento de ejecutar una instruccin


con una direccin de palabra no alineada produce una interrupcin interna (vase, por ejemplo, la Tabla 8.14).

En la mayora de las UCP se pone a disposicin


del programador un conjunto de registros que ste
puede utilizar indistintamente como registros aritmticos o para direccionamiento; se les llama registros de propsito general (RPG). Normalmente
estn dispuestos como una memoria local que se
direcciona con un campo del formato de instrucciones.

104

Leccin 3. Variaciones sobre representacin y procesamiento

Registro de estado
El registro de estado es prcticamente imprescindible. En Smplez y Smplez+i4, para simplificar, hemos prescindido de l, lo que conduca a
un problema de difcil resolucin: cmo guardar el
valor del indicador de cero (Z) al pasar a atender
a una interrupcin (Apartado 2.9). Normalmente
hay cuatro indicadores de un bit asociados a la
UAL3 :
Indicador de cero, Z: se pone a 1 si el resultado de la operacin es cero (ste es el nico
que tienen Smplez y Smplez+i4).
Indicador de negativo, N: se pone a 1 o a 0
segn que el resultado de la operacin sea negativo o no.
Indicador de desbordamiento, V: se pone a 1
si se ha producido desbordamiento en una operacin aritmtica.
Indicador de acarreo, C: se pone a 1 si la suma o la resta de los operandos generan un acarreo.
Adems de Z, N, V y C, el registro de estado
contiene otros indicadores que deben guardarse y
restaurarse en el procesamiento de interrupciones:
el de modo (usuario/supervisor, Apartado 4.2), el
de permiso de interrupciones, etc.

3.3. Representacin de los tipos elementales de datos


Los tipos elementales de datos son los caracteres (letras, dgitos y otros smbolos bsicos),
las direcciones de la MP, los nmeros enteros y
los nmeros reales. Los tipos compuestos (registros, listas, ficheros, etc.) se definen mediante
software, por lo que estn ms relacionados con el

nivel de mquina simblica; los trataremos someramente en el Apartado 22.9.

Caracteres
La representacin de informacin simblica en
el nivel de mquina convencional se reduce a la representacin de cadenas de caracteres, sin ningn
significado asociado, y, en consecuencia, es fcil:
basta con convenir un cdigo, que asigna a cada
carcter un conjunto de bits. En la Leccin 1 hicimos ya mencin de estos cdigos, al referirnos a
las comunicaciones de la UCP con los perifricos
(Apartados 1.2 y 1.12).
El ASCII es una norma (ISO 646) universalmente adoptada desde hace aos para representacin de caracteres con siete bits. Las treinta y dos
primeras codificaciones y la ltima no representan
caracteres visibles, sino acciones de control. Por
tanto, quedan 27 33 = 95 configuraciones binarias con las que se codifican los dgitos decimales, las letras maysculas y minsculas y algunos
caracteres comunes (espacio en blanco, ., +,
, <, etc.), pero no letras con tilde, ni otros
smbolos como , , etc. Aadiendo un bit (es
decir, utilizando un byte para cada carcter) resultan ciento veintiocho nuevas configuraciones. Hay
unas normas internacionales para esta ampliacin4
del ASCII, las ISO 8859-X. X es un nmero
comprendido entre 1 y 15: las normas definen distintos juegos de caracteres, para abarcar todas las
lenguas. La adecuada para Europa occidental y
Amrica es la ISO 8859-1, tambin conocida como ISO Latin1, o, ms reciente, la ISO 8859-15, o
ISO Latin9, que se reproduce en el Apndice A.
La norma ISO 10646, o UCS (Universal Character Set), ms conocida como Unicode, pretende
evitar esta diversidad, con un cdigo nico para
todos los caracteres de todas las lenguas (Apndice A).

Algunas UCP no tienen estos indicadores. Su funcin


(permitir transferencias de control condicionadas) se realiza
mediante instrucciones de bifurcacin condicionadas al resultado de la comparacin de los contenidos de dos registros
(bifurca si igual, bifurca si mayor, etc.)

Ampliacin quiere decir que el nuevo cdigo es igual


que el ASCII para codificaciones inferiores a H80 (es decir,
con el bit ms significativo a cero), y define nuevos caracteres
codificados entre H80 y HFF.

3.3.

As pues, cada carcter se representa en un byte, y una cadena de n caracteres, en n bytes. Pero,
en qu orden? Por ejemplo, cmo almacenamos
la cadena Cdigo Latin1. en bytes sucesivos de
una memoria?. En total, contando el espacio en
blanco, son catorce caracteres, por lo que ocuparn una zona de catorce bytes. Si esta zona empieza en la direccin d, un posible arreglo es guardar
la codificacin de C (B01000011 = H43)5 en
el byte de direccin d, la de (B11110011 =
HF3) en d + 1, etc., es decir:
Dir.
d
d+1
d+2
d+3
d+4
d+5
d+6

Cont.
43
F3
64
69
67
6F
20

( )
( )
( )
( )
( )
( )
( )

Dir.
d+7
d+8
d+9
d + 10
d + 11
d + 12
d + 13

Cont.
4C
61
74
69
6E
31
2E

()
( )
( t)
( )
()
( )
()

Pero igualmente podramos convenir en almacenar


C en la direccin d + 13 y seguir hacia arriba.
Es una cuestin de convenios aparentemente trivial. De hecho, en el nivel de mquina simblica ni
se plantea: los lenguajes de alto nivel facilitan un
tipo de datos, normalmente llamado string, y el
compilador se encarga de su representacin interna y del orden de almacenamiento. Sin embargo,
es importante tenerla en cuenta para las comunicaciones entre ordenadores. Volveremos sobre esto
en el siguiente Apartado.

Direcciones de la MP
Las direcciones de la MP corresponden al tipo
de datos puntero de los lenguajes de alto nivel.
Son nmeros enteros comprendidos entre 0 y M ,
donde M = 2n 1, y n es el nmero de bits necesarios para direccionar la MP. Por tanto, se representan igual que los nmeros enteros (que trataremos a continuacin) pero siempre en binario,
y, naturalmente, sin signo.
5

105

Representacin de los tipos elementales de datos

Las codificaciones pueden comprobarse en las Tablas A.2 y A.3 del Apndice A.

Nmeros enteros
Para representar un nmero natural lo ms natural es tomar los bits de su expresin en binario, fijando una determinada cantidad de bits, la
misma para todos los nmeros. Esta cantidad puede coincidir con la longitud de la palabra, o ser
un mltiplo de ella, si la longitud es insuficiente para representar toda la extensin de valores
requeridos. Es obvio que slo puede representarse un subconjunto finito, tanto mayor cuanto ms
bits se hayan fijado: con dos bits hay cuatro configuraciones (00, 01, 10, 11), por lo que slo podemos representar cuatro nmeros; con tres bits,
ocho configuraciones (000, 001, ..., 111), y, en general, con n bits tendremos (aplicando la combinatoria) VR2,n = 2n configuraciones.
Para poder representar tanto enteros positivos
como negativos se hace una particin equitativa
del conjunto de todas las posibles configuraciones
de bits. El convenio unnimemente seguido es reservar un bit, el primero por la izquierda (el ms
significativo), para dar la informacin sobre el
signo: 0 para los positivos y 1 para los negativos.
A ese bit se le llama bit de signo.
El resto de los bits contiene la informacin sobre el valor absoluto del nmero. El primero de la
derecha es el bit de peso 0, o bit menos significativo, y en adelante lo abreviaremos como bms. La
Figura 3.3 ilustra este convenio para el caso particular de n = 16. Los nmeros que aparecen sobre el rectngulo coinciden con los pesos que stos
tienen en el sistema de numeracin binario, salvo
para el bit ms significativo, bMs (llamado N en
la Figura 3.3), que da la informacin sobre el signo: si bMs = 1, el nmero es negativo.
15

b
m
s

Figura 3.3

Formato de coma fija de diecisis bits.

As pues, un nmero positivo se representar


con 0 en el bit de signo y la informacin sobre
su magnitud en los n 1 bits restantes. Para los

106

Leccin 3. Variaciones sobre representacin y procesamiento

nmeros
positivos

nmeros
negativos

configuraciones
binarias
0000...0000
0000...0001
...
0111...1110
0111...1111
1000...0000
1000...0001
...
1111...1110
1111...1111
Tabla 3.1

interpretaciones decimales
signo y magnitud complemento a 1 complemento a 2
0
0
0
1
1
1
...
...
...
2n1 2
2n1 2
2n1 2
2n1 1
2n1 1
2n1 1
0
(2n1 1)
(2n1 )
n1
1
(2
2)
(2n1 1)
...
...
...
(2n1 2)
1
2
(2n1 1)
0
1

Comparacin de convenios para formatos de coma fija.

nmeros negativos, aparte de tener 1 en el bit de


signo, puede seguirse uno de estos tres convenios:
signo y magnitud (o signo y mdulo): se representa el valor absoluto;
complemento a 1, que consiste en cambiar los
ceros por unos y los unos por ceros
en la representacin binaria del correspondiente nmero positivo;
complemento a 2, que se obtiene sumando una
unidad al complemento a 1.
Por ejemplo, el nmero 58 = H3A =
B111010, en el formato de la Figura 3.3, y segn el convenio que se adopte, dara lugar a las
siguientes representaciones:
con signo y mdulo: 1000000000111010
con complemento a 1: 1111111111000101
con complemento a 2: 1111111111000110
Es fcil comprobar que si A es la representacin
de un nmero con n bits, incluido el de signo, y si
C1 y C2 son respectivamente las representaciones
en complemento a 1 y complemento a 2 del mismo
nmero cambiado de signo, entonces A + C1 =
2n 1, y A + C2 = 2n .6
La Tabla 3.1 muestra una comparacin de los
tres convenios para n bits. Puede observarse que
6

Por tanto, en rigor, lo que habitualmente llamamos


complemento a 2 es complemento a 2n (y complemento a 1 es complemento a 2n 1).

en signo y magnitud y en complemento a 1 existen dos representaciones para el nmero 0, mientras que en complemento a 2 la representacin es
nica (y hay un nmero negativo ms, cuyo valor
absoluto no puede representarse con n bits). Asimismo, que la extensin de la representacin (diferencia entre el nmero mximo y el mnimo representables) es una funcin exponencial de n 1.
La eleccin de un convenio u otro afecta al diseo de la UAL. Es ms frecuente utilizar un convenio de complemento, porque los circuitos de una
UAL para sumar y restar con nmeros positivos y
negativos resultan ser ms sencillos (pero ste es
ya un asunto propio del nivel de circuito lgico).
El nmero de bits, junto con el convenio adoptado, determinan el formato de coma fija del ordenador. Generalmente, la UCP contempla varios
formatos de distinta longitud para que el programador pueda hacer uso del que ms le interese, en
funcin de la extensin de la representacin que
necesite. Dicho de otro modo, existen (como veremos en el Apartado 4.7) varias instrucciones de
suma, varias de resta, etc., unas para operar con
bytes, otras para operandos de diecisis bits, etc.
Representacin en BCD
Si se adopta la representacin interna con el sistema de numeracin binario y todas las operaciones aritmticas se realizan en binario, entonces es

3.3.

107

Representacin de los tipos elementales de datos

preciso hacer la conversin del sistema decimal al


binario cada vez que se introduce un dato en el ordenador, y a la inversa. Esto es conveniente si el
volumen de clculos a realizar es muy superior al
de las operaciones de entrada y salida; pero si stas
son muy frecuentes, y los clculos son reducidos,
entonces interesa ms tener los nmeros representados en decimal (con un cdigo BCD, vase el
Apartado A.1) y realizar las operaciones aritmticas en decimal.
Si la codificacin de cada dgito decimal ocupa cuatro bits (un cuarteto), la representacin (sin
signo) de un nmero de n dgitos ocupar n cuartetos, es decir, n/2 bytes. Esta representacin se
llama empaquetada: cada byte contiene un paquete de dos dgitos. Como ya hemos visto en el
Apartado 1.12, en las transferencias entre la UCP
y los perifricos los dgitos decimales (como los
otros caracteres) estn codificados con ocho bits
(con un cdigo ISO, que coincide con ASCII con
un cero a la izquierda), y la conversin entre este
cdigo y BCD es muy fcil: como puede verse en
la Tabla A.2, ASCII(n) = BCD(n) + 48. Un programa que lea sucesivamente dgitos del teclado
puede ir haciendo esta conversin sobre la marcha, y guardando en la MP las codificaciones en
BCD, en bytes sucesivos. Resulta as una representacin en la que cada dgito ocupa un byte, que
se llama decimal desempaquetado, que ocupa el
doble de bits que la versin empaquetada. La Figura 3.4 muestra un ejemplo.
15

1001 1000 0111 0110


decimal empaquetado
31

0000 1001 0000 1000 0000 0111 0000 0110


decimal desempaquetado

Figura 3.4

Representacin en BCD de D9.876.

Para representar nmeros negativos se puede reservar un bit, o, ms frecuentemente, un cuarteto,


o, a veces, un byte (Ejercicio 6) para el signo. Hay
convenios de signo y magnitud, y tambin de com-

plemento a 9 y complemento a 10, similares a los


complementos a 1 y a 2. Par ms detalles vase el
Apndice A.

Nmeros reales
Para la representacin de nmeros reales con
una cantidad finita de bits hemos de tener en cuenta que no slo habr una extensin finita (un nmero mximo y un nmero mnimo), sino tambin
una resolucin (diferencia entre dos representaciones consecutivas) finita, es decir, hay que hacer
una discretizacin del espacio continuo de los nmeros reales.
En principio, con un formato de coma fija pueden representarse tambin nmeros reales: basta
con aadir el convenio sobre dnde est la coma. Si, por ejemplo, tenemos una longitud de 32
bits, podramos convenir que los 16 primeros representan la parte entera y los 16 siguientes la parte fraccionaria. Pero la rigidez que resulta es evidente: para conseguir la mxima extensin, el programador tendra que poder decidir dnde se encuentra la coma, en funcin de que est trabajando
con nmeros muy grandes o muy pequeos. Aun
as, la extensin que se consigue puede ser insuficiente: con 32 bits, el nmero mximo representable (todos unos y la coma a la derecha del todo)
sera 231 1 2 109 , y el mnimo positivo (coma a la izquierda y todos ceros salvo el bms)
sera 231 2 1010
Por esto, lo ms comn es utilizar un formato
llamado de coma flotante, mucho ms flexible,
con ms extensin, y que libera al programador de
la necesidad de conocer en todo momento el orden
de magnitud de los datos. Consiste en representar
los nmeros dando tres informaciones, que se codifican en tres campos (grupos de bits) independientes: N (signo del nmero, 1 bit), M (mantisa,
m bits) y E (exponente de una base, b, implcita
en el convenio, e bits), de modo que el nmero X
representado sea:
X(b) = M(b) bE

108

Leccin 3. Variaciones sobre representacin y procesamiento

As, tendremos menos bits significativos (debido a


los e bits reservados para el exponente), pero con
el factor de escala bE podemos conseguir una extensin grande.
Como ejemplo, la Figura 3.5 presenta un formato tpico con 32 bits, de los que uno es para el signo
(N ), e = 7 para el exponente (este campo se llama
C en la figura por el motivo que ahora veremos)
y m = 24 para la mantisa (M ). La extensin de
E, como tiene siete bits, es de 0 a 27 1 = 127, o,
con un convenio adecuado para representar negativos (por ejemplo, dejar uno de los siete bits para
el signo, y el resto en complemento a 2), de 64 a
63. Si b = 2, resulta que el factor de escala puede
variar entre 264 5 1020 y 263 1019 .
Sobre esta idea general existen numerosas variantes que resumimos a continuacin.
Base del convenio
La base implcita suele ser 2 o (ms raramente,
vase el Ejercicio 7) 16, pero podra ser otra cualquiera. Por ejemplo, si fuese b = 10 tendramos
un formato BCD (puesto que los dgitos decimales
de M se representarn internamente en binario) en
coma flotante.
Representacin de la mantisa
Naturalmente, los dgitos en base b de M se representarn siempre internamente en binario. As,
si X = D0,7 tendremos:
Con b = 2: D0,7 = H0,B33... =
B0,101100110011...20
Con b = 16: D0,7= H0,B33...160
(la mantisa se representara igual que en el caso
anterior)
Con b = 10: D0,7 = D0,7100
y la mantisa sera 0,0111, puesto que el cdigo
BCD de 7 es 0111.
En principio, la representacin mediante una
mantisa y un exponente de una base implcita por
convenio no es nica, puesto que si se incrementa
o se decrementa E en n unidades, entonces se tiene el mismo nmero desplazando la coma en M

31

23

b
m
s

Figura 3.5. Formato de coma flotante con n = 32 bits.

n lugares a la izquierda o a la derecha, respectivamente. En cualquier caso, interesa, para que la


resolucin sea mxima, que M contenga el mayor nmero de dgitos significativos, lo que ocurre cuando el primer dgito de M por la izquierda
no es nulo; se dice entonces que la representacin
est normalizada. Y para que la representacin,
adems de normalizada, sea nica, se fija por convenio la posicin de la coma; los criterios que generalmente se siguen son:
Normalizacin entera, o coma a la derecha:
M representa un nmero entero.
Normalizacin fraccionaria, o coma a la izquierda: M representa un nmero menor que
la unidad, es decir, la coma est a la izquierda.
Si b = 2, D0,5 M < 1, puesto que el primer
bit de M tiene que ser 1 (a veces, como veremos luego en el formato IEEE 754, se omite
la representacin explcita de ese bit).
El nmero 0 no se puede normalizar. Se conviene en representarlo por todos los bits del formato nulos.
Veamos un ejemplo. Supongamos que b = 16,
que se dispone de 24 bits para la mantisa (24/4 = 6
dgitos hexadecimales), y que se trata de representar el nmero :
X = = D3,1415926...= H3,243F69A...
Consideremos primero el caso de normalizacin
entera; tendramos las siguientes posibilidades:
M
000003
000032
000324
003243
03243F
3243F6

E
0
-1
-2
-3
-4
-5

Nmero representado
H3160 = H3 = 3
H32161 = H3,2 = 3,125
H324162 = H3,24 = 3,140625
H3243163 = H3,243 = 3,1413574
H3243F164 = H3,243F = 3,1415863
H3243F6165 = H3,243F6 = 3,141592

La ltima es la representacin normalizada; es la


que tiene ms dgitos significativos, y, por tanto,
mayor precisin.

3.3.

109

Representacin de los tipos elementales de datos

Con normalizacin fraccionaria:


M
E Nmero representado
000003 6 H0,000003166 = H3 = 3
000032 5 H0,000032165 = H3,2 = 3,125
...
... ...
3243F6 1 H0,3243F6161 = H3,243F6 = 3,141592

y, como antes, la ltima es la representacin normalizada.


Representacin de nmeros negativos
Como en el caso de coma fija, un bit, normalmente el primero de la izquierda, indica, si es 0,
que el nmero es positivo, y si es 1, que es negativo. Se pueden seguir tambin los convenios de
signo y magnitud, complemento a 1 o complemento a 2. En los dos ltimos casos puede convenirse
en complementar slo los bits reservados para la
mantisa (esto es lo ms frecuente), o todos.
Representacin del exponente
En los e bits reservados para el exponente puede
seguirse tambin el convenio de reservar uno para
el signo y los e 1 restantes para el mdulo, o el
complemento a 1 o a 2 si E < 0. Pero el convenio
ms utilizado no es ste, sino el de la representacin en exceso de 2e1 : el nmero almacenado en
esos e bits, llamado caracterstica, es:
C = E + 2e1
Dado que 0 C 2e 1, los valores representables de E estarn comprendidos entre 2e1
(para C = 0) y 2e1 1 (para C = 2e 1).
Como ejemplo, veamos la representacin del
nmero en el formato de la Figura 3.5, suponiendo que el exponente est en exceso de
64 con base 16 y que la mantisa tiene normalizacin fraccionaria. De acuerdo con lo que hemos explicado antes, la mantisa ser H3243F6 =
B001100100100001111110110. Para la caracterstica tendremos: C = 1 + 64 = 65 = H41 =
B1000001, y la representacin resulta ser:
0 1000001 0011 0010 0100 0011 1111 0110
Obsrvese que, al ser la base 16, la mantisa est
normalizada en hexadecimal, pero no en binario,

ni lo puede estar en este caso, porque cada incremento o decremento de E corresponde a un desplazamiento de cuatro bits en M .
Si cambiamos uno de los elementos del convenio, la base, y suponemos ahora que es 2, al normalizar la mantisa resulta:
H3,243F6A... =
B11,001001000011111101101010... =
B0,11001001000011111101101010...22
La caracterstica es ahora C = 2 + 64. Truncando a 24 los bits de la mantisa obtenemos:
0 1000010 1100 1001 0000 1111 1101 1010
Vemos que al normalizar en binario ganamos dos
dgitos significativos en la mantisa.
El mismo nmero pero negativo (), con convenio de complemento a 2, se representara en el
primer caso (b = 16) como:
1 1000001 1100 1101 1011 1100 0000 1010
y en el segundo (b = 2):
1 1000010 0011 0110 1111 0000 0010 0110
El inconveniente de la base 16 es que la mantisa no siempre se puede normalizar en binario, y
esto tiene dos consecuencias: por una parte, como
hemos visto, pueden perderse algunos bits (1, 2
o 3) con respecto a la representacin con base 2;
por otra, hace algo ms compleja la realizacin de
operaciones aritmticas. La ventaja es que, con el
mismo nmero de bits reservados para el exponente, la escala de nmeros representables es mayor.
Concretamente, para e = 7 el factor de escala, con
b = 2, va, como vimos ms arriba, de 264 a 263
(o, aproximadamente, de 5 1020 a 1019 ), mientras que con b = 16 va de 1664 a 1663 (aproximadamente, de 1077 a 1076 ).
Formatos IEEE 754
Con los objetivos de facilitar la portabilidad7
de los programas para aplicaciones de clculo numrico y de potenciar la calidad del software diseado para estas aplicaciones, el I.E.E.E. propuso una norma para representacin de nmeros en
coma flotante, la IEEE 754, que ha sido adoptada
7

Es decir, que sirvan para distintas mquinas.

110

Leccin 3. Variaciones sobre representacin y procesamiento

por la mayora de los fabricantes de hardware y de


software. La norma define los formatos, las operaciones aritmticas y el tratamiento de lo que se
llaman excepciones (desbordamiento, divisin
por cero, etc.). Aqu slo nos ocuparemos de los
formatos, que son los esquematizados en la Figura 3.6.8
Los convenios de la norma IEEE 754 son:

31 30

23 22

(a) precisin sencilla


63 62

52 51

(b) precisin doble

Figura 3.6

Formatos de la norma IEEE 754.

Nmeros negativos: signo y magnitud.


Mantisa: normalizacin fraccionaria.
Base implcita: 2.
Exponente: en exceso de 2e1 1
Como la mantisa tiene normalizacin fraccionaria y los nmeros negativos se representan con signo y magnitud, el primer bit de la mantisa siempre
sera 1, lo que permite prescindir de l en la representacin y ganar as un bit. La coma se supone
inmediatamente a la derecha de ese 1 implcito,
por lo que, dada una mantisa M y un exponente
E, el nmero representado es (1, M ) 2E .
El exponente, E, se representa en exceso de
e1
2
1 (no en exceso de 2e1 ). La extensin de
E en el formato de 32 bits, que tiene e = 8, resulta
ser: 127 E 128, y en el de 64 bits (e = 11):
1.023 E 1.024. Pero los valores extremos
de C (todos ceros o todos unos) se reservan para
representar casos especiales, como ahora veremos.
Esto nos da, en definitiva, un factor de escala que
va de 2126 a 2127 en el formato de 32 bits y de
21,022 a 21,023 en el de 64.
Resumiendo, dados unos valores de M y C, el
nmero representado, X, si se trata del formato de
precisin sencilla (Figura 3.6(a)), es el siguiente:
1. Si 0 < C < 255, X = (1, M ) 2C127
2. Si C = 0 y M = 0, X = 0
3. Si C = 0 y M = 0, X = 0, M 2126
(nmeros ms pequeos que el mnimo representable en forma normalizada)
8

La norma contempla otros dos formatos, que son versiones extendidas de stos: la mantisa ocupa una palabra completa (32 o 64 bits) y la caracterstica tiene 10 o 14 bits. Pero
los de la Figura 3.6 son los ms utilizados.

4. Si C = 255 y M = 0, X =
(el formato prev una representacin especfica
para el infinito)
5. Si C = 255 y M = 0, X = NaN
(NaN significa no es un nmero; aqu se
representan resultados de operaciones como
0/0, 0 , etc.)
Y en el formato de precisin doble (Figura 3.6(b)):
1. Si 0 < C < 2.047, X = (1, M ) 2C1.023
2. Si C = 0 y M = 0, X = 0
3. Si C = 0 y M = 0, X = 0, M 21.022
4. Si C = 2.047 y M = 0, X =
5. Si C = 2.047 y M = 0, X = NaN

Distincin entre tipos de datos


En cierto sentido, se puede decir que la UCP
distingue entre dos tipos de datos si la UAL
tiene operaciones previstas para ambos tipos (por
ejemplo, suma con coma fija y suma con coma flotante). Pero normalmente el contenido de una palabra no tiene por s mismo ningn significado: es
un conjunto ordenado de bits que la UCP puede
interpretar como una direccin, como una instruccin o como un dato de un tipo u otro. Y as, como
hemos visto en la Leccin 1, un mismo contenido
puede interpretarse unas veces como instruccin
y otras como dato. Del mismo modo, es responsabilidad del programador no cometer el error de
utilizar, por ejemplo, una instruccin de suma en
coma flotante sobre operandos que se supone representan a los datos en coma fija.

Convenios sobre el orden de almacenamiento

111

Ahora bien, algunos ordenadores tienen formatos de representacin en los que se destinan algunos bits de indicacin, o etiqueta, que dan informacin sobre el tipo de informacin que contienen los restantes. Por ejemplo, con una longitud
de palabra de treinta y dos bits, pueden reservarse
dos bits que indiquen que los otros treinta corresponden a una instruccin, a un nmero en coma
fija, a un nmero en coma flotante o a otra cosa.
En la ejecucin de las instrucciones, la UCP tiene en cuenta si el tipo de dato se ajusta o no a la
operacin y pone a cero o a uno un bit de estado. As, para la instruccin sumar en coma fija,
el bit se pondr a cero si ambos operandos tienen
su etiqueta con el valor correspondiente a la informacin de coma fija, y se pondr a uno si alguno
de ellos corresponde a otra cosa. En el programa
puede incluirse a continuacin una instruccin de
bifurcacin condicionada a ese bit.
Es inmediato comprender que esta nueva caracterstica puede servir para detectar errores de programacin. Pero su incorporacin en el diseo de
un ordenador generalmente se hace con una intencin ms profunda: en algunos lenguajes de alto
nivel se permite que el tipo de algunos datos se
defina durante la ejecucin (es lo que se llama tipificacin dinmica), y esta caracterstica resulta
muy til para el diseo de los programas procesadores (compiladores o intrpretes, Apartados 3.7
y 22.3) de esos lenguajes.

venir en poner los ocho bits menos significativos


en la direccin ms baja (convenio que vamos a
llamar extremista menor) o en la ms alta (convenio extremista mayor).

3.4.

Extremistas menores y mayores


La distintas posibilidades sobre el convenio empiezan ya al atribuir nmeros a los bits que constituyen un byte o una palabra. En muchos textos
(ste incluido) y manuales de ordenadores se numeran de derecha a izquierda, llamando 0 al
bit menos significativo (bms), como en las Figuras 1.4, 2.2, 3.3 y 3.7(a), pero otros proceden al revs, llamando 0 (o, a veces, 1) al bit ms significativo (bMs), como indica la Figura 3.7(b) para el caso de un byte. Los que optan por el primer
convenio son extremistas menores: empiezan a
numerar por el extremo menor (bit menos significativo). Anlogamente, los seguidores del segundo convenio son extremistas mayores.
7
b
M
s

(a) convenio
"extremista menor"
0
b
M
s

Al hablar de la representacin de caracteres nos


plantebamos la cuestin del convenio sobre el orden de almacenamiento en la memoria de los bytes que forman una cadena. Pero la misma cuestin puede plantarse sobre los dems tipos de datos. Por ejemplo, si la UCP genera direcciones de
32 bits, los punteros son tambin de 32 bits, cuatro bytes. Cmo almacenamos un puntero en la
MP, en las direcciones d a d + 4? Podemos con-

7
b
m
s

(b) convenio
"extremista mayor"

Figura 3.7

3.4. Convenios sobre el orden de almacenamiento

0
b
m
s

Numeracin de los bits de un byte.

El convenio extremista menor tiene la particularidad de que el nmero atribuido a cada posicin
coincide con el peso de esa posicin cuando se interpreta la configuracin de bits como un nmero
binario.
Si se ha de escribir en horizontal una secuencia de bytes, lo razonable es numerarlos de manera
consistente con el convenio seguido para numerar
los bits, y lo mismo si escribimos una secuencia de
palabras. As, para una secuencia de palabras de
diecisis bits (dos bytes), las numeraciones extremista menor y extremista mayor seran las

112

Leccin 3. Variaciones sobre representacin y procesamiento


palabra 1
byte 0
byte 1

palabra 0
byte 1
byte 0

dir.
byte 1

b
m
s

7 6 5 43 2 107 6 5 43 2 107 6 5 43 2 10 7 6 5 43 2 10

byte 0

i+1 N
(a) extremista menor

(a) convenio "extremista menor"


palabra 0
byte 0
byte 1

palabra 1
byte 1
byte 0
byte 0

0 12 34 5670 12 34 567 0 12 34 567 0 12 34 567

(b) extremista mayor

Figura 3.8

byte 1

N
N

b
m
s

i+1

Numeracin de bits, bytes y palabras.


(b) convenio "extremista mayor"

indicadas en la Figura 3.8.9


En realidad, la forma de numerar los bits de un
byte o los bytes de una palabra no tiene mucha importancia, desde el momento en que la UCP maneja ese conjunto de bits en paralelo, y los nmeros
no son ms que etiquetas que slo nos sirven
a nosotros para referirnos individualmente a cada
bit. S tiene importancia el orden en que se almacenan las partes de una informacin que ocupa varios
bytes en la MP, y el orden en que se envan de un
ordenador a otro los bits, los bytes o las palabras.
Vamos a centrarnos en el orden de almacenamiento en la MP.
Para guardar en la MP un nmero entero con el
formato de coma fija de la Figura 3.3 la disyuntiva es almacenar los diecisis bits como indica la
Figura 3.9(a), con los ocho bits menos significativos en el byte de direccin ms baja y los ocho
ms significativos en el byte de direccin ms alta, o al revs, segn la Figura 3.9(b). El primero es
un convenio extremista menor, y el segundo es
extremista mayor. De igual modo, se puede seguir un convenio u otro para almacenar en cuatro
bytes un nmero representado con el formato de
coma flotante de la Figura 3.5, como se ilustra en
la Figura 3.10.
Las cadenas de caracteres se almacenan gene9

No obstante, como la numeracin extremista menor para


los bits tiene la ventaja de hacer coincidir el nmero con el
peso de cada bit, en muchos manuales de ordenadores que,
por lo dems son extremistas mayores, se numeran los bits
como indica la Figura 3.7(a).

Figura 3.9. Almacenamiento, en dos bytes de la MP,


de un entero representado con diecisis bits.
dir.
i

M7M0 m
s

i+1 M15M8

31

i+2 M23M16
i+3 N

C
byte 3

23

b
m
s

M
byte 2

byte 1

byte 0

(a) convenio "extremista menor"

C
(numeracin de bits extremista menor)
31

i+1 M23M16

i+2 M15M8
b

i+3 M7M0 m
s

23

C
byte 0

b
m
s

M
byte 1

byte 2

byte 3

(b) convenio "extremista mayor"

Figura 3.10. Almacenamiento, en cuatro bytes de la


MP, de un nmero en coma flotante de treinta y dos
bits.
dir.
i

byte 3

"U" (H55)

i+1 "N" (H4E)


i+2 "I" (H49)
i+3 "X" (H58)

byte 2

byte 1

byte 0

"X" (H58) "I" (H49) "N" (H4E) "U" (H55)


(a) convenio "extremista menor"
byte 0

byte 1

byte 2

byte 3

"U" (H55) "N" (H4E) "I" (H49) "X" (H58)


(b) convenio "extremista mayor"

Figura 3.11. Representacin en una palabra de treinta


y dos bits de la cadena UNIX.

3.5.

113

Operaciones de procesamiento

ralmente en bytes sucesivos de la MP, con el primer carcter (el que escribimos ms a la izquierda)
en la direccin ms baja. Si la longitud de palabra es de varios bytes, una misma cadena da lugar a distintas configuraciones de bits en una palabra, como puede verse en la Figura 3.11 para el
caso concreto de la cadena UNIX en una mquina de treinta y dos bits. Si en una mquina extremista menor cargamos esta cadena de la MP en
un registro de treinta y dos bits, luego copiamos
(a travs de un bus de interconexin) el contenido de este registro en un registro de una mquina
extremista mayor y de aqu lo almacenamos en la
MP de esta segunda mquina, el resultado es que
la cadena UNIX se transforma en XINU. Si
las mquinas fuesen de diecisis bits (con registros de dos bytes), UNIX se transformara en
NUXI. Esto se conoce con el nombre de problema NUXI, y se resuelve con algoritmos adecuados en el proceso de comunicacin.
La eleccin del convenio de almacenamiento
suele estar ligada al modelo funcional de la mquina. Por ejemplo, en el Apartado 2.8 (Programas 2.4 y 2.5) adoptbamos un convenio para las
cadenas de caracteres en Smplez+i4 que no se corresponde con el habitual (almacenar el primer carcter en la direccin ms baja). Poner el primer
carcter en la direccin ms alta es, en efecto, ms
conveniente en Smplez+i4, como el lector puede comprobar fcilmente si rehace aquellos programas considerando que las cadenas se almacenan con el convenio habitual. (En Smplez y Smplez+i4 no tiene sentido hablar de extremista menor ni extremista mayor, porque todos los formatos son de doce bits, y los registros y las palabras de la MP tienen tambin esa longitud).

Conclusin
La eleccin de formatos y de convenios (nmeros negativos, normalizacin, exponente, base, orden de almacenamiento) depende de muchas consideraciones: aprovechar al mximo la memoria al
tiempo que se obtiene una extensin y una pre-

cisin adecuados para las aplicaciones, simplificar los circuitos de la UAL o los programas que
realizan operaciones aritmticas no incluidas en la
UAL, minimizar el nmero de accesos a la MP,
facilitar las comunicaciones con otras mquinas,
etc. Los diseadores de distintos fabricantes han
llegado a diferentes soluciones; en los Ejercicios
del Apartado 3.13 pueden verse algunos ejemplos.
En principio, y en la medida en que el ordenador
sea autnomo esto no reviste mayor importancia
ni origina problemas especiales: nicamente si hay
que descender a programar en lenguaje de mquina, o disear un traductor (ensamblador o compilador), es preciso ocuparse de esos detalles. Pero
en cuanto entramos en el campo de las comunicaciones entre ordenadores, los diferentes convenios de representacin y almacenamiento pueden
ser una fuente de problemas.

3.5. Operaciones de procesamiento


En un momento determinado de la ejecucin
de un programa los datos pueden estar almacenados en la memoria principal o en los registros de
la UCP. Tambin pueden estar en soportes externos (procedentes de sensores, marcados sobre papel, etc.) o en memorias auxiliares (cintas, discos,
etc.). Sobre estos datos cabe definir diversas operaciones, que pueden afectar a un solo dato (como
transferirlo de un sitio a otro, o cambiar su signo) o
a dos (como sumarlos o realizar el producto lgico
o and).

Operaciones aritmticas
En el Apndice A se presentan algoritmos para las operaciones aritmticas bsicas en el nivel
de mquina convencional. Haremos aqu solamente unas observaciones generales.
Ya hemos ilustrado en Lecciones anteriores que
si la UAL no dispone de circuitos para realizar por
hardware ciertas operaciones, es posible realizarlas por software. Un ejemplo dramtico (en el

114

Leccin 3. Variaciones sobre representacin y procesamiento

sentido de que, al ser muy frecuente y fcil de implementar en hardware, la sustraccin est siempre
prevista en la UAL, y, por tanto, todos los ordenadores disponen de la correspondiente instruccin)
es la forma de restar en Smplez (Programa 1.5);
otro ejemplo similar (todos los ordenadores disponen de instrucciones especficas para ello, es decir
de recursos hardware) de la disyuntiva hardware/software es la forma de construir subprogramas en Smplez (Programa 1.6). Pero no es nada dramtico (no es raro) el hecho de que las
operaciones aritmticas en coma flotante puedan
realizarse mediante software o mediante hardware
(con una unidad de coma flotante opcional, que
conceptualmente es una ampliacin de la UAL).
Como mnimo, la UAL siempre dispone de las
operaciones aritmticas bsicas (suma y resta) y
de operaciones lgicas. Estas operaciones se realizan sobre operandos de longitud igual a la del bus
de datos (bus D) del ordenador, y si esta longitud
es mltiplo de un byte, tambin se pueden realizar
sobre bytes, medias palabras, etc. Por ejemplo, si
la longitud de palabra (y la anchura del bus D) es
treinta y dos bits, la UAL podr realizar operaciones sobre palabras, sobre medias palabras (diecisis bits) y sobre bytes.

Operaciones lgicas
Las principales operaciones lgicas son la complementacin o negacin (NOT), el producto lgico (AND), la suma lgica (OR), la suma mdulo 2 u or excluyente (XOR), el producto negado
(NAND) y la suma negada (NOR). Se trata de las
mismas operaciones de la lgica booleana que se
utilizan en los circuitos digitales (Figura 9.2) aplicadas en paralelo a un conjunto de bits.
La primera se aplica a un solo operando y consiste, simplemente, en cambiar todos sus ceros
por unos y viceversa. Si el operando se interpreta como un nmero binario, el resultado es su
complemento a 1. Por ejemplo:
NOT(01101011) = 10010100

op1 op2 AND OR XOR NAND NOR


0
0
0
0
0
1
1
0
1
0
1
1
1
0
1
0
0
1
1
1
0
1
1
1
1
0
0
0
Tabla 3.2

Operaciones lgicas sobre dos operandos.

Las otras cinco se aplican, bit a bit, sobre dos


operandos, y se definen como indica la Tabla 3.2,
donde en las dos primeras columnas se encuentran
los cuatro valores posibles de dos operandos de un
bit, y en las restantes se indican los resultados correspondientes a cada operacin.
El enmascaramiento consiste en realizar la
operacin AND entre una informacin y un conjunto de bits prefijado (mscara) para poner a cero
determinados bits (y dejar los dems con el valor
que tengan). Por ejemplo, para extraer los cuatro
bits menos significativos de un byte utilizaremos
la mscara H0F = 00001111, y si la informacin
original es abcdefgh (a, b,... ,h {0,1}) el resultado ser 0000efgh.

Operaciones de desplazamiento
Los desplazamientos se realizan normalmente
en un subsistema hardware especfico, la unidad
de desplazamiento. Hay dos tipos bsicos: desplazamientos a la derecha, en los que el bit i del operando pasa a ocupar la posicin del bit i 1, ste
la del i 2, etc., y desplazamientos a la izquierda,
en los que se procede al revs. Y hay varios subtipos (Figura 3.12), dependiendo de lo que se haga
con el bit que est ms a la derecha (bms) y con el
que est ms a la izquierda (bMs):
Desplazamientos lgicos
En un desplazamiento lgico a la derecha el
bms se introduce en el indicador C (perdindose
el valor anterior que ste tuviese), y por la izquierda se introduce un 0. Justamente lo contrario se
hace en el desplazamiento lgico a la izquierda:

3.6.

115

Procesamiento de interrupciones
A LA DERECHA

A LA IZQUIERDA

SHR

SHL
(a) desplazamientos logicos

ROR
(b) desplazamientos circulares

ROL

C
RORC
ROLC
(c) desplazamientos circulares con acarreo
V
C

ilustra este tipo de desplazamiento, muy til para


los algoritmos de multiplicacin (vase el Apndice A).
Los nemnicos de las instrucciones son:
(shift right arithmetic) y (shift left arithmetic) o similares.
Aparentemente, el desplazamiento aritmtico a
la izquierda tiene el mismo efecto que el desplazamiento lgico a la izquierda, pero hay una diferencia sutil: el primero pone un 1 en el indicador
de desbordamiento (V) si como consecuencia del
desplazamiento cambia el bit de signo (N).
Los desplazamientos, combinados con operaciones lgicas, se usan con frecuencia para procesamiento simblico.

SHLA

SHRA

(d) desplazamientos aritmeticos

Figura 3.12

Operaciones de desplazamiento.

el bMs se lleva a C y se introduce un 0 por la


derecha, vase la Figura 3.12(a).
Las instrucciones que permiten realizar este tipo de desplazamientos suelen tener los nombres
nemnicos (shift right) y (shift left)
o parecidos.
Desplazamientos circulares
En los desplazamientos circulares, tambin llamados rotaciones, el bit que sale por un extremo se introduce por el otro, como indica la Figura 3.12(b).
Los nemnicos de las correspondientes instrucciones son del tipo: (rotate right) y
(rotate left).
Las rotaciones a travs del indicador C funcionan como puede verse en la Figura 3.12(c). Los
nemnicos son y
Desplazamientos aritmticos
En el desplazamiento aritmtico a la izquierda,
el bMs se introduce en el indicador de acarreo (C),
y en el desplazamiento aritmtico a la derecha se
propaga el indicador de signo. La Figura 3.12(d)

3.6. Procesamiento de interrupciones


Adems de comunicarse con la MP y los perifricos y de procesar instrucciones y datos, la UCP
debe reconocer y atender a las interrupciones. En
Smplez+i4 hemos introducido un esquema muy
bsico (Apartado 2.8) que, no obstante, incluye ya
los conceptos ms importantes. Aqu generalizaremos esos conceptos, y en Algortmez (Apartado 6.14) volveremos a concretar con un esquema
ms elaborado.
Los mecanismos de interrupciones son muy variados. El hardware previsto en la UCP para esta
funcin puede ser ms o menos sofisticado, y determina las operaciones que hay que realizar mediante software. Aqu nos centramos en lo que atae al nivel de mquina convencional, por lo que
haremos nicamente las alusiones imprescindibles
a los componentes de hardware, que estudiaremos
con detalle en la Segunda Parte.

Causas de interrupcin
Las interrupciones pueden clasificarse de acuerdo con la naturaleza de los acontecimientos o causas que las provocan.

116

Leccin 3. Variaciones sobre representacin y procesamiento

Las interrupciones externas son las originadas


por una causa ajena a la UCP. Por ejemplo:
Controlador de un perifrico que pide la transferencia de un carcter, o que avisa del final de
la transferencia de un bloque en una operacin
de acceso directo a la memoria (Apartado 5.8).
Fallo de la tensin de alimentacin.
Seal de reloj.
En los sistemas con gestin de memoria (Apartado 7.10), intento de acceso a una zona no autorizada.
En los sistemas con memoria virtual (Apartado 15.8), fracaso de pgina.
En los sistemas multiprocesadores (Apartado 15.2), un procesador que interrumpe a otro
para comunicarle un mensaje, o pedirle un recurso.
Las interrupciones internas, o excepciones, se
producen como consecuencia de acontecimientos
dentro de la UCP. Por ejemplo:
Desbordamiento en la UAL.
Cdigo de operacin inexistente.
Interrupcin de rastreo (originada tras la ejecucin de toda instruccin cuando la UCP est en
el modo rastreo; enseguida veremos en qu
consiste).
Intento de ejecucin de una instruccin privilegiada en modo usuario (Apartado 4.2)
Direccin de memoria no alineada (Apartado 8.7).
Interrupcin de programa (originada por la ejecucin de un tipo especial de instruccin, ,
que puede incluirse en los programas para pedir al sistema operativo que se encargue de alguna operacin, como veremos con detalle en
las Lecciones 18 a 20.
Las interrupciones externas son asncronas con
relacin al programa, mientras que las internas son
sncronas. Dicho de otro modo, si el mismo programa se ejecuta varias veces las interrupciones
internas aparecern siempre en los mismos puntos (durante la ejecucin de las mismas instruccio-

nes), mientras que los instantes de aparicin de las


externas pueden variar.

Rutinas de servicio
Con Smplez+i4 vimos que para todo perifrico
capaz de interrumpir es preciso mantener cargada
en la MP una RS (rutina de servicio). Lo mismo
puede decirse de todas las otras causas. Las operaciones a realizar por estas RS son muy variadas;
comentemos, a grandes rasgos, algunos casos:
El fallo de alimentacin se produce cuando un
circuito externo a la UCP detecta que la tensin
suministrada por la fuente de alimentacin desciende por debajo de cierto lmite. En los milisegundos siguientes la tensin puede seguir bajando,
pero hasta que la UCP deja de funcionar an tiene
tiempo de hacer muchas cosas. La RS puede, por
ejemplo, salvar en disco los registros y parte de la
MP10 para poder luego arrancar el sistema ms
fcilmente.
La interrupcin de reloj tambin est generada por circuitos externos, pero es peridica (se
produce, por ejemplo, cada milisegundo). La RS
puede actualizar variables que cuenten segundos,
minutos, etc. (Ejercicio 13 de la Leccin 2). En
los sistemas de tiempo compartido (Apartados 4.2
y 20.6) el sistema operativo utiliza esta interrupcin para repartir la UCP entre los distintos procesos que compiten por la UCP.
La RS de la interrupcin por desbordamiento
puede escribir un mensaje de aviso por la pantalla.
La estudiaremos con detalle en el Apartado 7.4.
La interrupcin por cdigo de operacin ilegal (o inexistente) es muy til cuando la UCP
admite ampliaciones. Por ejemplo, si la unidad
de coma flotante es opcional (no contenida en la
UCP), las instrucciones de operacin en coma flotante tendrn sus cdigos de operacin binarios,
pero la UCP no los entiende. Cuando la unidad
10

Con las tecnologas actuales, los registros y gran parte de


la MP son memorias voltiles, es decir, sus contenidos se
borran al desaparecer la alimentacin, mientras que los discos
no lo son.

3.6.

117

Procesamiento de interrupciones

de coma flotante est conectada al sistema la UCP


delega en ella para ejecutar esas instrucciones, pero si no lo est la UCP genera una interrupcin y
entonces son las RS las que se encargan de realizar
las operaciones mediante software (con un tiempo de ejecucin mucho mayor que cuando s est
la unidad, que realiza las mismas operaciones mediante hardware).
Para la interrupcin de rastreo la UCP debe
tener incluido entre los bits del registro de estado
uno que pueda ser cambiado de valor por el programador y que indique, si est a 1, que la UCP
se encuentra en modo de rastreo. En este modo
siempre se genera una interrupcin tras la ejecucin de toda instruccin. Esta es una ayuda para la
labor de depurar los programas mediante el procedimiento de rastrear, paso a paso, la ejecucin,
para identificar la instruccin causante de su mal
funcionamiento. La RS de esta interrupcin puede presentar en la pantalla un listado con todos los
contenidos de los registros. El programador, haciendo uso de la instruccin que le permite poner
a 0 o a 1 el bit, puede sealar segmentos del
programa que le interese rastrear. En realidad, lo
normal es que el programador haga uso de otro
programa, el depurador, que es el que, entre otras
muchas cosas, maneja al bit de rastreo.

Cambios de contexto

comprende los bits C, Z, N, V, el de rastreo, etc. Como hemos dicho en el Apartado 3.2,
todos estos indicadores estn contenidos en un registro de estado. La UCP guarda el contenido de
este registro (y la direccin de retorno) al pasar
a atender cualquier interrupcin. Los contenidos
de los dems registros pueden guardarse por software, en las rutinas de servicio (como se hace en
Smplez+i4 con AC y X); en algunos ordenadores,
el hardware de la UCP se encarga tambin automticamente de guardarlos.

Vectores de interrupcin
Cuando son muchas las causas de interrupcin,
tambin son muchas las RS que hay que mantener
en la MP, unas ms largas y otras ms cortas. Una
disposicin muy comn consiste en tener almacenadas permanentemente en una zona reservada de
la MP las direcciones de comienzo de todas las RS
(Figura 3.13).
En algunos diseos se guardan ms datos. Por
ejemplo, para cada causa, junto con la direccin de
su RS, un nuevo valor para el registro de estado. El
conjunto de datos que corresponde a una causa de
interrupcin se llama vector de interrupcin de
esa causa. Al pasar a atender a una interrupcin,
la UCP salva la direccin de retorno y, en su caso,
los registros y luego, una vez identificada la cau-

Salvar el contexto es guardar todo lo necesario


para que al volver al programa interrumpido ste
contine como si nada hubiese pasado. En Smplez+i4 la UCP guarda la direccin de retorno (en
una direccin fija de la MP, la 63), y las rutinas
de servicio guardan los contenidos de AC y de X
y luego los restauran. Ya apuntamos, en el Apartado 2.9, que este esquema es insuficiente: habra
que guardar tambin la informacin de si el ltimo
resultado en la UAL ha sido cero (el bit Z)11 . En
general, hay que guardar el estado de la UCP, que

vector 0
vector 1

RS1

RS0

11

Tambin hemos visto que este fallo se puede subsanar


mediante software (Apartado 2.9 y Ejercicio 10 de la Leccin 2).

Figura 3.13

Vectores de interrupcin.

118

Leccin 3. Variaciones sobre representacin y procesamiento

sa, bifurca a la direccin contenida en el vector de


interrupcin correspondiente (si el vector contiene otros datos, los maneja oportunamente: si, por
ejemplo, contiene un nuevo valor para el registro
de estado, lo carga en l). La Figura 3.13 presenta un posible mapa de la MP, en el que se supone
que los vectores estn almacenados desde la direccin 0 y que los dos primeros bytes de cada uno
contienen el puntero a la RS.

nivel 4

nivel 3

nivel 2

nivel 1

programa
t0

INT1

Ciertas causas de interrupcin requieren una


atencin urgente (por ejemplo, la de fallo de alimentacin), y no pueden esperar porque otra se
est sirviendo. Cuando las interrupciones pueden
interrumpir a las RS de otras interrupciones se dice que se anidan. A cada causa de interrupcin
se le asigna uno de entre varios niveles de prioridad, de modo que una interrupcin slo se atiende
si su nivel es superior al de la causa cuya RS se est ejecutando. La Figura 3.14 ilustra grficamente la sucesin en el tiempo de los programas que
ejecuta la UCP en un caso imaginario en el que
hay cuatro niveles, desde el nivel 1 (el de menor
prioridad) al nivel 4 (el de mayor prioridad):

t4

t5

t6

INT2 INT3

Figura 3.14

Anidamiento y gestin de prioridades

t2 t3

INT4

Consulta de interrupciones
En Smplez+i4 el averiguar la causa de la interrupcin es trivial: si no es el teclado, ha sido la
pantalla. Si hay muchas causas se puede generalizar el procedimiento: consultar los distintos puertos de estado (y las causas internas) sucesivamente
hasta identificar al causante de la interrupcin (o a
uno de los causantes, ya que puede haber varios
pidiendo interrupcin). Esta es una consulta por
software, pero hay una manera ms eficiente (ms
rpida) de hacerlo. Los mismos circuitos que generan la interrupcin pueden enviar a la UCP (por
el bus de direcciones) su vector de interrupcin
(direccin de comienzo de la RS) o la direccin de
la MP donde el vector se encuentra. En este caso
se habla de interrupciones vectorizadas.

t1

Anidamiento de interrupciones.

1. Inicialmente, las interrupciones estn todas inhibidas, y estn pendientes una causa de nivel 1
y otra de nivel 4.
2. En t0 el programa ejecuta la instruccin , que
da el permiso de interrupciones; la UCP interrumpe a este programa y pasa a la RS de la
causa de nivel 4.
3. En t1 se termina la ejecucin de la RS, pero
como an est pendiente otra interrupcin, la
UCP no vuelve al programa inicial, sino a la
RS de esta causa.
4. En t2 an no ha terminado de ejecutarse esta
RS, pero aparece una interrupcin de nivel 2,
ms prioritaria, por lo que la UCP interrumpe y
pasa a servirla.
5. En t3 aparece una interrupcin de nivel 3, por
lo que la UCP pasa a su RS.
6. En t4 termina la RS de la causa de nivel 3, y la
UCP vuelve a la de nivel 2.
7. En t5 termina la RS del nivel 2, y vuelve a la
del nivel 1.
8. En t6 termina la RS de la causa de nivel 1; no
hay ms interrupciones pendientes, y la UCP
contina con el programa.
Para la gestin de prioridades hay tambin una
variedad de esquemas, desde el puramente software, hasta controladores hardware muy eficientes
para esa tarea. En el Apartado 6.14 estudiaremos
casos concretos.

3.7.

119

Introduccin al procesamiento simblico

3.7. Introduccin al procesamiento


simblico
En el Apartado 1.11 hemos presentado un lenguaje ensamblador sencillo (que ms adelante, en
el Apartado 6.7, ampliaremos) y tambin la idea
esencial de la funcin de un programa ensamblador (procesador del lenguaje).
En este curso no trataremos (salvo muy genricamente, en la Leccin 22) el nivel de mquina simblica, y, por tanto, no estudiaremos modelos detallados de los procesadores de lenguajes.
No obstante, parece interesante presentar aqu, de
manera intuitiva, las ideas bsicas del modelo procesal de un ensamblador. Son las mismas que seguiramos para llevar a cabo manualmente la traduccin de un programa fuente al cdigo objeto.
Fijmosnos en el Programa 2.4. Para traducir a
binario la primera instruccin ( P) consultamos la Tabla 1.2 que nos dice que los tres
bits ms significativos van a ser ; los tres
siguientes, segn el modelo funcional de Smplez+i4 (Apartado 2.3) sern , y para obtener los seis bits restantes tenemos que contar: si
decidimos que esta primera instruccin se va a almacenar en la direccin 0, avanzamos en la lectura del programa fuente y vemos que a la etiqueta P le va a corresponder la direccin
D12. Completamos as la traduccin a binario
de la primera instruccin: 011000001100. Luego
vienen cuatro palabras reservadas, y tras ellas la
constante D3840, que traducimos por Q7400 =
B111100111111, y as sucesivamente. En lugar
de este proceso, que implica avanzar a veces en
la lectura para averiguar la direccin correspondiente a una etiqueta y luego retroceder para
completar la traduccin de una instruccin, podemos hacer la traduccin en dos pasos: en el primero nos limitamos a leer el programa fuente e ir anotando las direcciones que corresponden a las etiquetas; terminada esta primera lectura habremos
completado una tabla de smbolos:

Smbolo
P

...
PP
P
P

Direccin
1
2
3
4
...
54
55
56

En el segundo paso recomenzamos la lectura y


vamos traduciendo, consultando cuando es necesario la tabla.
Pues bien, los programas ensambladores tambin pueden ser de un paso o (ms frecuentemente) de dos pasos, y su ejecucin sigue, esencialmente, este modelo procesal.
Por otra parte, es importante tener una idea clara
de la secuencia de actividades que deben seguirse
para ejecutar un programa escrito en un lenguaje fuente (en este caso, escrito en ensamblador).
La Figura 3.15 (en la pgina siguiente) ilustra estas actividades. El smbolo en forma de cilindro
representa un disco. En este disco tendremos permanentemente disponible, entre otras muchas cosas, el programa ensamblador traducido a binario
(ejecutable).
1. Se carga el programa ensamblador mediante la
ejecucin de otro programa, el cargador, que
tiene que estar previamente en la MP12 .
2. Al ejecutarse el ensamblador, las instrucciones
que forman nuestro programa fuente son los
datos para el ensamblador. ste, a partir de esos
datos, produce como resultado un programa escrito en lenguaje de mquina (un cdigo objeto), que, normalmente, se guarda en el disco.
3. Se carga el cdigo objeto en la MP. El ensamblador ya no es necesario, por lo que, como indica la figura, se puede hacer uso de la zona que
ste ocupaba.
4. Se ejecuta el cdigo objeto.
12

Si el cargador est en la MP, tiene que haber sido cargado. En el Apartado siguiente veremos cmo se puede romper
este crculo vicioso.

120

Leccin 3. Variaciones sobre representacin y procesamiento

MP
ensamblador
ensamblador

cargador

1. Se carga el ensamblador en la MP
programa fuente

MP
ensamblador
ensamblador

"codigo objeto"

2. Se ejecuta el ensamblador

MP

"codigo
objeto"
ensamblador
cargador

"codigo objeto"

3. Se carga el programa binario en la MP

trucciones bsicas de un lenguaje de alto nivel no


se llaman instrucciones, sino sentencias; cada sentencia puede dar lugar, en el proceso de traduccin, a una o ms instrucciones de mquina. El
programa traductor para un lenguaje de alto nivel
se llama compilador. La secuencia de pasos ilustrada en la Figura 3.15 sigue siendo aplicable, sustituyendo ensamblador por compilador. En el
Apartado 17.4 veremos modelos ms detallados.
Algunos lenguajes de alto nivel (Perl, Phyton,
etc.) estn diseados para ser interpretados, no
compilados. El programa intrprete no traduce a
binario, sino que va analizando las sentencias del
programa fuente y ejecutndolas. Y an hay otros
(Java, C#, etc.) concebidos para procesar el programa fuente en dos fases: en la primera se hace
una compilacin que genera un programa intermedio en el lenguaje de una mquina virtual, independiente de la mquina real en la que finalmente
se ejecutar; en la segunda fase, un intrprete escrito para esa mquina real ejecuta el programa intermedio. El caso concreto de Java se trata en las
Lecciones 23 y 24.

MP
datos
"codigo
objeto"
resultados

4. Se ejecuta el programa

Figura 3.15. Ensamblaje de un programa fuente previamente a la ejecucin del programa objeto.

Compiladores e intrpretes
De un lenguaje ensamblador se dice que es de
bajo nivel, porque est muy prximo al lenguaje de mquina convencional (y el traductor es un
programa relativamente sencillo). Los lenguajes
de alto nivel (C, C++, etc.) facilitan la programacin (y sus traductores son ms complicados),
al ser ms cercanos al lenguaje natural. Las cons-

3.8. Tiempo de traduccin, tiempo


de carga y tiempo de ejecucin
En esta presentacin de los procesos de traduccin (ensamblaje o compilacin) y carga hemos omitido, para centrarnos en lo bsico, algunos asuntos importantes. Como seguramente conoce el lector, los programas grandes se construyen de manera modular: un mdulo es un conjunto de instrucciones, variables y constantes, que
realiza determinadas funciones, que se ensambla o
se compila y se prueba (con un programa de prueba) individualmente, pero que no puede ejecutarse
aisladamente. Los mdulos contienen referencias
externas, como bifurcaciones, llamadas a subprogramas o accesos a datos de otros mdulos. Si en
las primeras fases del diseo del programa, al decidir su descomposicin en mdulos, supisemos
exactamente el nmero de palabras que va a ocu-

3.8.

Tiempo de traduccin, tiempo de carga y tiempo de ejecucin

par cada uno, podramos establecer un mapa de la


memoria y dejar determinadas esas referencias al
escribir el programa fuente. Por ejemplo, si el mdulo 1, que tiene 2.000 bytes, se carga a partir de
la direccin 0 y el mdulo 2 a partir de la 2.000, y
si en el mdulo 1 hay que hacer una bifurcacin a
la primera direccin del mdulo 2, escribiramos:
. Naturalmente, no es as. Podramos
pensar en calcular por exceso la longitud de cada mdulo, pero quedaran huecos en la MP, es
decir, zonas inutilizadas. Hay una solucin mejor:
utilizar otro programa de procesamiento, que se
llama montador. Veamos en qu consiste.

Montaje y carga
El traductor genera, adems de un cdigo objeto, una tabla de smbolos externos: nombres simblicos en el programa fuente cuya traduccin no
ha sido posible, y una tabla de smbolos de acceso: nombres a los que pueden hacer referencia
otros mdulos, junto con sus valores. Ese cdigo
objeto an no puede ejecutarse, puesto que hace
referencia a direcciones de memoria que an no
se conocen (los smbolos externos). El programa
montador genera, a partir de los cdigos objeto y de las tablas de smbolos obtenidos de todos los mdulos, el programa binario ejecutable
(sin huecos) que un tercer programa de procesamiento, el cargador se encarga de introducir en
la MP. Es frecuente que el montador y el cargador
estn integrados en un nico programa, pero las
dos funciones son bien diferentes.
Hay, pues, tres tiempos (englobando el montaje y la carga en uno), y es importante saber lo
que se hace en cada uno: muchos errores de programacin, tanto en bajo como en alto nivel, son
consecuencia de su ignorancia.
Las operaciones en tiempo de traduccin las
realiza el ensamblador o compilador una sola
vez. Por ejemplo, la asignacin de direcciones
de memoria a las etiquetas que aparecen en el
programa fuente.

121

Las operaciones en tiempo de carga las realiza el montador (por ejemplo, la asignacin de
direcciones a smbolos externos) o el cargador
(por ejemplo, la introduccin de valores definidos por ), tambin una sola vez (siempre que se carga el programa).
Las operaciones en tiempo de ejecucin se realizan cuando se ejecutan las instrucciones.
Tomando de nuevo como ejemplo el Programa 2.4, las constantes 3.840, 3.920, etc., que estn definidas con , se traducen a binario en
tiempo de traduccin y se introducen en la MP en
tiempo de carga en las direcciones 5 y siguientes.
Pero los valores 0 para P y , 79 para
P y , etc., se introducen en tiempo de ejecucin (con las instrucciones [20] y siguientes).

Reubicacin
En tiempo de traduccin no puede saberse la direccin a partir de la cual va a residir finalmente el
mdulo. Por tanto, el traductor genera direcciones
relativas al comienzo del mdulo, como si ste
fuera a cargarse a partir de la direccin 0. La reubicacin es la carga del programa a partir de otra
direccin de tal modo que se ejecute exactamente
igual que si se hubiese cargado a partir de la 0. Para que esto sea posible es necesario ajustar las direcciones que ha generado el traductor, es decir, ligar esas direcciones relativas a direcciones reales
de la MP. Esta operacin de ligadura es, conceptualmente, muy simple: una vez conocida la direccin de carga del mdulo, basta con sumar esta direccin a las relativas que ha generado el traductor.
Puede hacerse en tiempo de carga o en tiempo de
ejecucin, y puede hacerse mediante software (al
ejecutarse el cargador) o mediante hardware (con
registros de base, o de segmento, que veremos en
la Leccin siguiente). Este valor constante que hay
que sumar a todas las direcciones que deben ajustarse se llama constante de reubicacin.
No todas las direcciones que genera el traductor
han de ajustarse. Si, por ejemplo, tenemos la instruccin , donde es una etiqueta de-

122

Leccin 3. Variaciones sobre representacin y procesamiento

finida en el mdulo en el que se encuentra esa instruccin, entonces debe ligarse a la direccin real,
pero si el programador ha escrito , parece obvio que quiere referirse a la direccin absoluta D2.000, que no debe cambiarse. La lista de direcciones que hay que ajustar se llama diccionario
de reubicacin. Un ensamblador que genera cdigo reubicable junto con un diccionario de reubicacin se llama ensamblador reubicante. Un cargador que toma el cdigo objeto y suma la constante de reubicacin a las direcciones indicadas en
el diccionario se llama cargador reubicador.

mdulo
fuente

compilacin o
ensamblaje

tiempo de
traduccin

otros mdulos
objeto
mdulo
objeto

montaje

mdulos de
biblioteca

mdulo
de carga

tiempo de

Visin global

carga

En el Apartado 4.5 veremos la aplicacin de los


modos de direccionamiento relativos para la reubicacin de programas, y en los Apartados 6.6 y 6.8,
ya con una mquina y un ensamblador concretos,
insistiremos en todo esto. De momento, la Figura 3.16 resume lo que acabamos de explicar, y aade algunos detalles. En esta figura se hace abstraccin de los componentes fsicos (memoria principal y disco) que aparecan en la Figura 3.15. Se
representan con valos los procesos (ejecucin de
programas) y con rectngulos los resultados, que
generalmente (salvo en la salida del cargador) se
guardan en disco, de donde los lee el proceso siguiente.
El montador recibe como entradas los mdulos
objeto (cada uno de stos incluye el cdigo objeto,
las tablas de smbolos y el diccionario) generados
por el traductor, y tambin mdulos de biblioteca.
stos son programas o rutinas de uso general, residentes en disco, de los que pueden hacer uso los
dems programas. Como indica la figura, los mdulos de biblioteca los puede incorporar el montador o el cargador. La salida del cargador es ya un
programa binario ejecutable. Para reducir su tamao, ciertas funciones de biblioteca pueden cargarse
dinmicamente, es decir, en tiempo de ejecucin
(cuando el programa las reclama).

carga

mdulos de
biblioteca
(carga dinmica)

cdigo
ejecutable

ejecucin
en la UCP

tiempo de
ejecucin

Figura 3.16. Sucesin de procesos, desde la traduccin


hasta la ejecucin.

Carga inicial
En el Apartado anterior sealbamos, en una
nota a pie de pgina, un aparente crculo vicioso: si el cargador tiene que estar en la MP para
ejecutarse, quin lo carga? La solucin primitiva
era cargar a mano (con acciones como las descritas al final del Apartado 1.3) un pequeo cargador bsico que al ejecutarse cargaba el cargador definitivo. En los ordenadores actuales, este
cargador inicial est grabado en la zona de slo lectura de la MP, y se ejecuta automticamente
al arrancar el sistema (Apartado 18.9).

3.9.

Resumen

3.9. Resumen
La informacin se representa en el interior del
ordenador (en la MP, o en los registros de la UCP)
de forma binaria, adoptando convenios sobre el
significado de cada bit y el orden en que se consideran almacenados los bits y los bytes en la memoria y en los registros.
En el nivel de mquina convencional, las informaciones a representar (dejando la representacin
de instrucciones para la siguiente Leccin) son de
dos tipos: numricas y simblicas. Para representar los caracteres o smbolos bsicos hay distintos
cdigos, pero el ms utilizado es el cdigo ASCII
de siete bits, y su ampliacin a ocho bits, la norma
ISO 8859-1 (ISO Latin1), o bien la ISO 8859-15
(ISO Latin9).
Para las informaciones numricas hay dos opciones: cadenas BCD (cada dgito decimal del valor numrico a representar se codifica con cuatro
bits y se empaquetan dos dgitos por byte, o no
se empaquetan, y cada dgito ocupa un byte) o representacin en el sistema binario de numeracin.
En este ltimo caso tambin hay dos posibilidades: coma fija o coma flotante. En cualquier caso,
hay que tener en cuenta los convenios sobre los
formatos (longitud y estructura en campos de la
representacin, nmeros negativos, base y representacin del exponente en el caso de coma flotante) y sobre el orden de almacenamiento en la
memoria: con el convenio extremista menor, los
bits menos significativos se almacenan en la direccin ms baja, y en el extremista mayor, en la ms
alta.
Las operaciones aritmticas (suma, resta, multiplicacin, divisin) se realizan sobre operandos
con algoritmos que, naturalmente, dependen del
convenio seguido para representar a las informaciones numricas. Algunos de estos algoritmos se
presentan en el Apndice A. Lo ms importante a
recordar es que tales algoritmos pueden realizarse
mediante circuitos lgicos, es decir, por hardware,
o, en ausencia de tales circuitos, mediante programas, es decir, por software. Dado que se trata de

123
buscar una solucin equilibrada entre coste y eficiencia (rapidez de ejecucin), y que la decisin
depende del tipo de problemas a resolver, es frecuente que el hardware para ciertas operaciones
sea una opcin.
Las operaciones lgicas se realizan bit a bit sobre un operando (not) o sobre dos (and, or, nand,
nor y or excluyente) y resultan muy tiles para
procesamiento simblico.
Las operaciones de desplazamiento se aplican a
los bits de una palabra. Las hay de distintos tipos:
a la izquierda y a la derecha, lgicos, aritmticos
y circulares. Un desplazamiento aritmtico a la izquierda de un nmero binario equivale a una multiplicacin por dos, y un desplazamiento aritmtico a la derecha a una divisin por dos. De aqu que
se apliquen sistemticamente en los algoritmos de
multiplicacin y divisin.
Hemos visto las ideas fundamentales del procesamiento de interrupciones: las causas de interrupcin pueden ser internas o externas, y para cada
una es preciso mantener cargada en la MP una rutina de servicio, RS. Para cada RS existe un vector
de interrupcin almacenado en la MP que contiene, como mnimo, la direccin de comienzo de la
rutina. Al atender a una interrupcin, se hace un
cambio de contexto, salvando el estado de la UCP
(para volver sin problemas al programa interrumpido), averiguando la causa de la interrupcin (mediante una consulta por software o por hardware)
y pasando a la ejecucin de la RS. Cada causa de
interrupcin tiene asociada una prioridad (de manera que si en un momento hay varias pendientes
se atiende a la ms prioritaria), y en esquemas elaborados se permite un anidamiento de interrupciones (de modo que si aparece una interrupcin ms
prioritaria que aquella a la que se est sirviendo, la
interrumpe).
Finalmente, tambin se ha introducido el asunto
del procesamiento simblico a travs del concepto de programa ensamblador: un programa cuyos
datos de entrada son instrucciones de mquina codificadas en un lenguaje simblico (lenguaje ensamblador), ms asequible para las personas que

124

Leccin 3. Variaciones sobre representacin y procesamiento

un lenguaje binario, dando como resultado de su


ejecucin las instrucciones en binario, que ya puede interpretar la UCP. Un lenguaje ensamblador es
de bajo nivel; los lenguajes de alto nivel hacen ms
fcil la programacin y exigen programas traductores ms complejos, llamados compiladores.
Esto nos ha llevado a detenernos en los procesos
que tienen lugar desde la lectura de los programas
fuente de varios mdulos hasta la generacin de un
cdigo objeto cargable y ejecutable, distinguiendo entre tiempo de traduccin, tiempo de montaje/carga y tiempo de ejecucin, e introduciendo la
problemtica de la reubicacin de programas en la
MP y la ligadura de direcciones generadas por el
traductor a direcciones reales de la MP.

3.10. Observaciones terminolgicas


El vocabulario introducido en esta Leccin da lugar
a consideraciones muy interesantes.
Byte, aunque admitida desde 2001 en el
D.R.A.E., puede traducirse por octeto; preferiramos
la traduccin (que, adems, est libre de ambigedad,
puesto que, al menos en su origen, los bytes podan
tener seis, siete, ocho o nueve bits) si no fuera por la
costumbre asentada de medir la capacidad de las memorias en KB, MB, etc. Lo que hemos llamado
cuarteto es, en ingls, nibble (mordisco, bocado); hay que tener en cuenta que bit significa tambin elemento o trozo pequeo, y que byte, segn
el diccionario Concise Oxford, procede de un juego
de palabras: se pronuncia igual que bite (morder).
Mencin especial merece la denominacin de extremistas menores (little-endians) y extremistas
mayores (big-endians) para la referencia al convenio sobre el orden de almacenamiento en la memoria.
La cuestin la suscit Cohen (1981), tomando los trminos de un pasaje de Los viajes de Gulliver de Jonathan Swift. Concretamente, Gulliver vive en Liliput
una guerra civil originada por una ley dictada por su
rey segn la cual era obligatorio, contrariamente a la
tradicin, cascar los huevos por el extremo ms estrecho. Swift satirizaba as sobre las guerras religiosas de
su poca, tan absurdas como la provocada por la forma
de cascar los huevos. Danny Cohen aplica la parbola
a los dos convenios bsicos que pueden seguirse para
ordenar los bits en la memoria y para transmitirlos, y

concluye que si bien la diferencia entre uno y otro es


trivial, no lo es el llegar a un acuerdo.
Las denominaciones de los indicadores (flags) C,
V, N y Z, provienen de Carry (acarreo), oVerflow
(desbordamiento), Negative y Zero.
Para las interrupciones no slo hay muchos esquemas distintos, tambin se encuentran muchas variantes
terminolgicas. Por ejemplo, algunos llaman excepciones a las interrupciones en general, distinguiendo
entre ellas interrupciones (de perifricos), fallos,
abortos, etc., mientras que otros reservan ese trmino para las que no son de perifricos. La palabra trap
(literalmente, trampa o cebo) se utiliza frecuentemente
para designar o bien a lo que aqu hemos llamado interrupciones internas, o bien slo a las interrupciones
de programa.
El procedimiento que hemos llamado de consulta
corresponde a lo que en ingls se llama polling (exploracin, o sondeo). Tambin hemos traducido trace
por rastreo, y debugging por depuracin. Este
ltimo trmino ingls tiene un interesante origen histrico. Bug es insecto, o bicho, pero en informtica se entiende como error (de localizacin difcil) en
un programa (podramos traducirlo como gazapo).
Se cuenta que el primer bug apareci en el Mark I
de Harvard, donde un fallo desasoseg a los programadores hasta que encontraron su causa: un bug atrapado en uno de sus rels13 .
Ligar (asignar direcciones reales de la MP a las
direcciones relativas generadas por un traductor) y ligadura son traducciones de bind y binding.
Hemos traducido entry symbols por smbolos de
acceso (menos confuso que smbolos de entrada),
linker por montador (ms breve que montador de
enlaces), relocatable assembler por ensamblador
reubicante y relocating loader por cargador reubicador. El cargador inicial es, en ingls, bootstrap
loader. El origen de esta expresin es tambin bastante curioso. Bootstrap es la pequea lengeta trasera
que tienen las botas; to pull oneself up by ones bootstraps (levantarse uno mismo tirndose de los bootstraps) es una frase hecha que equivale a arreglrselas
por s mismo, pero que, interpretada literalmente, recuerda al crculo vicioso mencionado al final del Apartado 3.8: quin carga al cargador? Esto ha derivado en
el verbo boot con el sentido de arrancar automtica13

No obstante, segn Gruenberger (1993), Thomas A. Edison ya haba utilizado anteriormente el trmino bug con un
sentido similar al actual en informtica.

3.13.

125

Ejercicios

mente (no de dar una patada). Y, en espanglish,


en botar y rebotar.

3.11. Notas histricas


El trmino byte fue acuado en 1956 por Werner
Buchholz, uno de los diseadores del ordenador IBM
Stretch (Apartado 15.12), mutando bite para evitar
la confusin con bit.
Los ordenadores diseados por los aos 50, 60 y 70
pertenecan tpicamente a una de dos categoras: cientficos o de gestin. Entre otras diferencias (vase
el Apartado 4.12), los primeros se caracterizaban por
representar la informacin numrica en binario, mientras en los segundos se haca en BCD. Actualmente,
es frecuente que la UAL disponga de operadores para
trabajar en los dos sistemas de representacin.
Durante algn tiempo coexistieron varios cdigos
para la representacin de caracteres: EBCDIC (que
an se encuentra en algunos ordenadores), FielData,
etc. Como ya hemos dicho, el uso del cdigo ASCII de
siete bits (ANSI, 1977) es hoy prcticamente universal.
Hasta final de los aos 80 coexistieron varias extensiones a ocho (o ms) bits (DCruz et al., 1989), pero han
acabado por imponerse las normas ISO 8859-X para
ocho bits (ISO, 1998), y se est extendiendo Unicode para diecisis (ISO, 2003, Unicode 2003).
Sobre la evolucin de los lenguajes de programacin
y su procesamiento, vase el Apartado 22.14.

Sobre la importancia del extremismo menor o mayor, no ya para el almacenamiento, sino para la
comunicacin por buses, adems del artculo citado
de Cohen (1981) puede consultarse el de Kirrmann
(1983), los comentarios de Paterson (1984) y Gustavson (1985), y el divertido pero profundo artculo de James (1990).

3.13. Ejercicios
Algunos de los Ejercicios que se proponen se refieren no slo a los conceptos explicados en esta Leccin,
sino tambin a los que se tratan en el Apndice A.
1.

Escriba los contenidos de las palabras de direcciones 100 y sucesivas en la MP de Smplez cuando en ellas representamos la cadena de caracteres:
Qu ambigedad puede ocasionar la letra ee?
Ninguna!, con ocho bits por carcter (ISO Latin9).

2.

A fin de poder representar nmeros negativos y


nmeros reales, podemos sustituir el convenio de
representacin en Smplez dado en la Leccin 1
por los siguientes:
coma fija: bit 11, signo; bits 100, valor, en
complemento a 2 para nmeros negativos;
coma flotante: bit 11, signo; bits 10 a 6, exponente de 2 en exceso de 16; bits 5 a 0: mantisa
con normalizacin fraccionaria y en complemento a 2 para nmeros negativos.

3.12. Orientaciones bibliogrficas


Los formatos para la representacin de informaciones se encuentran, naturalmente, en los manuales que proporcionan los fabricantes. La norma ANSI/IEEE 754 (IEEE 1985) incluye no slo los formatos
de coma flotante que hemos reproducido, sino tambin
muchos otros detalles referentes a las operaciones aritmticas. Ms detalles pueden verse en Hough (1981),
Coonen (1981) y Cody (1981). Posteriormente se ha
completado con otra norma, ANSI/IEEE 854, que generaliza la anterior para cualquier base y cualquier longitud de palabra (Cody et al., 1984; IEEE, 1987).
La ISO no publica las normas en la web, pero en
Czyborra (1998) pueden verse todas las tablas de las
normas ISO 8859-X. En otra pgina del mismo autor
(Czyborra, 1999) hay un buen resumen de Unicode,
con muchos enlaces.

a)

Calcule los nmeros mximo y mnimo representables en ambos formatos, y el nmero positivo ms pequeo en coma flotante.

b)

Encuentre las representaciones de D100 en


coma fija y en coma flotante.

c)

Halle la representacin de D3,14159 en


coma flotante.

3.

Considerando los formatos anteriores, y suponiendo que disponemos de una instruccin


(complementar el acumulador, vase el Ejercicio 14 de la Leccin 1), escriba un subprograma
para Smplez que realice la sustraccin.

4.

En cada palabra de Smplez pueden introducirse


tres dgitos BCD. Halle la representacin en decimal empaquetado de D43.701.

126
5.

6.

Leccin 3. Variaciones sobre representacin y procesamiento

Si una determinada palabra de la MP de Smplez


contiene , encuentre qu informacin est representada, suponiendo que se interpreta:
a)

como un dato en coma fija;

b)

como un dato en coma flotante;

c)

como una cadena de dgitos BCD;

d)

como una instruccin;

e)

como un carcter ASCII de siete bits (los


cinco ms significativos son indiferentes).

f)

como un carcter ISO Latin9 de ocho bits


(los cuatro ms significativos son indiferentes).

En el modelo funcional del Pentium (o, ms


precisamente, la arquitectura Intel IA32) los
enteros en BCD empaquetado se representan con
diez bytes, con convenio de signo y magnitud. El
bit ms significativo es el bit de signo, y los otros
siete bits de ese byte ms significativo son todos
ceros. El valor absoluto del nmero se representa
en los nueve bytes restantes. El convenio de almacenamiento en memoria es extremista menor.
a)

Escriba el mapa de memoria de las direcciones d a d + 9 cuando en ellas est representado el nmero D98.765 1010 .

b)

Cules son el mayor y el menor nmero


representables?

c)

Responda a las mismas preguntas anteriores suponiendo que el convenio fuese de


complemento a 10.

Nmeros negativos: complemento a 2.


Mantisa: normalizacin fraccionaria.
Base: 16
Exponente: en exceso de 64
(C = E + 64; 64 E 63)

Al existir formatos que ocupan varias palabras


(Figuras 3.17(c) y 3.17(d)) es importante el convenio de almacenamiento. Observando esas figuras se ve que es un convenio extremista mayor:
los bits menos significativos van siempre a las direcciones ms altas.
Obtenga las configuraciones de bits que corresponderan en estos formatos a los nmeros que
han resultado del Ejercicio anterior (D160 y
D18.337.497.088).
8.

Un caso un poco ms complicado es el de la serie de ordenadores DEC-VAX (Figura 3.18), en


los que la MP se direcciona por bytes. Consideremos primero el convenio sobre el orden de almacenamiento. Los formatos de coma fija (Figuras 3.18(a) y 3.18(b)) son claramente extremistas menores, no slo por la numeracin de los
bits dentro de cada byte, que, como hemos dicho
es lo menos importante, sino por la forma de almacenar los bytes en memoria: empezando por el
byte que contiene los bits menos significativos y
0

31

N30N0

(a) punto fijo


0

Como hemos dicho, prcticamente todos los fabricantes han adoptado la norma IEEE 754. Sin
embargo, en los grandes ordenadores, en los que
se siguen utilizando programas escritos hace muchos aos, es frecuente que tambin se mantengan
los formatos antiguos. La Figura 3.17 muestra los
formatos de coma flotante de una serie histrica,
la IBM 370, que se conserva en procesadores actuales de esta compaa. Como puede verse, adems del formato de una sola palabra de treinta y
dos bits hay otros dos, de doble y cudruple precisin, que ocupan dos y cuatro palabras, para las
aplicaciones que requieren ms cifras significativas en M .
Los convenios de representacin son:

31

C6C0

7.

bms

M23M0

bms

(b) punto flotante


0

31

C6C0

M5532
M31M0

bms

(c) punto flotante con doble precision


0

C6C0

31

M111M88
M87M56
M55M32
M31M0

bms

(d) punto flotante con cudruple precision

Figura 3.17

Formatos de los IBM 370.

3.13.

127

Ejercicios
7
i

N7N0

i+1 N

0
b
m
s

N14N8

b
m
s

N7N0

M54M48

C7C1

i+2

N23N16

M7M0

i+3 N

N30N24

i+3

M15M8

C3C0 M51M48

C7C0
N

C14C8

M39M32

M39M32

M103M98

M47M40

M47M40

M111M104

M23M16

M23M16

M7M0

b
m
s

C10C4

C7C1

(c) punto flotante


32 bits

M31M2

M31M24

i+7

M22M16

i+2

N15N8

(b) punto fijo


32 bits
7

7
i

i+1 N

i+1

(a) punto fijo


16 bits

b
m
s

M15M8
(d) punto flotante
64 bits
(margen normal)

Figura 3.18

M7M0
i+7

b
m
s

M7M0
i+15

M15M8
(e) punto flotante
64 bits
(margen grande)

b
m
s

M15M8
(f) punto flotante
128 bits

Formatos y convenios de los DEC-VAX.

dejando en la direccin mayor al que contiene el


signo y los bits ms significativos.
Ahora bien, los convenios para almacenar los nmeros en coma flotante, en sus cuatro versiones
(Figuras 3.18(c) a 3.18(f)), pueden parecer extravagantes al contemplar a primera vista las figuras. La clave para interpretarlos es la siguiente:
cada dos bytes constituyen una palabra de diecisis bits; el almacenamiento de los dos bytes
de una palabra es extremista menor, mientras
que el almacenamiento de palabras consecutivas
es extremista mayor. As, en la Figura 3.18(c),
la primera palabra (los dos bytes de direcciones i
e i+1) contiene el signo, la caracterstica y los bits
ms significativos de la mantisa, y la palabra que
corresponde a los bytes de direcciones i+2 e i+3
contiene los bits menos significativos (extremista
mayor). Sin embargo, de los dos bytes que forman la primera palabra, el que contiene el signo y
los bits ms significativos del exponente (o sea, lo
que estara ms a la izquierda en una representacin lineal completa de los treinta y dos bits) est en la direccin ms alta (extremista menor). Y
lo mismo para la segunda palabra: los bits menos

significativos van en el byte almacenado en la tercera posicin, y los ms significativos en la direccin mayor. El lector podr reconocer fcilmente
el mismo criterio hbrido en los otros formatos de
coma flotante.
Los otros convenios para los formatos de coma
flotante de VAX son los siguientes:
Nmeros negativos con signo y valor absoluto.
Mantisa con normalizacin fraccionaria, omitiendo el bit ms significativo, que siempre
es 1.
Base: 2
Exponente en exceso de 128 (128 E
127), 1.024 (1.024 E 1.023) o 16.384
(16.384 E 16.383) segn que el formato
reserve para e 8 bits (Figuras 3.18(c) y (d)), 11
(Figura 3.18(e)) o 15 (Figura 3.18(f)).
El Ejercicio consiste en hacer lo mismo que en el
anterior pero con estos formatos.
9.

El siguiente conjunto de treinta y dos bits:


1000 0001 0100 0110 0110 1000 0101 0100

128

Leccin 3. Variaciones sobre representacin y procesamiento

puede representar un nmero que depende del


convenio utilizado. Encuentre su significacin decimal en el caso de que el convenio sea:
a)

signo y mdulo;

b)

complemento a 1;

c)

complemento a 2;

d)

BCD natural, Aiken y exceso de 3, sin signo;

e)

coma flotante con el formato de cuatro bytes del VAX;

f)

coma flotante con el formato de una palabra


del IBM 370;

g)

coma flotante con el formato de precisin


sencilla IEEE 754.

10.

Represente los nmeros D0,01 y D199,5 en todos los formatos de coma flotante descritos.

11.

Suponga que en cuatro bytes consecutivos de la


MP de un VAX se tienen almacenados los nmeros +256 y 256 con el formato de la Figura 3.18(a). Por error, en un programa aparece una
instruccin de suma de enteros en longitud doble,
que interpreta esos cuatro bytes como un entero
con el formato de la Figura 3.18(b). Qu nmero
se interpretara?

12.

Si no se consideran los problemas ligados a la comunicacin entre ordenadores (como el problema NUXI), parece que la adopcin de un convenio extremista mayor o menor es indiferente. Pero ciertos algoritmos pueden implementarse ms
eficientemente con un convenio que con otro. Por
ejemplo, para ordenacin alfabtica de cadenas de
caracteres se aplican instrucciones de comparacin: la instruccin P compara dos operandos,
y pone a 0 el indicador N si el primer operando es mayor o igual que el segundo, o a 1 en
caso contrario; si los operandos son iguales, el indicador Z se pone a 1. Para comparar dos cadenas se comparan los dos primeros caracteres:
si son distintos, las cadenas se ordenan segn el
resultado; si son iguales se sigue con los caracteres que van en segundo lugar, y as sucesivamente. Una mquina de treinta y dos bits puede tener
tres instrucciones P: una para comparar bytes,
otra para dos bytes (medias palabras) y otra para palabras. La comparacin de palabras permite,
con una sola instruccin, comparar cuatro bytes.

Razone por qu se puede optimizar mejor el algoritmo de comparacin de cadenas si el convenio


de almacenamiento es extremista mayor.
13.

Como se sugiere al final del Apartado 3.4, reescriba los Programas 2.4 y 2.5 suponiendo que las
cadenas de caracteres se almacenan con el convenio habitual (primer carcter en el byte de direccin ms baja). Por qu motivos resultan ser ms
complicados los programas?

14.

Suponiendo que Smplez tuviese una instruccin


(bifurcacin si negativo), escriba subprogramas para sumar y restar que detecten la existencia
de desbordamiento de acuerdo con los algoritmos
que se presentan en el Apndice A. Los subprogramas tendrn dos argumentos de salida: uno, el
resultado de la operacin (transmitido, por ejemplo, por el acumulador) y otro una seal (transmitida por una palabra de la memoria) que valdr
0 si no ha habido desbordamiento y 1 si lo
ha habido.

15.

En los siguientes problemas de sumas y restas,


los nmeros se suponen enteros, representados en
coma fija con cinco bits ms signo, y con complemento a 2. Ejecute a mano las operaciones siguiendo los algoritmos del Apndice A, detectando en qu casos se produce desbordamiento, y
compruebe los resultados convirtiendo a decimal
las representaciones:

16.

001101
+010001

001101
+101000

001101
+110011

001101
+101100

110000
010100

010000
111111

010000
000001

100000
+000010

En Smplez no se han previsto instrucciones para operaciones lgicas, ni de desplazamiento, ni


de comprobacin de bits, lo que hace difcil programar los algoritmos de multiplicacin y divisin. No obstante, siempre pueden idearse trucos. Por ejemplo, desplazar un nmero binario
a la izquierda es lo mismo que multiplicarlo por
2, y esto es lo mismo que sumarlo a s mismo.
Y el valor del bit nmero 11 se puede comprobar
si se dispone de la instruccin . Adapte convenientemente el algoritmo dado en el Apndice
A para multiplicar nmeros positivos, y escriba
un programa que multiplique dos nmeros (para
simplificar, suponga que el resultado cabe en una
palabra de doce bits).

3.13.

129

Ejercicios

17.

Compruebe el algoritmo de Booth ejecutando a


mano los productos: 16 30; 8 (6), y 8
(6), representando los operandos con 6 bits y
complemento a 2.

18.

Suponiendo que Smplez tuviese la instruccin


, escriba un programa que, haciendo uso exclusivamente de esa instruccin y de (adems
de y ), multiplique por 10 el contenido de
una palabra de la MP.

19.

La orden para el ensamblador (directiva, vase


el Apartado 6.7) permite definir la direccin
de memoria a partir de la cual se van a almacenar
las instrucciones o constantes que le siguen. Por
ejemplo, si escribimos:

Prr

P
P

La directiva P le dice al ensamblador que el


smbolo o smbolos que le siguen estn definidos
en otro mdulo (smbolos externos), y la P
le dice que otros mdulos pueden hacer uso de ese
o esos smbolos (smbolos de acceso).

Escriba los resultados del proceso de ensamblaje de ambos programas. Es decir:


Cdigo (escrito en octal)
Tabla de smbolos del ensamblador
Tabla de smbolos externos
Tabla de smbolos de acceso
Diccionario de reubicacin

b)

Suponiendo que el montador pone el Programa B inmediatamente a continuacin


del Programa A, escriba el resultado del
montaje, es decir, el cdigo y el diccionario de reubicacin.

c)

Suponiendo que el cargador reubicador carga el mdulo resultante a partir de la direccin D400, escriba los contenidos de las
direcciones de MP D400 y sucesivas antes
y despus de la ejecucin

d)

Hay alguna instruccin que no llegue a


ejecutarse?

el ensamblador reservar la direccin 40, identificndola con la etiqueta , pondr 1 en la


direccin 41, pondr la instruccin en la direccin 100, la en la 101, la
en la 400, etc.
Escriba en ensamblador el subprograma para restar y el programa con sus llamadas, vistos en el
Apartado 1.10, haciendo uso de .
20.

a)

Considere estos dos programas para Smplez:

Prr

P
P

21.

Como sabemos, Smplez+i4 tiene una sola lnea


de entrada de interrupciones. Suponga que a esa
lnea hay conectados dos controladores de perifricos como puede ver, adelando un poco y mirando la descripcin en el nivel de microarquitectura,
en la Figura 9.18. El primero (el ms cercano a la
UCP) sirve para controlar cierto proceso fsico,
cuyos detalles no hacen al caso, que interrumpe
espordicamente. El segundo controlador es de un
reloj que pide una interrupcin cada milisegundo,
y sirve para mantener la hora en la UCP, que se
muestra por un visualizador. El seudocdigo de
las rutinas de servicio es:

130

Leccin 3. Variaciones sobre representacin y procesamiento

t
t tr
r t
tr
t r tr
t
rt st rr s trst r
s
rt st rr s trst r
rt t tr s ts str
rt r s s
r str
rtr t t t
t

Programa 3.1

Programa del Ejercicio 22.

RS del controlador del proceso:

a)

El sistema funciona mal. En qu lo nota el


usuario? Explique la causa.

b)

Llamado el tcnico (que es un especialista electrnico), intercambia la posicin de


las tarjetas controladoras. Resuelve esto el
problema?

c)

D una solucin razonada al problema introduciendo las modificaciones necesarias


en el seudocdigo dado anteriormente para
el software de interrupciones.

1. Guarda los registros que va a usar.


2. Realiza su funcin, en la que tarda entre dos y
tres milisegundos
3. Repone los registros.
4. Da el permiso general de interrupciones y retorna.
RS del reloj:
1. Guarda los registros que va a usar.
2. Actualiza contadores (milisegundos, segundos, minutos y horas).
3. Repone los registros.
4. Da el permiso general de interrupciones y retorna.

22.

Si conoce el lenguaje C, analice el programa que


aparece ms arriba y prediga el resultado de su
ejecucin. Despus puede compilarlo y ejecutarlo
para comprobar ese resultado.