Professional Documents
Culture Documents
3.1. Propsito
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
dir. byte
0
1
2
palabra de direccin 0
palabra de direccin 2
16
17
palabra de direccin 16
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
Figura 3.1
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
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
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.
104
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.
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).
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)
( )
()
( )
()
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
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
106
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
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
Figura 3.4
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
31
23
b
m
s
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
3.3.
109
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
110
31 30
23 22
52 51
Figura 3.6
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
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.
3.4.
(a) convenio
"extremista menor"
0
b
M
s
7
b
m
s
(b) convenio
"extremista mayor"
Figura 3.7
0
b
m
s
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
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
palabra 1
byte 1
byte 0
byte 0
Figura 3.8
byte 1
N
N
b
m
s
i+1
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
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
byte 3
"U" (H55)
byte 2
byte 1
byte 0
byte 1
byte 2
byte 3
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.
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
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
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
SHLA
SHRA
Figura 3.12
Operaciones de desplazamiento.
Causas de interrupcin
Las interrupciones pueden clasificarse de acuerdo con la naturaleza de los acontecimientos o causas que las provocan.
116
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
3.6.
117
Procesamiento de interrupciones
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-
vector 0
vector 1
RS1
RS0
11
Figura 3.13
Vectores de interrupcin.
118
nivel 4
nivel 3
nivel 2
nivel 1
programa
t0
INT1
t4
t5
t6
INT2 INT3
Figura 3.14
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
Smbolo
P
...
PP
P
P
Direccin
1
2
3
4
...
54
55
56
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
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"
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.
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
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
carga
mdulos de
biblioteca
(carga dinmica)
cdigo
ejecutable
ejecucin
en la UCP
tiempo de
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
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
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)
Calcule los nmeros mximo y mnimo representables en ambos formatos, y el nmero positivo ms pequeo en coma flotante.
b)
c)
3.
4.
126
5.
6.
b)
c)
d)
e)
f)
Escriba el mapa de memoria de las direcciones d a d + 9 cuando en ellas est representado el nmero D98.765 1010 .
b)
c)
31
N30N0
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
31
C6C0
M5532
M31M0
bms
C6C0
31
M111M88
M87M56
M55M32
M31M0
bms
Figura 3.17
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
M31M2
M31M24
i+7
M22M16
i+2
N15N8
7
i
i+1 N
i+1
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
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.
128
signo y mdulo;
b)
complemento a 1;
c)
complemento a 2;
d)
e)
f)
g)
10.
Represente los nmeros D0,01 y D199,5 en todos los formatos de coma flotante descritos.
11.
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.
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.
15.
16.
001101
+010001
001101
+101000
001101
+110011
001101
+101100
110000
010100
010000
111111
010000
000001
100000
+000010
3.13.
129
Ejercicios
17.
18.
19.
Prr
P
P
b)
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)
a)
Prr
P
P
21.
130
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
a)
b)
c)
22.