Está en la página 1de 34

Leccin 1

Smplez

1.1. Propsito
El principal objetivo de esta Primera Parte es Despus desarrollaremos algunos ejemplos de
que el lector conozca modelos genricos en el ni- programas. La buena comprensin de estos ejem-
vel de mquina convencional, para luego poder plos es imprescindible para el propsito principal
aplicarlos a la comprensin de ordenadores con- de la Leccin: tener una idea clara del modelo fun-
cretos. Dado que entre stos hay una gran variedad cional bsico de los ordenadores en el nivel de m-
de detalles, pero que todos comparten unos princi- quina convencional, y de su uso.
pios bsicos, seguiremos la estrategia de estudiar Tambin vislumbraremos el nivel de mquina
ordenadores ficticios, que permiten transmitir esos simblica, al describir un lenguaje ensamblador
principios sin perderse en los detalles, a veces in- para Smplez, pero no porque sea ese un objetivo
trincados, de las mquinas reales. Smplez es el de esta Primera Parte. Simplemente, porque nos
primero de ellos. En Lecciones posteriores se irn permite representar los programas en un lenguaje
enriqueciendo las caractersticas de este ordena- ms inteligible para la mente humana que los len-
dor mnimo apoyndonos en otros, igualmente guajes del nivel de mquina convencional, basados
ficticios, pero ms parecidos a los reales. en un alfabeto de dos smbolos: 0 y 1.
En toda esta Primera Parte nos centraremos Las comunicaciones entre la UCP y la MP y los
principalmente en los modelos funcionales y en su perifricos plantean una problemtica compleja.
uso (programacin en el nivel de mquina conven- Al final de la Leccin haremos una introduccin
cional). Veremos tambin modelos estructurales y mediante una solucin sencilla, la espera activa.
procesales, pero en un nivel de abstraccin alto: Tras un anlisis de sus inconvenientes, presenta-
los pormenores, ms propios del nivel de microar- remos otros procedimientos que estudiaremos con
quitectura, se estudiarn en la Segunda Parte. detenimiento ms adelante, a lo largo del curso: las
Esta Leccin empieza con lo esencial de los mo- interrupciones y el acceso directo a la memoria.
delos estructural y procesal de Smplez, y luego La Leccin concluye con una lista de comenta-
estudiaremos con detalle su modelo funcional: qu rios suscitados por la extrema y artificiosa simpli-
instrucciones tiene, qu hace cada una, y cmo se cidad de Smplez, que intentan ser motivadores de
representan los datos y las instrucciones. las Lecciones siguientes.

47
48 Leccin 1. Smplez

bus A 9

bus C 15
UCP 2

CTEC teclado
AC
UC MP
UAL

CPAN pantalla

bus D 12

Figura 1.1 Modelo estructural de Smplez.

1.2. Modelos estructural y procesal ne doce lneas porque tanto los datos como las
instrucciones se representan con doce bits. El
Componentes y buses bus A tiene nueve porque veremos que las di-
recciones de la MP se expresan con nueve bits.
Smplez es un ordenador muy parecido a la
Y el bus C tiene quince porque, como veremos
mquina de von Neuman descrita en la Lec-
en el Apartado 9.6, quince son las microrde-
cin 0. Tiene las mismas unidades funcionales
nes que ha de generar la UC (aunque solamen-
mencionadas all, interconectadas como muestra
te dos de ellas salen de la UCP para gobernar
la Figura 1.1. Comparndola con la Figura 0.23,
a la memoria y a los perifricos; recuerde que
pueden observarse tres diferencias:
la UCP, Unidad Central de Procesamiento, est
La interconexin se hace a travs de unas formada por la UC y la UAL).
vas o canales, que en adelante llamare-
Las unidades de entrada y salida (un teclado y
mos buses, a los que pueden acceder varias
una pantalla de texto) se conectan a esos buses
unidades. El bus D transporta las informacio-
a travs de controladores de perifrico, o con-
nes procedentes de o con destino a la memoria
troladores de entrada/salida (CTEC y CPAN
principal (MP): datos de la MP hacia la unidad
en la figura). La funcin de estos controladores
aritmtica y lgica (UAL), instrucciones de la
tiene cierto parecido con la de la UC, en el sen-
MP hacia la unidad de control (UC), resultados
tido de que generan micrordenes (en respues-
de la UAL hacia la MP; el bus D sirve tambin
ta a las micrordenes de la UC), pero son mi-
para transportar datos entre la UAL y los perif-
crordenes especficas para gobernar a los pe-
ricos. El bus A transporta direcciones de la UC
rifricos, no para ejecutar instrucciones.
a la MP o a los perifricos. El bus C agrupa a
todas las seales de control (micrordenes) ge- Junto a la UAL aparece un elemento llamado
neradas por la UC. Fsicamente (en los niveles AC (por acumulador) cuya funcin explica-
de circuito lgico y circuito elctrico) un bus es remos enseguida.
un conjunto de lneas binarias1 . El bus D tie- Seguiremos llamando a la memoria principal
(MP), aun cuando de momento no vamos a consi-
1
Esto quiere decir que cada una de esas lneas puede es- derar ninguna memoria secundaria.
tar en cada momento en uno de entre dos estados: el estado
1 (o alto) y el estado 0 (o bajo). Esto, en el nivel de corresponder, por ejemplo, a +5v. y 0 a 0v. Para ms
de circuito lgico; en el nivel de circuito elctrico, 1 pue- detalles, vase el Apndice B.
1.2. Modelos estructural y procesal 49

Memoria la direccin en el bus A, los doce bits en el bus D


y hace una peticin de escritura, y al cabo de ese
Para estudiar el nivel de mquina convencional mismo tiempo los bits han quedado registrados. El
sin profundizar en sus detalles procesales basta de- tiempo de acceso es independiente de la direccin,
finir la MP como un componente en el que se pue- es decir, el modo de acceso es directo, o aleatorio
den registrar (almacenar, o escribir) o recuperar (Apartado 0.8).
(extraer, o leer) informaciones binarias. Slo hay
que concretar el nmero de bits que se escriben o
se leen en una operacin de acceso a la MP (es de- Unidad aritmtica y lgica
cir, la longitud de palabra), el nmero mximo La UAL tiene dos entradas, que son operandos
de palabras que puede contener (o capacidad), y de doce bits, y una salida, que es un resultado tam-
cmo se accede a ella para escribir una informa- bin de doce bits. Las operaciones posibles son s-
cin o para leerla. lo cuatro:
La longitud de palabra de la MP de Smplez es
Poner a cero los doce bits de la salida.
doce bits y su capacidad es 512 palabras2 . Cada
una de las 512 palabras queda identificada por una Sumar los dos operandos de las entradas.
direccin, nmero entero comprendido entre 0 y Transferir a la salida el operando presente en la
511 (Figura 1.2). entrada 2.
Para leer (extraer) una palabra de la MP la UC Decrementar en una unidad el operando pre-
pone su direccin en el bus A y hace una peticin sente en la entrada 1.
de lectura (mediante una microorden que enva por Asociado a la UAL, hay un componente que
el bus C); al cabo de un tiempo (0,1 s = 100 ns) puede almacenar doce bits, el acumulador. Como
el contenido de esa direccin (los doce bits de la puede verse en la Figura 1.3, la salida de la UAL
palabra) queda copiado en el bus D. Inversamente, se deposita siempre en el acumulador, y el conte-
para escribir (almacenar) una palabra, la UC pone nido de ste se introduce siempre en la entrada 1
de la UAL. Por tanto,
12 bits
direcciones Poner a cero es poner ceros en los doce bits del
0 palabra 0 acumulador.
1 palabra 1 Para la suma, un operando es el contenido en el
acumulador y el otro viene de la MP (a travs
2 palabra 2
del bus D), y el resultado queda en el acumula-
dor.
La transferencia es de un operando que viene

AC
511 palabra 511
pac
sum
Figura 1.2 Memoria principal de Smplez. UAL tra2
dec1
2
Como luego veremos, el nmero 512 no es caprichoso:
es una potencia de 2, y est relacionado con el formato de ins- operando 1 operando 2
trucciones. Tambin veremos que cuatro de las 512 palabras (del bus D)
no pueden utilizarse como tales, porque estn reservadas para
las comunicaciones con los perifricos. Figura 1.3 Unidad aritmtica y lgica de Smplez.
50 Leccin 1. Smplez

de la MP (o del teclado) al acumulador. 1. extrae (lee) una instruccin almacenada en una


Decrementar es restar una unidad al contenido palabra de la MP;
del acumulador. 2. interpreta esa instruccin, es decir, descodifica
En todas estas operaciones, el contenido previo la instruccin y genera las micrordenes para
del registro acumulador3 queda sustituido por uno que las otras unidades (las que sean necesarias)
nuevo. se pongan en funcionamiento y lleven a cabo lo
que indica la instruccin;
3. genera la direccin de la MP en donde se
Dispositivos perifricos encuentra la siguiente instruccin a ejecutar;
normalmente, esta direccin se obtiene incre-
Smplez slo dispone de dos perifricos: un te-
mentando en una unidad la direccin de la ins-
clado y una pantalla de texto. La comunicacin
truccin en curso, pero si esta instruccin en
con ellos se establece, como detallaremos en el
curso es una instruccin de transferencia de
Apartado 1.12, a travs del acumulador. En cada
control (o bifurcacin) entonces la direc-
operacin elemental se transfiere (del acumulador
cin de la siguiente viene indicada en la misma
a la pantalla, o del teclado al acumulador) un ca-
instruccin en curso.
rcter codificado en el cdigo ISO Latin9.4
Una observacin importante es que este modelo Por razones de eficiencia que el lector compren-
de pantalla no es representativo de los monitores der en la Segunda Parte (Apartado 10.4), la gene-
actuales, que son grficos y se comunican de otro racin de la direccin normal (actual ms uno)
modo con el ordenador (Apartados 5.2 y 7.9). de la siguiente instruccin se hace ya en el paso 1,
de modo que el paso 3 no existe realmente; si se
trata de una bifurcacin, la direccin de la siguien-
Unidad de control te instruccin se genera en el paso 2 (despus de
descodificar).
La UC gobierna el funcionamiento de las dems Este bucle define, a grandes rasgos, el modelo
unidades para que las instrucciones se ejecuten y procesal de la mquina. Volveremos sobre l en la
hagan lo definido en el modelo funcional. Concre- Leccin 10.
tamente, repite de manera cclica los siguientes pa-
sos:
3
Un registro es una memoria que puede almacenar un n-
1.3. Modelo funcional
mero reducido de bits, en nuestro caso, una palabra de doce
bits. Los registros son, realmente, componentes del nivel de Un modelo funcional en el nivel de mquina
microarquitectura. No obstante, los componentes del nivel de convencional tiene dos componentes:
mquina convencional, es decir, las instrucciones, hacen refe-
rencia a ellos. Como veremos en la Segunda Parte, hay regis- Los convenios para la representacin de la in-
tros que puede utilizar el programador y otros que no (se dice formacin (datos e instrucciones) en la mqui-
que stos son transparentes al programador). En el caso de na; sta es la parte sintctica del modelo: la que
Smplez, el nico registro visible para el programador es el define la forma correcta de construir expresio-
acumulador.
4
La codificacin de caracteres se explica en el Aparta-
nes con los elementos del lenguaje (ceros y
do 3.3 y el cdigo ISO Latin9 puede consultarse en el Apn- unos).
dice A. Baste decir, de momento, que cada carcter tiene asig- El juego o repertorio de instrucciones, con una
nada una codificacin de ocho bits; por ejemplo, la de a es
01100001, y la de , 11100001. Cuando el bit que est ms
explicacin completa de lo que hace cada una;
a la izquierda es 0, la codificacin coincide con la definida sta es la parte semntica: la que define el sig-
por el cdigo ASCII de siete bits. nificado de las construcciones.
1.3. Modelo funcional 51

Para simplificar todo lo posible, supondremos Nmero Representacin


original interna Oct. Hex.
que los nicos tipos de informaciones con los que
(decimal) (binario)
puede tratar Smplez son nmeros enteros no ne- 0 000000000000 0000 000
gativos comprendidos entre 0 y 4.095, caracteres 1 000000000001 0001 001
e instrucciones de la propia mquina. Veamos los 2 000000000010 0002 002
3 000000000011 0003 003
correspondientes formatos, o convenios para re-
4 000000000100 0004 004
presentarlos internamente. ..... ............. .... ....
9 000000001001 0011 009
10 000000001010 0012 00A
Representacin de nmeros
..... ............ .... ....
En la Leccin 3 estudiaremos de una manera ge- 15 000000001111 0017 00F
16 000000010000 0020 010
neral la representacin de la informacin numri- ..... ............ .... ....
ca en los ordenadores. En el caso de Smplez los ..... ............ .... ....
nmeros se representan por su equivalente en el 511 000111111111 0777 1FF
sistema de numeracin binario (o sea, 0, 1, 10, 11, 512 001000000000 1000 200
..... ............ .... ....
100, ... representan lo que en el sistema decimal 1.023 001111111111 1777 3FF
escribimos como 0, 1, 2, 3, 4, ...), utilizando los 1.024 010000000000 2000 400
doce bits de una palabra (es decir, completando ..... ............ .... ....
con ceros a la izquierda si es necesario), y slo 2.047 011111111111 3777 7FF
2.048 100000000000 4000 800
esos doce bits. Esto implica que hay una limita- ..... ............ .... ....
cin en cuanto al mximo nmero representable. 4.094 111111111110 7776 FFE
En efecto, el equivalente decimal del nmero bi- 4.095 111111111111 7777 FFF
nario 111111111111 es 212 1 = 4,095. Nume-
raremos (en decimal) los bits que forman una pa- Tabla 1.1 Representacin de nmeros en Smplez.
labra de 0 a 11, de derecha a izquierda, de modo
que el bit 0 ser el bit de menor peso, o bit menos pantalla y poder recibir una secuencia de caracte-
significativo (posicin de peso 0 en la representa- res desde del teclado. Estas secuencias de carac-
cin binaria). En la Tabla 1.1 pueden verse algunos teres se llaman cadenas. Cada carcter se puede
ejemplos de representacin de nmeros5 . representar, como ya hemos dicho, por su codifi-
cacin en ISO Latin9, y los caracteres que forman
una cadena se almacenan en direcciones consecu-
Representacin de caracteres tivas de la memoria, un carcter en cada palabra
Para la comunicacin con el usuario es necesa- (en sus ocho bits menos significativos). No obs-
rio poder enviar una secuencia de caracteres a la tante, nuestra mquina no tiene instrucciones que
entiendan caracteres, por lo que este convenio
5
En el Apndice A se presentan tambin los sistemas de no forma parte de su modelo funcional.
numeracin. Digamos aqu simplemente, por si el lector tiene
dificultades para interpretar la Tabla 1.1, que las columnas
Oct. y Hex. son las representaciones de los nmeros en Representacin de instrucciones
los sistemas de bases 8 y 16 respectivamente. En el nivel de
mquina convencional se utiliza con frecuencia uno u otro Las instrucciones de Smplez tienen, como las
de estos sistemas simplemente como truco para no tener de la mquina de von Neumann (Figura 0.27),
que escribir en el engorroso sistema binario. En efecto, cada
dgito octal equivale a un grupo de tres dgitos binarios (tres
dos campos: el cdigo de operacin, CO, y la di-
bits), y cada dgito hexadecimal equivale a un grupo de cuatro reccin del operando, CD, pero ahora cada ins-
bits. truccin ocupa una sola palabra de doce bits. El
52 Leccin 1. Smplez

formato de instrucciones es el representado en la equivalente a decir que el contenido del acumula-


Figura 1.4. En la parte superior hemos numerado dor sea cero (en los ordenadores que tienen ms re-
los bits de la palabra: CD ocupa los bits 0 a 8, y gistros aritmticos esas instrucciones pueden ope-
CO est en los bits 9,10 y 11. rar con uno cualquiera de ellos, y la condicin ya
no puede expresarse as).
11 9 8 0

CO CD Representacin simblica
La representacin binaria es la nica que en-
Figura 1.4 Formato de instrucciones de Smplez.
tiende la mquina, pero para la mente humana re-
sulta demasiado engorrosa. Una primera solucin
es escribir los contenidos de las palabras en he-
Repertorio de instrucciones xadecimal o en octal, sistemas de numeracin que
El repertorio de Smplez consta de ocho instruc- tienen la ventaja de que la conversin al sistema
ciones, identificadas por un cdigo de operacin binario es inmediata6 . As, si tenemos el nmero
de tres bits. Estas instrucciones, con su cdigo de 447, que estara representado dentro de la mqui-
operacin (binario y octal), su significado (que tie- na como 000110111111, su representacin en
ne que interpretar, es decir, descodificar y ejecu- octal se obtiene agrupando de tres en tres los bits:
tar la UC) y un cdigo simblico o nemnico (que 000 |{z}
110 |{z}
111 |{z}
111
utilizaremos para representar los programas en un
|{z}
0 6 7 7
lenguaje ms inteligible que el binario y que el oc-
tal) aparecen en la Tabla 1.2. Cinco de las instruc- resultando, en octal, 0677. Si agrupamos los bits
ciones (ST, LD, ADD, BR y BZ) hacen referencia a de cuatro en cuatro:
memoria (las tres primeras, a la direccin de un 0001
| {z } 1011
| {z } 1111
| {z }
operando, las otras dos, a la direccin de la instruc- 1 B F
cin que la UCP debe ejecutar a continuacin), y
resulta, en hexadecimal, 1BF.
tres no (CLR, DEC y HALT).
Lo mismo podemos hacer para las instruccio-
Como vemos, es la longitud de palabra y el
nes. En el caso de Smplez, como el cdigo de
formato de instrucciones elegido, en el que hay
operacin tiene siempre tres bits, resulta ms ade-
nueve bits para la direccin, lo que limita la ca-
cuado el convenio octal, porque de este modo el
pacidad mxima de memoria (direccin mxima:
primer dgito corresponde siempre al cdigo de
29 1 = 511).
operacin. Por ejemplo, la instruccin sumar al
Las instrucciones de bifurcacin, BR y BZ, le in-
acumulador el contenido de la direccin decimal
dican a la UC que la siguiente instruccin a ejecu-
10 se guarda en la mquina en binario con doce
tar se encuentra en la direccin de la MP indicada
bits: 010000001010, y podemos escribirla co-
por el campo CD. BZ condiciona esta bifurcacin a
mo 2012: el primer dgito, 2, es el cdigo de
que el ltimo resultado en la UAL haya sido cero.
operacin de sumar, y los tres siguientes, 012,
Recuerde que las operaciones en la UAL son su-
representan la direccin 10 (decimal) escrita en el
mar al acumulador (lo que ocurrir cuando la UC
sistema octal.
ejecute ADD), transferir al acumulador (LD), de-
En adelante, y para facilitar ms la lectura
crementar el acumulador (DEC) y poner a cero el
(nuestra lectura, no la de la mquina), siempre que
acumulador (CLR). Por tanto, en Smplez el resul-
se trate de una instruccin escribiremos tambin, a
tado de la UAL siempre se introduce en el acumu-
lador, y la condicin para la bifurcacin en BZ es 6
Esto se explica detalladamente en el Apndice A.
1.3. Modelo funcional 53

CO CO CO Significado
(bin.) (oct.) (nem.)
000 0 ST Almacena (STORE) el contenido del acumulador en
la palabra de memoria cuya direccin se indica en el
campo CD. Es decir, lleva los 12 bits del acumulador a
esa palabra, con lo que desaparece de ella lo que tuviera
anteriormente (pero permaneciendo en el acumulador).
001 1 LD Carga (LOAD) en el acumulador el contenido de la
palabra de memoria cuya direccin se indica en el cam-
po CD. Es decir, es la inversa de la anterior: lleva los 12
bits de la palabra al acumulador, borrando lo que ste
contuviese previamente.
010 2 ADD Suma (ADD) al acumulador el contenido de la pala-
bra de memoria de direccin especificada en CD, dejan-
do el resultado en el propio acumulador (y borrando as
su contenido previo).
011 3 BR Bifurca (BRANCH) sin condiciones a la direccin
indicada en CD: le dice a la unidad de control que la
siguiente instruccin a ejecutar es la almacenada en la
direccin dada por CD.
100 4 BZ Bifurca si el resultado de la ltima operacin realizada
por la UAL ha sido cero; en caso contrario sigue con la
secuencia normal, y la instruccin no hace nada.
101 5 CLR Pone a cero (CLEAR) el acumulador (12 ceros bina-
rios).
110 6 DEC Decrementa en una unidad el contenido del acumulador
(y deja el resultado en l).
111 7 HALT Hace pararse a la mquina, es decir, hace que no se
vuelva al paso 1 en el ciclo que realiza la UC.
Tabla 1.2 Repertorio de instrucciones de Smplez.

continuacin, una representacin simblica: el c- Lenguaje de mquina y programas


digo de operacin nemnico segn la Tabla 1.2 se-
guido (si se trata de una instruccin con referencia
Los formatos y el repertorio de instrucciones
a la memoria) de la direccin en decimal prece-
definen el lenguaje de mquina de Smplez. Con
dida del smbolo /, que quiere decir direccin
l podemos escribir programas, es decir, secuen-
absoluta (veremos a partir de la Leccin siguien-
cias de instrucciones para resolver problemas. El
te que hay otras formas de especificar la direccin
programador en este lenguaje necesita saber dn-
de la MP a la que hace referencia una instruccin).
de quedar almacenado su programa y sus datos
As, para la instruccin anterior escribiremos:
dentro de la MP. Supondremos que las instruccio-
nes y los dems contenidos (constantes, palabras
2012 ADD /10 reservadas para variables, etc.) de un programa se
almacenan siempre, de manera consecutiva, a par-
54 Leccin 1. Smplez

tir de la palabra de direccin 0, y que existe algn


0 0 0 0 0 0 0 0 0 0 0 0
procedimiento para almacenar, o cargar, los pro-
gramas en la MP previamente a su ejecucin.
1 1 1 1 1 1 1 1 1 1 1 1
Para fijar las ideas, imaginemos que Smplez
no
tiene doce conmutadores de dos posiciones (0
y 1) y tres pulsadores (introducir direccin,
si INTRODUCIR INTRODUCIR EJECUTAR
introducir contenido y ejecutar) en la parte ALIMENTACION DIRECCION CONTENIDO

frontal de su caja, como muestra la Figura 1.5. Ini-


cialmente se carga manualmente el programa paso Figura 1.5 Aspecto fsico de Smplez.
a paso mediante el siguiente procedimiento:
1. Se ponen todos los conmutadores en la posicin
0 y se pulsa introducir direccin.
1.4. Programacin
2. Se ponen los conmutadores en las posiciones
La programacin es una actividad que se rea-
0 o 1 que correspondan a la primera de
liza en el nivel de mquina convencional y, ms
las instrucciones y se pulsa introducir conte-
frecuentemente, en el nivel de mquina simblica.
nido.
Consiste en hacer uso del modelo funcional para
3. Se ponen los once primeros conmutadores a construir programas que definen (para quien uti-
0 y el ltimo a 1 y se pulsa introducir di- liza estos programas) una mquina de nivel supe-
reccin. rior8 . El modelo funcional de una mquina (ya sea
4. Se ponen los conmutadores en las posiciones convencional o simblica) est definido por su len-
correspondientes al contenido binario que ten- guaje. Como aqu estamos en el nivel de mquina
ga que ir en la direccin 1 y se pulsa introducir (convencional) programaremos en un lenguaje de
contenido. mquina (convencional): el lenguaje de mquina
5. ... de Smplez.
A continuacin desarrollaremos cinco ejemplos
Y as sucesivamente hasta que se han cargado to-
de programas en el lenguaje de mquina de Sm-
dos los contenidos binarios, cada uno en su di-
plez, en orden creciente de complejidad. El pri-
reccin. Finalmente, al accionar el tercer pulsador
mero es muy sencillo, casi trivial. El segundo sir-
(ejecutar) el ordenador pasara al modo de eje-
ve para presentar la idea, fundamental, de bucle.
cucin automtica partiendo desde la instruccin
Los dos siguientes requieren una explicacin pre-
almacenada en la direccin 0. Este modo de traba-
via sobre la posibilidad de que un programa modi-
jo no es desde luego nada cmodo ni productivo,
fique sus propias instrucciones. El ltimo introdu-
pero as se proceda en algunos de los ordenadores
ce un concepto muy importante en programacin
primitivos. Actualmente lo normal es tener graba-
cuya materializacin en Smplez es difcil pero po-
do en una zona de la MP un pequeo programa
sible: el de subprograma.
que se ejecuta siempre al arrancar7 y que, jun-
to con otros programas que comentaremos en los 8
As, el usuario de la mquina simblica (programador
Apartados 4.2 y 17.5, permite liberar al usuario de
en lenguaje de alto nivel) utiliza un programa (procesador del
tan tediosas manipulaciones. lenguaje) que al ejecutarse sobre la mquina convencional de-
fine una mquina simblica. Y el usuario de una aplicacin
7
Esta zona de memoria es la llamada ROM (memoria final utiliza un programa normalmente escrito en un lenguaje
de slo lectura, Apartados 9.4 y B.3), y el pequeo progra- de alto nivel, es decir, que se ejecuta sobre la mquina sim-
ma es el cargador inicial, o bootstrap loader (Aparta- blica. Esta jerarqua de niveles, ya introducida en el Aparta-
dos 3.8, 3.10 y 18.9). do 0.7, se estudiar con ms detalle en la Leccin 17.
1.5. Suma de dos nmeros 55

1.5. Suma de dos nmeros El programa formado por esas cuatro instruc-
ciones se deber cargar en la memoria a partir de
Se trata, en este primer ejemplo, de sumar los la direccin 0. En binario, naturalmente. Es decir,
contenidos de las direcciones 10 y 11 (expresadas tras la carga del programa las cuatro primeras pa-
en decimal) y llevar el resultado a la direccin 12. labras de la MP quedarn as:
Teniendo en cuenta el repertorio de instruccio-
nes a nuestra disposicin, la operacin puede reali- Direccin de la MP Contenido
zarse con tres instrucciones: una que cargue en el 0 001000001010
acumulador el contenido de la direccin 10; otra 1 010000001011
que sume al contenido del acumulador el conteni- 2 000000001100
do de la direccin 11, y una tercera para almacenar 3 111000000000
el resultado (obtenido en el acumulador) en la di-
reccin 12. La primera, escrita con los convenios Al comenzar la ejecucin, la UCP extrae la ins-
que hemos explicado en el Apartado 1.3, ser: truccin almacenada en la direccin 0, la desco-
1012 LD /10 difica y ve que le pide cargar en el acumulador el
contenido de la direccin 10, por lo que extrae ese
La segunda instruccin (sumar al acumulador el contenido y lo escribe (a travs del bus D) en el
contenido de 11): acumulador, luego pasa a extraer la instruccin al-
2013 ADD /11 macenada en la direccin 1, etc: para cada instruc-
Y la tercera (llevar el resultado obtenido en el cin la UC sigue el modelo procesal descrito al
acumulador a la direccin 12): final del Apartado 1.2.
0014 ST /12 Suponiendo que previamente a la ejecucin se
Y finalmente, podemos aadir han cargado los nmeros 3 y 5 en las direcciones
10 y 11, tendremos, tras la ejecucin del progra-
7000 HALT
ma, el mapa de memoria de la Figura 1.6 (donde
para detener la ejecucin9 . el resultado es 10 porque est expresado en oc-
9
Al interpretar esta instruccin (como tambin las otras tal). En estos mapas se representa la MP como un
que no hacen referencia a la memoria, CLR y DEC) la UC slo rectngulo formado por una sucesin vertical de
atiende al cdigo de operacin; lo que se ponga en el campo casillas que corresponden a las posiciones (pa-
de direccin es indiferente (aqu hemos puesto ceros). En el
documento de Burks, Goldstine y von Neumann comentado labras) de la memoria.
en el Apartado 0.8 se deca:
Hay una orden ms que el rgano de control de- 0 1012
be ejecutar. Tiene que haber algn medio por el cual 1 2013
el computador pueda avisar al operador cuando una programa
2 0014
computacin termina o cuando se llega a un punto pre- 3 7000
viamente determinado. De aqu que se necesite una or-
den que le diga al computador que se pare y encienda
una luz o haga sonar un timbre. 10 0003 operando 1
Ahora bien, esta instruccin se utiliza muy raramente en la 11 0005 operando 2
actualidad: los programas se ejecutan bajo el control de otros 12 0010 resultado
programas que forman parte del llamado sistema operativo y
que estudiaremos en la Tercera Parte. Cuando un programa
termina su ejecucin, el sistema operativo hace que se eje-
cute algn otro programa que pudiera estar a la espera, y si
no hubiera ninguno entra en un bucle de espera. Pero de 511
momento, y para simplificar, incluiremos en todos nuestros
programas la instruccin HALT. Figura 1.6 Mapa de memoria para el Programa 1.1.
56 Leccin 1. Smplez

Direcc.MP Contenido Contenido Comentarios


(decimal) (octal) (nemnico)
--------- --------- --------- -----------------------
[0] 1012 LD /10 ; carga el primer numero
[1] 2013 ADD /11 ; le suma el segundo
[2] 0014 ST /12 ; almacena el resultado
[3] 7000 HALT

Programa 1.1 Suma de dos nmeros en Smplez.

En adelante escribiremos entre corchetes, a la que se define as:


izquierda de cada nmero o instruccin, la direc- t0 = 0; t1 = 1; tn = tn1 + tn2 (n > 1)
cin (en decimal) de la MP en la que queda alma- Es decir, cada trmino de la sucesin, a partir
cenado el contenido correspondiente. En definiti- del tercero, se calcula sumando los dos anteriores.
va, el Programa 1.1 permite resolver en Smplez el La suma total de trminos se puede ir acumulando
problema enunciado. (El smbolo ; seala que lo conforme se calculan:
que le sigue en la lnea es un comentario).
s0 = 0; sn = tn + sn1 (n > 0)
y nuestro problema, ejecutado a mano, se resol-
1.6. Construccin de bucles vera como indica la siguiente tabla:

El hecho de que el programa est presente en la t0 = 0; s0 = 0;


MP durante toda su ejecucin, junto con la exis- t1 = 1; s1 = 1;
tencia de instrucciones de bifurcacin, hace muy t2 = 0 + 1 = 1; s2 = 1 + 1 = 2;
fcil disear programas con bucles10 . Vemoslo t3 = 1 + 1 = 2; s3 = 2 + 2 = 4;
apoyndonos en un ejemplo. t4 = 2 + 1 = 3; s4 = 3 + 4 = 7;
t5 = 3 + 2 = 5; s5 = 5 + 7 = 12;
Nos proponemos calcular la suma de los diez
t6 = 5 + 3 = 8; s6 = 8 + 12 = 20;
primeros trminos de la sucesin de Fibonacci, t7 = 8 + 5 = 13; s7 = 13 + 20 = 33;
10
Como se deca en el documento de Burks, Goldstine y
t8 = 13 + 8 = 21; s8 = 21 + 33 = 54;
von Neumann, t9 = 21 + 13 = 34; s9 = 34 + 54 = 88
La utilidad de un computador automtico reside en Tabla 1.3. Clculo de la suma de diez trminos de la
la posibilidad de hacer uso repetidamente de una de-
sucesin de Fibonacci.
terminada secuencia de instrucciones, siendo el nme-
ro de veces que se itera o bien preasignado, o bien de-
pendiente de los resultados de la computacin. Cuando Se observar que en cada lnea, a partir de la ter-
la iteracin se ha completado habr que seguir una se- cera, repetimos las mismas operaciones: sumamos
cuencia de rdenes [instrucciones] diferente, de modo los dos trminos anteriores para obtener el nuevo,
que en la mayora de los casos tenemos que dar dos
trenes de rdenes paralelos precedidos por una indica-
y ste se lo sumamos a la suma anterior para te-
cin de la rutina a seguir. Esta eleccin puede hacer- ner la nueva suma. nicamente hay que guardar
se depender del signo de un nmero. Consecuentemen- memoria de los dos trminos anteriores y de la
te, introducimos una orden (la orden de transferencia suma anterior. Nuestro programa deber tener tres
condicionada) que, dependiendo del signo de un deter-
minado nmero, har que se ejecute, de entre las dos
palabras de la MP reservadas para esta funcin.
rutinas, la adecuada. Llammosles, de momento (luego especificaremos
sus direcciones) con nombres simblicos: ULT
1.6. Construccin de bucles 57

(ltimo trmino calculado), PEN (penltimo) y 0


SUM (suma de todos los anteriores). Programa
Lo primero que tendr que hacer el programa 22

ser dar el valor inicial 0 a PEN, 1 a ULT y 0+1=1 a


SUM. Luego deber calcular la suma de PEN y ULT;
ste ser el trmino siguiente (llammosle SIG) 46 CONT
que habr de sumarse a SUM para actualizarla. Es- 47 PEN
tas dos ltimas operaciones (PEN+ULTSIG, y 48 ULT
SIG+SUMSUM) debern repetirse ocho veces, pe- 49 SIG
ro teniendo cuidado de que a cada paso hay que 50 SUM
actualizar PEN y ULT. En efecto, de un paso a otro, 51 1

SIG debe pasar a ser ULT, y ULT, PEN. El algorit- 52 8

mo, expresado en seudocdigo, puede ser ste11 .


511
PEN = 0; ULT = 1; SUM = 1;
repetir 8 veces Figura 1.7 Mapa de memoria para el Programa 1.2.
SIG = PEN + ULT;
SUM = SIG + SUM;
PEN = ULT; 5000 CLR ; 0
ULT = SIG 0057 ST /47 ; a PEN
fin repetir 1063 LD /51 ; 1
0060 ST /48 ; a ULT
Para obtener la versin de este algoritmo en el 0062 ST /50 ; a SUM
lenguaje de mquina de Smplez lo primero que
hemos de hacer es asignar posiciones de la MP Las instrucciones que corresponden al cuerpo
para guardar las variables PEN, ULT, SIG y SUM. central del seudocdigo (las que materializan a las
Supongamos que asignamos, respectivamente, las operaciones que se repiten ocho veces) son:
direcciones 47, 48, 49 y 50 en decimal (57, 60, 61 1057 LD /47 ; PEN
y 62 en octal). Necesitamos tambin tener la cons- 2060 ADD /48 ; PEN+ULT
tante 1 para iniciar ULT y SUM. Supongamos de mo- 0061 ST /49 ; a SIG
mento que, cuando se vaya a ejecutar el programa, 2062 ADD /50 ; SIG+SUM
esta constante est ya disponible en la direccin 0062 ST /50 ; a SUM
51 (63 octal) (vase el mapa de memoria de la Fi- 1060 LD /48 ; ULT
gura 1.7). La asignacin de valores iniciales puede 0057 ST /47 ; a PEN
1061 LD /49 ; SIG
hacerse con las siguientes instrucciones:
0060 ST /48 ; a ULT
11
El seudocdigo es un lenguaje que el lector que tenga
mnimos conocimientos de algn lenguaje de programacin Ahora bien, estas operaciones han de repetirse
de alto nivel no tendr ninguna dificultad en interpretar. El ocho veces. Podramos pensar en repetir ocho ve-
smbolo = significa asignar a lo que aparece a la izquierda
el valor de (o el resultado de calcular) lo que hay a la dere-
ces el mismo conjunto de instrucciones, pero esto
cha. Como en todo lenguaje procedimental, el orden de las no sera muy razonable (especialmente, si en vez
sentencias es importante; en particular, las dos ltimas no po- de slo ocho fueran cientos o miles...). En su lu-
dramos intercambiarlas, porque al hacer ULT = SIG se mo- gar, construiremos un bucle mediante una instruc-
difica el valor asignado a ULT, con lo que PEN = ULT, si se
pusiera despus, hara algo distinto de lo pretendido. El sm-
cin de bifurcacin, de modo que, tras la ltima,
bolo ; aqu es un separador, no como en el Programa 1.1, se vuelva a la primera. Es preciso controlar el bu-
que marca el comienzo de un comentario. cle, para que se recorra exactamente ocho veces, y
58 Leccin 1. Smplez

Direcc.MP Contenido Contenido Comentarios


(decimal) (octal) (nemnico)
--------- --------- --------- -------------------------
[0] 5000 CLR ; 0
[1] 0057 ST /47 ; a PEN
[2] 1063 LD /51 ; 1
[3] 0060 ST /48 ; a ULT
[4] 0062 ST /50 ; a SUM
[5] 1064 LD /52 ; 8
[6] 0056 ST /46 ; a CONT
[7] 1057 LD /47 ; PEN
[8] 2060 ADD /48 ; PEN+ULT
[9] 0061 ST /49 ; a SIG
[10] 2062 ADD /50 ; SIG+SUM
[11] 0062 ST /50 ; a SUM
[12] 1060 LD /48 ; ULT
[13] 0057 ST /47 ; a PEN
[14] 1061 LD /49 ; SIG
[15] 0060 ST /48 ; a ULT
[16] 1056 LD /46 ; CONT
[17] 6000 DEC ; lo decrementa
[18] 4025 BZ /21 ; si es cero, sale
; del bucle
[19] 0056 ST /46 ; si no, lo lleva a CONT
[20] 3007 BR /7 ; y vuelve al bucle
[21] 7000 HALT
....
[51] 0001 ;constante 1
[52] 0010 ;constante 8

Programa 1.2 Suma de los diez primeros trminos de la sucesin de Fibonacci.

eso puede hacerse mediante una variable (una pa- so de Smplez resulta ms conveniente proceder al
labra de la memoria)12 que acta como contador. revs: iniciar el contador con ocho y decrementar-
Por ejemplo, si inicialmente ponemos el contador lo hasta que valga cero (lo que resulta fcil con las
a cero, y cada vez que ejecutamos las instrucciones instrucciones DEC y BZ). Reservemos la direccin
del bucle lo incrementamos en una unidad, cuando 46 (56 octal) para ese contador, y pongamos en la
haya llegado a ocho tendremos que salir. En el ca- direccin 52 (64 octal) la constante 8 (para iniciar
12
el contador).
El concepto abstracto de variable de los lenguajes de
alto nivel se materializa (se implementa) en el nivel de m- El resultado final es el Programa 1.2. El control
quina convencional como el contenido de una posicin de la del bucle se realiza mediante una instruccin de
MP. CONT, PEN, ULT, SIG y SUM son las variables de nuestro
algoritmo, implementadas como los contenidos de las direc-
bifurcacin condicionada: cuando el contador ha
ciones 46 a 50. Las palabras de direcciones 51 y 52 contienen llegado a cero, la ejecucin de BZ provoca la salida
las constantes 1 y 8. del bucle.
1.7. Programas cambiantes 59

1.7. Programas cambiantes 1. al ejecutarse la instruccin almacenada en 0 se


pondra a cero el acumulador;
Es posible disear programas que se modifiquen 2. se pasara a la siguiente instruccin, que es la
a s mismos en el curso de su ejecucin. Esto es ab- que hay en la direccin 1, y que, como hemos
solutamente desaconsejable desde el punto de vis- visto, corresponde a parar.
ta de la ingeniera del software, pero era el nico Por tanto, nunca se llegara a ejecutar la instruc-
recurso en la mquina de von Neumann (y es el cin almacenada en la direccin 8.
nico en Smplez) para resolver los tipos de pro-
Si lo que queremos es guardar en la direccin
blemas que luego plantearemos.
1 la constante 4.000, y que este contenido nunca
sea interpretado como instruccin, hay una forma
Qu contiene una palabra? muy fcil de hacerlo: basta con introducir en la
Sabemos que tanto las instrucciones como los direccin 0 una instruccin de bifurcacin incon-
datos se almacenan en la memoria de Smplez co- dicionada. As, nuestro programa podra ser:
dificados, de acuerdo con unos convenios preesta- [0] 3002 BR /2
blecidos (formatos), en palabras de doce bits. Por [1] 7640
tanto, el contenido de cualquier palabra puede ser [2] 5000 CLR
interpretado como una instruccin o como un dato. etc.
Por ejemplo, supongamos que una determinada
palabra contiene el siguiente conjunto de bits: Modificacin de instrucciones
111110100000
El hecho de que cualquier palabra pueda inter-
Podemos decir que en esta palabra est almace- pretarse como una instruccin o como un dato per-
nado el nmero octal 7640 (que corresponde, en mite que el mismo programa pueda modificar, en
decimal, a 7 83 + 6 82 + 4 8 = 4.000) o el curso de su ejecucin, las instrucciones que for-
la instruccin parar (al ser el cdigo de opera- man parte del mismo13 . Para ilustrar esta posibi-
cin el correspondiente a parar, el resto de los bits lidad, y su utilidad, imaginemos un programa que
no cuentan), y ambas cosas son ciertas. El que la contenga, entre otras, las siguientes instrucciones:
mquina lo interprete como una cosa u otra depen-
de de cmo est escrito el conjunto del programa. [0] 3002 BR /2
[1] 0001
Continuando con el ejemplo, supongamos que esa [2] 5000 CLR
palabra est en la direccin 1, y que en un determi- [3] ...
nado momento se ejecuta la siguiente instruccin, ...
previamente almacenada en la direccin 8: [8] 1144 LD /100
[8] 2001 ADD /1 [9] ...
...
Traducida a lenguaje natural, esta instruccin le [15] 1010 LD /8
dice a la unidad de control: suma al acumulador [16] 2001 ADD /1
el contenido de la palabra de direccin 1. El re- [17] 0010 ST /8
sultado de su ejecucin ser que al contenido del [18] ...
acumulador se le habr sumado 4.000. Ahora bien, ...
[25] 3010 BR /8
si en la direccin 0 hay, por ejemplo:
[26] ...
[0] 5000 CLR
13
Es la idea que estaba ya en el documento histrico que
que corresponde a la instruccin poner a cero el venimos citando repetidamente: vase la descripcin de la
acumulador, entonces resultara lo siguiente: UC en el Apartado 0.8.
60 Leccin 1. Smplez

Cuando se ejecuta por vez primera la instruc- MP ANTES MP DESPUES


cin [8] se carga en el acumulador lo que haya en
la direccin 100. Ms adelante, con la instruccin a) se ejecuta la instruccion almacenada en [8]
(por primera vez)
[15] se carga el contenido de la palabra de direc-
cin 8, con la [16] se le suma una unidad (conte-
nido de la palabra de direccin 1) , y con la [17] el
8 1144 LD /100 8 1144
resultado, es decir,
1145 LD /101
se deja en la direccin 8. Siguen luego unas ins-
trucciones que realizan algn procesamiento que b) se ejecutan las instrucciones almacenadas en
[15], [16] y [17]
ahora no viene al caso, y con la [25] se bifurca a
la direccin 8. Al ejecutar por segunda vez esa ins-
truccin (la [8]) lo que interpreta la unidad de con-
8 1144 8 1145
trol es cargar en el acumulador el contenido de la
direccin 101 (Figura 1.8). A la tercera vez sera
102, etc. Vemos as que unas veces el contenido 15 1010 LD /8 15 1010
de la direccin 8 se interpreta como una instruc- 16 2001 ADD /1 16 2001
cin, mientras que otras (durante la ejecucin de 17 0010 ST /8 17 0010
[15][17]) se interpreta como un dato.
Esta tcnica de modificacin de instruccin
puede utilizarse, entre otras cosas, para tratar su-
cesivamente un grupo de palabras que ocupan una c) se ejecuta la instruccion almacenada en [8]
(por segunda vez)
determinada zona de la memoria (en el ejemplo, la
zona correspondiente a las direcciones 100 y su-
cesivas)14 . Sin embargo, como ya hemos dicho, es
8 1145 LD /101 8 1145
una tcnica poco recomendable, porque la depura-
cin y el mantenimiento de programas complejos
seran prcticamente imposibles. Actualmente to-
dos los ordenadores tienen en la UCP mecanismos
etc.
de hardware que permiten conseguir lo mismo de
manera ms cmoda y segura. Concretamente, en Figura 1.8. Ilustracin sobre la modificacin de una
la Leccin siguiente veremos que con un regis- instruccin.
tro de ndice podemos resolver los mismos pro-
14
Podemos hacer que la modificacin de las instrucciones
en el curso de la ejecucin afecte no ya al campo de direc- blemas que vamos a enunciar a continuacin con
cin, sino al mismo cdigo de operacin. Podramos conce- programas mucho ms cortos y claros.
bir programas que se modificasen drsticamente a s mismos
y hasta que creciesen y aprendiesen al cambiar frente a
En cualquier caso, en Smplez no hay otro modo
estmulos externos (Apartado 0.3). La idea es antigua, pero de conseguir que una instruccin se ejecute varias
los primeros experimentos en este nivel de mquina conven- veces referenciando en cada ocasin a una direc-
cional no dieron buenos resultados. Actualmente se trabaja en cin de memoria distinta. Veamos su aplicacin en
aprendizaje automtico con otras tcnicas, en niveles supe-
riores al de mquina convencional, o en un nivel equivalente
dos ejemplos en los que hay que recorrer zonas de
a ste pero con otros modelos no von Neumann (redes neu- memoria, y en un tercero en el que permite imple-
ronales). mentar subprogramas.
1.8. Suma de cien nmeros 61

1.8. Suma de cien nmeros como contador para que la instruccin ADD se
ejecute 99 veces. Como este contador se tiene que
Supongamos que hay cien nmeros almacena- ir actualizando a travs del acumulador (sumndo-
dos previamente en las direcciones 50 a 149, y que le una unidad en cada iteracin), es preciso ir sal-
queremos obtener su suma, guardndola en la 150. vando sucesivamente en la memoria (por ejemplo,
Una primera idea sera extender el programa del en la misma direccin del resultado final, la 150)
Apartado 1.5 y escribir esto: los resultados parciales de la suma.
[0] 1062 LD /50 En resumen, tendramos que escribir las instruc-
[1] 2063 ADD /51 ciones necesarias para implementar el siguiente al-
[2] 2064 ADD /52 goritmo:
[3] 2065 ADD /53 1. iniciar el contenido de [150] con el primer da-
[4] 2066 ADD /54 to (el de la direccin 50), e iniciar una palabra
... (que servir de contador) con el valor 0;
[99] 2225 ADD /149
[100] 0226 ST /150 2. sumar al contenido de [150] el de [51];
[101] 7000 HALT 3. actualizar el contador, sumndole una unidad;
si ha llegado al valor 99, parar; si no,
De entrada, hemos de decir que este programa
4. modificar la instruccin ADD /51 que inter-
no funcionara correctamente, puesto que al car-
viene en el paso 2, sumndole una unidad;
garlo en la memoria borrara ms de la mitad de
los datos que pretenden sumarse. En efecto, tiene 5. volver a 2.
ciento dos instrucciones, que se cargaran entre las Hay muchas variantes posibles. Por ejemplo, en
direcciones 0 y 101. lugar de iniciar la direccin 150 con el primer da-
Pero aparte de eso (que podra resolverse guar- to, se puede iniciar a cero y luego repetir cien ve-
dando los datos en otras direcciones), podemos di- ces la suma. Asimismo, en vez de modificar la ins-
sear un programa que hace lo mismo con muchas truccin ADD, se puede modificar LD. Pero de
menos instrucciones (y, lo que es ms importan- entre todas las variantes hay una que se adapta es-
te, que puede generalizarse fcilmente para sumar pecialmente bien a nuestra mquina:
cualquier nmero de datos). Como tenemos una instruccin para decremen-
Aplicaremos la misma idea del ejemplo de la tar el contenido del acumulador, es preferible que
sucesin de Fibonacci: disear un bucle. En este el contador tenga inicialmente el valor mximo y
caso, la nica instruccin que se repite es ADD, se vaya decrementando hasta llegar a 0. Lo mis-
que debe ejecutarse noventa y nueve veces, pero mo podemos hacer con la instruccin a modificar:
ahora nos encontramos con una dificultad nueva: a empezar por sumar la direccin ms alta e ir de-
cada paso por el bucle, el campo de direccin debe crementando en el bucle el campo de direccin:
incrementarse en una unidad. Esto implica, como 1. iniciar el contenido de [150] con el ltimo dato
hemos explicado ms arriba, cargar la instruccin (el de [149]), e iniciar una palabra (que servir
ADD /51 en el acumulador como si fuera un n- de contador) con el valor 99;
mero, sumarle una unidad y almacenarla en el mis- 2. sumar al contenido de [150] el de [148];
mo sitio que ocupaba. El resultado es que cuan-
3. decrementar el contador; si ha llegado al va-
do vuelva a ejecutarse ya no se interpretar como
lor 0, parar; si no,
ADD /51, sino como ADD /52, y as sucesi-
vamente. El control del bucle, es decir, la manera 4. modificar la instruccin ADD /148 que inter-
de decidir cundo hay que salir de l, puede ha- viene en el paso 2, restndole una unidad;
cerse mediante una palabra de memoria que acte 5. volver a 2.
62 Leccin 1. Smplez

Direcc.MP Contenido Contenido Comentarios


(decimal) (octal) (nemnico)
--------- --------- --------- ------------------------
[0] 3003 BR /3
[1] 0144 100 ;constante 100
[2] 0000 ;reservada para contador
[3] 1001 LD /1
[4] 0002 ST /2 ;inicia el contador
[5] 5000 CLR
[6] 2225 ADD /149 ;suma los nmeros
[7] 0226 ST /150 ;guarda resultado parcial
[8] 1002 LD /2
[9] 6000 DEC ;decrementa el contador
[10] 4021 BZ /17 ;si es cero, termina
[11] 0002 ST /2 ;si no, lo actualiza
[12] 1006 LD /6 ;modifica
[13] 6000 DEC ; la
[14] 0006 ST /6 ; instruccin [6]
[15] 1226 LD /150 ;carga resultado parcial
[16] 3006 BR /6 ;vuelve al bucle
[17] 7000 HALT

Programa 1.3 Suma de cien nmeros almacenados en la memoria.

El lector puede ahora analizar el Programa 1.3, para restar (restaramos 99 del contador y compro-
que traduce este algoritmo con una pequea varia- baramos si el resultado es o no es cero), pero no
cin: a la palabra de direccin 150 se le da el valor es as.
inicial 0 (no el ltimo dato), y se le suman los cien Parece que el problema fuera insoluble, y que
datos (y, consecuentemente, la instruccin de su- en Smplez no hubiera posibilidad alguna de hacer
ma inicial no es ADD /148, sino ADD /149). una bifurcacin condicionada a que el acumula-
Antes de terminar este Apartado, aprovechare- dor tenga un valor determinado distinto de cero.
mos el mismo ejemplo para ilustrar otro asunto: la Sin embargo, s hay una posibilidad, que vamos a
posibilidad de desbordamiento en la UAL, y c- esbozar, dejando como ejercicio al lector (Ejerci-
mo puede aprovecharse esa caracterstica (en prin- cio 9) el desarrollo del programa.
cipio, indeseable) del modelo funcional. Hemos dicho que, con el formato adoptado, el
Una ventaja del procedimiento seguido sobre la mximo nmero representable en la mquina es
versin inicialmente propuesta (la de incrementar 212 1 = 4.095. En binario: 111111111111.
el contador) es que no se precisa tener la constan- Qu ocurre si, teniendo el acumulador este
te 1 en memoria y extraerla para sumrsela al con- contenido, le sumamos una unidad? Se produce un
tador y a la instruccin. Pero si el lector intenta desbordamiento: como no cabe en el acumulador
hacer el programa correspondiente a esa versin se el bit 1 que debera aparecer a la izquierda, el
encontrar con un inconveniente mucho ms gra- resultado es: 000000000000.
ve: cmo se comprueba si el contador ha llegado Es decir, para la mquina, 4.095+1 = 0, y de
al valor 99 (o a 100)? El problema es que tene- igual modo 4.094+2 = 0, 4.093+3 = 0, etc.15
mos que introducir una instruccin de bifurcacin
As pues, la solucin consiste en iniciar el con-
condicionada al hecho de que el contador valga 99
tador con 4.09699 = 3.997 (7635 en octal); al su-
o no, y la nica instruccin de bifurcacin condi-
marle 99 unidades se obtiene el valor 0.
cionada disponible en Smplez est condicionada a
que el contenido del acumulador sea cero. No ha- 15
Hay que matizar, por tanto, la definicin de la operacin
bra problema si Smplez tuviera una instruccin suma en Smplez: se trata de una suma mdulo 4.096.
1.9. Intercambio de los contenidos de dos zonas de memoria 63

Direcc.MP Contenido Contenido Comentarios


(decimal) (octal) (nemnico)
--------- --------- ---------- --------------------------
[0] 3005 BR /5
[1] 0062 50 ;constante 50
[2] 0001 1 ;constante 1
[3] 0000 ;reservada para contador
[4] 0000 ;memoria intermedia
[5] 1001 LD /1 ;iniciacin
[6] 0003 ST /3 ; del contador
[7] 1310 LD /200 ;lleva palabra de zona B
[8] 0004 ST /4 ; a memoria intermedia
[9] 1144 LD /100 ;lleva palabra de zona A
[10] 0310 ST /200 ; a zona B
[11] 1004 LD /4 ;lleva memoria intermedia
[12] 0144 ST /100 ; a zona A
[13] 1003 LD /3
[14] 6000 DEC ;decremento del contador
[15] 4036 BZ /30 ;si ha llegado a cero,fin
[16] 0003 ST /3 ;si no, lo actualiza
[17] 1007 LD /7 ;modificacin
[18] 2002 ADD /2 ; de la
[19] 0007 ST /7 ; instruccin [7]
[20] 1011 LD /9 ;modificacin
[21] 2002 ADD /2 ; de la
[22] 0011 ST /9 ; instruccin [9]
[23] 1012 LD /10 ;modificacin
[24] 2002 ADD /2 ; de la
[25] 0012 ST /10 ; instruccin [10]
[26] 1014 LD /12 ;modificacin
[27] 2002 ADD /2 ; de la
[28] 0014 ST /12 ; instruccin [12]
[29] 3007 BR /7 ;vuelta al bucle
[30] 7000 HALT

Programa 1.4 Intercambio de dos zonas de memoria.

1.9. Intercambio de los contenidos El lector puede analizar el Programa 1.4, que re-
de dos zonas de memoria suelve el problema. Ahora son cuatro las instruc-
ciones a modificar en cada paso por el bucle. Se
Consideremos dos zonas, o grupos de palabras ha reservado una palabra, la de direccin 4, como
contiguas, en la MP: la zona A tiene 50 palabras, y 0 Programa
30
la primera de ellas es la de direccin 100; la zona
B tiene tambin 50 palabras, empezando por la di-
100
reccin 200. Nuestro programa debe intercambiar Zona A
totalmente las informaciones contenidas en ambas 149

zonas es decir, que el contenido de [100] pase a


[200] y el de [200] a [100], el contenido de [101] 200
Zona B
a [201] y el de [201] a [101], etc. (Figura 1.9).
249
Se trata, evidentemente, de una operacin repe-
titiva, para la que podemos, como en los ejemplos
anteriores, establecer un bucle controlado por un
contador para que las instrucciones de intercam- 511
bio, convenientemente modificadas en cada paso,
se ejecuten cincuenta veces en total. Figura 1.9 Mapa de memoria para el Programa 1.4.
64 Leccin 1. Smplez

memoria intermedia, o temporal. En efecto, si em- problemas. En Smplez no hay ninguna instruc-
pezramos por almacenar en [200] lo que contiene cin especfica, pero, aun as, con un poco de inge-
[100] destruiramos el contenido de [200], por lo nio pueden escribirse subprogramas y programas
que hemos de guardarlo temporalmente en algn que hacen uso de estos subprogramas. Vemoslo
sitio para despus llevarlo a [100]. con un ejemplo: escribiremos primero un progra-
La solucin propuesta recorre las zonas de ma para restar, y luego lo convertiremos en sub-
arriba a abajo, por lo que la modificacin de programa.
las instrucciones consiste en sumarles una unidad.
Tambin podra procederse al revs: empezar in-
tercambiando [149] y [249] y decrementar en cada
Un programa para restar
paso las instrucciones. En el repertorio de instrucciones de Smplez
no hay ninguna instruccin que permita restar del
acumulador el contenido de una palabra de la me-
1.10. Subprogramas moria, pero s tenemos una instruccin, DEC,
que le resta una unidad. Es fcil construir un bu-
Ocurre con mucha frecuencia que en varios cle para hacer esta operacin un nmero de veces
puntos de un programa hay que realizar una deter- igual a la cantidad a restar (suponiendo que el n-
minada secuencia de operaciones, siempre la mis- mero previamente contenido en el acumulador es
ma, con operandos distintos cada vez. Una solu- mayor o igual que el sustraendo; vanse los Ejer-
cin trivial es repetir esa secuencia cuantas veces cicios 10, 11 y 12).
sea necesario, pero ms racional es tenerla escrita As, para restarle 15 al contenido del acumula-
una sola vez en una zona de la memoria y llamar- dor podemos escribir el Programa 1.5, cuya pri-
la cuando sea necesario mediante una instruccin mera instruccin suponemos almacenada no en la
de bifurcacin que permita pasar a la primera ins-
truccin de la secuencia.
Ahora bien, para que la segunda solucin fun- Programa
cione correctamente hay que tomar dos precaucio-
llamada
nes: la primera, que antes de bifurcar a esa secuen-
cia (que en adelante llamaremos subprograma)
hay que dejar en algn lugar prefijado los datos llamada
sobre los que ha de operar (argumentos de en-
trada), y que despus de su ejecucin el subpro-
grama ha de devolver resultados al que lo llam
(argumentos de salida); esto se conoce como el
problema de la transmisin de argumentos o del Subprograma
paso de parmetros. La segunda precaucin es
que una vez ejecutado el subprograma hay que bi-
retorno
furcar al punto adecuado del programa que lo lla-
m, y este punto es distinto cada vez (Figura 1.10);
es el problema de preservacin de la direccin de
retorno.
Todos los ordenadores tienen instrucciones es-
peciales que facilitan la construccin de subpro- Figura 1.10. Llamadas a un subprograma y retornos
gramas, resolviendo de una u otra manera esos del mismo.
1.10. Subprogramas 65

Direcc.MP Contenido Contenido Comentarios


(decimal) (octal) (nemnico)
--------- --------- --------- --------------------------
[200] 3313 BR /203
[201] 0000 ;resultados parciales
[202] 0017 ;cantidad a restar: 15
[203] 6000 DEC ;decremento del
[204] 0311 ST /201 ; resultado parcial
[205] 1312 LD /202 ;decremento de la
[206] 6000 DEC ; cantidad a restar
[207] 4323 BZ /211 ;si ha llegado a cero,fin
[208] 0312 ST /202 ;si no, se actualiza
[209] 1311 LD /201 ;se carga el resultado parcial
[210] 3313 BR /203 ; y se vuelve al bucle
[211] 1311 LD /201 ;se carga el resultado final
[212] 7000 HALT

Programa 1.5 Restar 15 al acumulador.

direccin 0, sino en la 200, para luego convertirlo La transmisin de argumentos es fcil: llevamos
fcilmente en subprograma. el sustraendo (contenido de 51 en un caso, conte-
El minuendo debe estar inicialmente en el acu- nido de 101 en otro) a la direccin 202, y antes de
mulador, y el sustraendo en la direccin 202. Es- bifurcar a la 200 cargamos el minuendo (conteni-
ta misma palabra, la de direccin 202, se utiliza do de 50, o de 100) en el acumulador. Luego pone-
como contador, de modo que tras la ejecucin del mos la instruccin BR /200. Tras la ejecucin de
programa su contenido se ha reducido a 0. Esto ha- la instruccin [211], tendremos el resultado en el
ce que el programa no sea invariante: tras su eje- acumulador. De este modo, uno de los argumentos
cucin, ya no puede decirse que sea un programa de entrada (el minuendo) se transmite por el acu-
para restar 15 al contenido del acumulador (habra mulador, y el otro (el sustraendo) por la palabra
que restaurar el valor 15 en la direccin 202 antes de direccin 202. El argumento de salida (el resul-
de HALT para dejarlo como estaba). tado de la resta) se transmite al programa por el
acumulador.
Un subprograma para restar
La cuestin del retorno es ms difcil en Sm-
Supongamos que estamos escribiendo un pro- plez, y la solucin es algo rebuscada. Lo que hay
grama y que, en determinado punto, queremos lle- que hacer, en esencia, es sustituir la instruccin
var a la direccin 52 la diferencia de los conte- HALT (en la direccin 212) por una bifurcacin.
nidos de las direcciones 50 y 51, y ms adelante El problema es que el campo de direccin de es-
queremos llevar a 102 la diferencia de los conteni- ta instruccin tiene que ser distinto en cada ca-
dos de 100 y 101. En vez de repetir para cada caso so (en cada llamada al subprograma). En efecto,
una secuencia de instrucciones, podemos pensar hay que volver a la direccin de retorno, que es
en bifurcar a la direccin 200 cada vez que tenga- la de la palabra donde est alojada la instruccin
mos que restar. Ahora bien, antes de bifurcar hay del programa principal que viene a continuacin
que resolver los dos problemas que enuncibamos de BR /200, y que, obviamente, depende de dn-
ms arriba: cmo se transmiten los argumentos y de est esa BR /200. La solucin es que el pro-
cmo se guarda la direccin de retorno. pio programa, cuando se ejecute, construya esa
66 Leccin 1. Smplez

Direcc.MP Contenido Contenido Comentarios


(decimal) (octal) (nemnico)
--------- --------- --------- --------------------------
..........
[4] 3000 BR /0 ;para construir BR
[5] 0021 17 ;direccin retorno 1
[6] 0033 27 ;direccin retorno 2
..........
[10] 1063 LD /51 ;transmisin
[11] 0312 ST /202 ; del sustraendo
[12] 1004 LD /4 ;construccin de la
[13] 2005 ADD /5 ; instruccin de
[14] 0324 ST /212 ; retorno
[15] 1062 LD /50 ;transmisin del minuendo
[16] 3310 BR /200 ;bifurcacin al subprograma
[17] 0064 ST /52 ;guarda el resultado
..........
[20] 1145 LD /101 ;transmisin
[21] 0312 ST /202 ; del sustraendo
[22] 1004 LD /4 ;construccin de la
[23] 2006 ADD /6 ; instruccin de
[24] 0324 ST /212 ; retorno
[25] 1144 LD /100 ;transmisin del minuendo
[26] 3310 BR /200 ;bifurcacin al subprograma
[27] 0146 ST /102 ;guarda el resultado
..........
[200] 3313 BR /203 ;comienzo del subprograma
[201] 0000 ;resultados parciales
[202] 0000 ;sustraendo
[203] 6000 DEC ;decremento del
[204] 0311 ST /201 ; resultado parcial
[205] 1312 LD /202 ;decremento del
[206] 6000 DEC ; sustraendo
[207] 4323 BZ /211 ;si ha llegado a cero, fin
[208] 0312 ST /202 ;si no, se actualiza,
[209] 1311 LD /201 ; se carga resultado parcial
[210] 3313 BR /203 ; y se vuelve al bucle
[211] 1311 LD /201 ;resultado al acumulador
[212] 0000 ;aqu deposita el programa
; la instruccin de retorno

Programa 1.6 Un programa que llama dos veces a un subprograma de resta.


instruccin. Veamos cmo funcionara el Progra- mite los argumentos al subprograma: el minuendo
ma 1.6. (En este programa habra otras instruc- por el acumulador, y el sustraendo por la direc-
ciones, en las lneas de puntos, que no vienen al cin [202] . El subprograma devuelve el resultado
caso para lo que estamos explicando. Suponemos por el acumulador, y el programa lo almacena, con
que las palabras de direcciones 4, 5 y 6 estn en [17] o con [27], en el lugar previsto.
la zona de datos, y sus contenidos no llegan a
interpretarse como instrucciones). Con las instrucciones [12][14] en el primer ca-
so, y [22][24] en el segundo, el programa cons-
Con las instrucciones [10], [11], [15] en un ca- truye la instruccin de retorno y la introduce en
so, y [20], [21], [25] en el otro, el programa trans- la direccin 212 del subprograma. En efecto, en
1.11. Ensamblador 67

la direccin 4 se ha escrito una instruccin BR de esa traduccin. Un programa que hace tal cosa
con el valor cero en su campo de direccin, y en se llama ensamblador. El ensamblador recibe, co-
las direcciones 5 y 6 se han puesto las direccio- mo datos de entrada, las instrucciones escritas de
nes de retorno para cada una de las dos llamadas. manera simblica (o programa fuente) y da co-
Con una simple suma se obtiene la instruccin de mo resultado una secuencia de instrucciones en bi-
retorno correcta en cada caso. nario (o programa objeto) listas para cargarse
Las instrucciones [10][16] y [20][26], con las en la memoria. Hace, por tanto, un procesamiento
que el programa principal transmite los argumen- de smbolos (Apartado 3.7).
tos de entrada y asegura el retorno del subprogra- Sera absurdo pensar en el diseo de un ensam-
ma se llaman secuencias de llamada. blador para Smplez que se ejecutase en Smplez,
El lector crtico habr advertido que hay una porque su limitadsimo repertorio de instrucciones
manera ms sencilla de conseguir el mismo efecto hace prcticamente imposible programar las tareas
(vea el Ejercicio 17). necesarias, y, en cualquier caso, seran necesarias
muchas ms instrucciones de las quinientas ocho
que puede albergar la MP. Sin embargo, el progra-
1.11. Ensamblador ma ensamblador puede escribirse para un ordena-
Los primeros ordenadores se concibieron pen- dor real, y ejecutarse en l, y el resultado cargar-
sando en el procesamiento numrico: eran herra- lo en la MP de Smplez. Y esto es lo que hacen
mientas para resolver problemas de clculo arit- las herramientas que acompaan a este Curso, que
mtico. Pero nada ms empezar a programarlos, incluyen un ensamblador y un simulador de Sm-
apareci de forma natural el primer problema plez.
prctico de procesamiento simblico. En efecto,
programar un ordenador directamente en su len- Lenguaje ensamblador
guaje de mquina binario es una tarea no sola-
mente tediosa, tambin es proclive a generar gran Naturalmente, para que el programa ensambla-
cantidad de errores humanos difciles de detectar y dor pueda funcionar correctamente es preciso obe-
corregir. En los programas para Smplez hemos es- decer ciertas reglas, que definen la sintaxis del len-
crito, paralelamente a las instrucciones en binario, guaje. Para el caso de Smplez, las reglas pueden
unas expresiones simblicas de las mismas. Est ser las que ya venimos usando implcitamente en
claro que esta representacin resulta mucho ms los programas: cada instruccin se escribe en una
inteligible para la mente humana, y la traduccin lnea y tiene el cdigo de operacin simblico se-
de cada una de esas expresiones a binario es una guido, en su caso (instrucciones con referencia a
tarea rutinaria: basta con ir escribiendo en binario memoria), de la direccin en decimal precedida
y poniendo en su sitio los cdigos simblicos (si de /. (Y separados ambos campos por uno o
dice ADD poner 010 en el campo CO), las di- ms espacios en blanco). A continuacin, opcio-
recciones (si dice /50 poner 000110010 en nalmente, un comentario. Se le indica al ensam-
el campo CD) y las constantes (la constante 8, blador que es un comentario (y que, por tanto, no
por ejemplo, sera 000000001000. tiene que hacerle caso), poniendo delante ;.
Un conjunto de reglas de este tipo define un len-
guaje ensamblador. Adems de instrucciones, los
Programa ensamblador
lenguajes ensambladores admiten seudoinstruc-
Pero si el ordenador es una mquina concebida ciones. Se trata de informaciones para el progra-
precisamente para realizar tareas rutinarias, pode- ma ensamblador que ste entiende, pero que no
mos pensar en programarlo para que se encargue se traducen por una instruccin de mquina. Por
68 Leccin 1. Smplez

ejemplo, la seudoinstruccin DATA 8 le dice al constantes y variables. En lenguaje ensamblador,


ensamblador que en la direccin correspondiente el comienzo del programa podra ser as:
a esa lnea tiene que ir la constante 8 (en binario,
naturalmente), y RES 1, que reserve una palabra BR /PRINC
de memoria. CONT RES 1
Pero an se puede facilitar ms la labor del pro- PEN RES 1
gramador mediante las etiquetas. Una etiqueta es ULT RES 1
un nombre simblico que se utiliza en lugar de una SIG RES 1
direccin de memoria. El ensamblador se encarga SUM RES 1
de sustituirla por la direccin que le corresponde. UNO DATA 1
Por ejemplo, el lector debe haber analizado el Pro- OCHO DATA 8
grama 1.3 para ver que, efectivamente, suma cien PRINC CLR
nmeros, pero si trata de hacerlo partiendo de ce- ST /PEN
ro, cuando llegue a la instruccin [10] sabe que ...
tiene que salirse del bucle para ir a la instruccin
Ser el ensamblador el que cuente, descubra
HALT; ahora bien, en ese momento no puede an
que a la etiqueta PRINC le corresponde la direccin
saber que tal instruccin va a estar en la direccin
8, y traduzca la primera instruccin a binario como
[17], y tiene que escribir el resto de instruccio-
si hubisemos escrito BZ /8.
nes para completar la instruccin BZ. Pues bien,
Pero tambin se puede proceder de otra mane-
en lenguaje ensamblador puede escribir la instruc-
ra: poniendo las constantes y variables al final, tras
cin as: BZ /FIN, y cuando llegue al final ponerle
la instruccin HALT. As se ha hecho en el Progra-
la etiqueta: FIN HALT. El programa ensamblador,
ma 1.7. El programador slo ha de preocuparse de
mediante una simple cuenta, ver que a la etiqueta
escribir la tercera columna (el programa en ensam-
FIN le corresponde la direccin [17]. De esta ma-
blador) y, si lo desea, la cuarta (comentarios). Las
nera el programador puede olvidarse de las direc-
dos primeras columnas son el resultado de la eje-
ciones que finalmente le corresponden a las distin-
cucin del programa ensamblador. De hecho, ste
tas instrucciones y seudoinstrucciones, quedando
es el listado informativo que nos da el ensambla-
ms libre para concentrarse en el algoritmo.
dor de Smplez despus de ejecutarse.
Al final del listado aparece END. Es lo que le
Un ejemplo indica al ensamblador el final del programa fuen-
te. Obviamente, no se traduce por ninguna instruc-
Retomemos el Programa 1.2 de la sucesin de
cin, y, por supuesto, no tiene nada que ver con la
Fibonacci. Para empezar, por qu tenemos que
instruccin HALT.
reservar, precisamente, las direcciones 46 a 52 pa-
ra las variables y las constantes necesarias? Se ha
hecho as porque se supone que el programa, que
empieza en la direccin 0, no va a tener ms de 46 1.12. Introduccin a las comunica-
instrucciones. Pero antes de empezar a escribirlo ciones con el exterior
no lo podemos saber. Y si luego ocupa ms? Ade-
ms, por qu tenemos que estar recordando con- El intercambio de informacin entre la UCP y
tinuamente, a medida que lo escribimos, en qu los dispositivos perifricos plantea muchos pro-
direccin est cada cosa? Una forma de proceder blemas, que tienen diversos tipos de soluciones.
sera la que ya hemos utilizado en el Programa 1.3: Avanzaremos aqu la ms sencilla de estas solu-
empezar con una bifurcacin y poner tras ella las ciones, que es la nica contemplada en Smplez.
1.12. Introduccin a las comunicaciones con el exterior 69

Dir.MP Cont. Programa en Comentarios


(dec.) (oct.) ensamblador
------ ------ ------------------ -------------------------
[0] 5000 CLR ; 0
[1] 0027 ST /PEN ; a PEN
[2] 1033 LD /UNO ; 1
[3] 0030 ST /ULT ; a ULT
[4] 0032 ST /SUM ; a SUM
[5] 1034 LD /OCHO ; 8
[6] 0026 ST /CONT ; a CONT
[7] 1027 BUCLE LD /PEN ; PEN
[8] 2030 ADD /ULT ; PEN+ULT
[9] 0031 ST /SIG ; a SIG
[10] 2032 ADD /SUM ; SIG+SUM
[11] 0032 ST /SUM ; a SUM
[12] 1030 LD /ULT ; ULT
[13] 0027 ST /PEN ; a PEN
[14] 1031 LD /SIG ; SIG
[15] 0030 ST /ULT ; a ULT
[16] 1026 LD /CONT ; CONT
[17] 6000 DEC ; lo decrementa
[18] 4025 BZ /FIN ; si es cero, sale del bucle
[19] 0026 ST /CONT ; si no, lo lleva a CONT
[20] 3007 BR /BUCLE ; y vuelve al bucle
[21] 7000 FIN HALT
[22] 0000 CONT RES 1
[23] 0000 PEN RES 1
[24] 0000 ULT RES 1
[25] 0000 SIG RES 1
[26] 0000 SUM RES 1
[27] 0001 UNO DATA 1
[28] 0010 OCHO DATA 8
END

Programa 1.7. Suma de los diez primeros trminos de la sucesin de Fibonacci, con cdigo fuente en ensamblador.

Direccionamiento de perifricos Comprobacin del estado de un perifrico


Una forma de establecer las comunicaciones de Algunos perifricos son mucho ms lentos que
la UCP con los dispositivos perifricos es asignar la UCP, y hay que asegurarse, antes de transferir
a stos direcciones robadas a la MP. Por ejem- un dato, de que el perifrico est preparado. As,
plo, en Smplez vamos a convenir que la direccin para enviar a la pantalla una cadena de caracteres
509 corresponde a una pantalla de texto y la 511 a almacenados en las direcciones 10, 11, 12... de la
un teclado. El resultado de ejecutar la instruccin MP no sera correcto escribir:
ST /509 es que el contenido de los bits 0 a 7 del LD /10
ST /509
acumulador se interpreta como la codificacin de
LD /11
un carcter, y este carcter se enva a la pantalla. ST /509
Anlogamente, LD /511 provoca la lectura de un LD /12
carcter del teclado, introduciendo su codificacin ST /509
en los bits 0-7 del acumulador. ...
70 Leccin 1. Smplez

porque, con toda seguridad, al recibirse en el pe- instruccin se llevar un 1 al acumulador, y la


rifrico la segunda de las instrucciones ST /509 segunda, al no cumplirse la condicin, har que se
todava no ha terminado de escribir el primer ca- pase a la tercera, en la que se carga en el acumula-
rcter, y se perdera el segundo (y muchos de los dor el carcter que se transfiere con la siguiente.
siguientes). La ejecucin de ST /509 implica que la UCP
Una solucin a este problema es que la UCP enva una microorden al controlador de la pantalla
compruebe, antes de empezar una transferencia dicindole que escriba lo que le pone en el bus D
con un perifrico, si ese perifrico est preparado (el contenido del acumulador). El controlador, al
o no para la transferencia. Para que esto sea posi- recibirla, inicia la escritura y pone 0 en el puer-
ble, el controlador del perifrico dispone, adems to 508; cuando los circuitos de la pantalla hayan
de la va, o puerto, por el que puede recibir o terminado de escribir el carcter, el controlador
transmitir un carcter, de otro puerto por el que pondr 1 en 508. De esta manera, se estable-
puede comunicar su estado a la UCP. Para lo que ce un dilogo entre la UCP y el controlador de
aqu nos interesa, ese estado es, simplemente, una la pantalla.
informacin binaria: 1 si est preparado para la Anlogamente, para leer un carcter:
transferencia y 0 si no lo est. Cada uno de estos ESP1 LD /510
puertos tiene asignada una direccin. En el caso BZ /ESP1
de Smplez, a los dos perifricos concretos, pan- LD /511
talla y teclado, le corresponden, respectivamente, ST /CAR
las direcciones 508 y 510 para sus puertos de es- El controlador del teclado pone 1 en el puerto
tado. Antes de ejecutar una instruccin ST /509 o 510 cuando se pulsa una tecla, y 0 cuando se
LD /511, se deber ejecutar LD /508 o LD /510 ejecuta LD /511.
para llevar el estado (preparado o no) al acumula- En la Tabla 1.4 se resumen estas funciones de
dor y, en funcin del resultado, tomar la decisin los puertos de Smplez.
de lanzar o no la transferencia con la instruccin
oportuna. dir. Funcin
508 Puerto de estado de la pantalla. Debe te-
ner el valor inicial 1. El controlador
Espera activa pone 0 cuando recibe la orden de es-
La solucin ms sencilla es que, en caso de cribir un carcter (provocada por la eje-
que el perifrico no est preparado para aceptar cucin de ST /509), y pone 1 cuando
la transferencia, la UCP espere, ejecutando un ha terminado y est preparado para es-
bucle en el que no hace nada ms que mirar con- cribir otro.
tinuamente el estado. As, para enviar a la pantalla 509 Puerto de datos de la pantalla.
un carcter cuya codificacin en ocho bits est en 510 Puerto de estado del teclado. Debe te-
la direccin identificada por la etiqueta CAR pon- ner el valor inicial 0. El controlador
dremos: pone 1 cuando se pulsa una tecla, y
ESP LD /508 0 cuando recibe la orden de leer el
BZ /ESP carcter (provocada por la ejecucin de
LD /CAR LD /511).
ST /509
511 Puerto de datos del teclado.
Mientras la pantalla no est preparada la UCP es-
Tabla 1.4. Puertos de los controladores de entra-
t en espera activa, ejecutando las dos primeras
da/salida de Smplez.
instrucciones. En cuanto lo est, con la primera
1.13. Crtica de la espera activa 71

Conversin de formatos cuencia de instrucciones (se indican unas direccio-


nes concretas, para luego referirnos a ellas):
Los caracteres ledos del teclado quedan repre-
sentados internamente en el cdigo ISO Latin9. [50] ESP1 LD /508
Si queremos introducir, por ejemplo, el nmero [51] BZ /ESP1
621, leeremos sucesivamente, con instrucciones [52] LD /CAR1
LD /511, los caracteres 6, 2 y 1, que que- [53] ST /509
darn almacenados en tres palabras. Ser preciso [54] ESP2 LD /508
disponer de un programa de conversin que tra- [55] BZ /ESP2
[56] LD /CAR2
duzca el conjunto de las tres codificaciones a la [57] ST /509
representacin interna en binario del nmero 621.
Anlogas consideraciones pueden hacerse para la Para hacer un anlisis de tiempos, es preciso
salida. De nuevo, la escasez de instrucciones arit- adelantar algo que veremos con detalle en la Lec-
mticas y la ausencia de instrucciones lgicas y de cin 11: el tiempo que tarda la UCP en ejecutar
desplazamiento en Smplez hacen que la progra- cada instruccin. Este tiempo no est determina-
macin de estas operaciones sea dificultosa (pero do por la UCP, sino por la MP, que es ms lenta.
no imposible, vase el Ejercicio 24). Un ciclo de memoria es el tiempo que transcurre
En la Leccin 7 presentaremos esos programas, desde que se inicia un acceso (de lectura o escri-
pero ya en el caso de Algortmez, que s dispone tura) a la MP hasta que puede iniciarse otro; en
de las instrucciones adecuadas. Smplez, este ciclo dura 0,2 s = 200 ns. Todas
las instrucciones requieren al menos un ciclo (el
ciclo de lectura en la MP para extraer la instruc-
1.13. Crtica de la espera activa cin). Adems, LD, ADD y ST, cuando se refieren
a una direccin de la MP, necesitan otro ciclo de
El procedimiento de espera activa tiene la ven- memoria (las dos primeras, para leer, y la tercera,
taja, con relacin a otros que introduciremos a para escribir el operando), y cuando se refieren a
continuacin, de su sencillez, tanto conceptual co- un puerto de entrada o salida requieren un tiempo
mo material (es decir, el hardware necesario para variable (Apartado 9.5), pero, para concretar, su-
su implementacin es mnimo). En contrapartida, pondremos que es igual a un ciclo de la MP.
presenta el inconveniente de mantener bloqueada Por otra parte, supondremos que la pantalla es-
a la UCP en bucles de espera, ejecutando repetida- cribe los caracteres con una velocidad de treinta
mente instrucciones slo para comprobar si el pe- caracteres por segundo. Con esto ya tenemos todos
rifrico est preparado, y tanto ms tiempo cuanto los datos para analizar temporalmente el proceso
ms lento sea el perifrico. Analicemos un ejem- de la ejecucin de las instrucciones almacenadas
plo concreto. entre las direcciones 50 y 57.
Si al ejecutarse [50] la pantalla est preparada,
El tiempo perdido la condicin de [51] no se cumplir y se ejecutarn
[52] y [53]; esta ltima inicia la escritura del pri-
Supongamos que dentro de un programa quere- mer carcter, y el controlador de la pantalla pondr
mos poner instrucciones para escribir en la pan- un 0 en el puerto 508 indicando que est ocupa-
talla dos caracteres seguidos, cuyas codificaciones da. La pantalla tarda 1/30 s 0,033 s = 33.000 s
estn almacenadas en las direcciones identificadas en escribir ese carcter, y hasta que no transcurre
por CAR1 y CAR2. De acuerdo con lo explicado en ese tiempo su controlador no pone 1 en el puerto
el Apartado anterior, escribiramos la siguiente se- 508. Mientras tanto, la UCP ejecuta [54] y como
72 Leccin 1. Smplez

en el puerto 508 ahora hay un 0 la condicin el perifrico. Por ejemplo, podemos tener un sub-
de [55] se cumple y por tanto se vuelve a [54]. El programa que escriba una lnea de caracteres por
tiempo de respuesta de la pantalla, 33 milsimas la pantalla (Ejercicio 27). Se supone que el progra-
de segundo, puede parecernos pequeo, pero para ma que llama a este subprograma prepara primero
la UCP y para la MP es una eternidad: las ins- los caracteres en una zona de la MP, luego le pide
trucciones [54] y [55] requieren en total tres ciclos al subprograma que los escriba y a continuacin
de la MP, es decir, tardan 600 ns = 0,6 s en ejecu- pasa a algn tipo de proceso que ya nada tiene que
tarse. Por tanto, resulta que el bucle formado por ver con aquellos caracteres. El subprograma que se
[54] y [55] se recorre (y cada una de las instruc- pide realizar en el Ejercicio 27 funciona mediante
ciones se ejecuta) 55.000 veces (33.000/0,6) antes espera activa (en Smplez no hay otro modo), pero
de que la pantalla vuelva a estar preparada y se pa- si dispusiramos de un mecanismo de interrupcio-
se a la instruccin [56] para iniciar la escritura del nes sera muy til en un caso como ste, ya que la
segundo carcter. UCP podra seguir ejecutando instrucciones, y la
As, en un programa para escribir en la pantalla pantalla interrumpira cada vez que estuviese pre-
una sucesin de caracteres, la UCP est la mayor parada para escribir un nuevo carcter.
parte del tiempo pasando el rato, esperando por Por otra parte, hay perifricos que, por su mis-
la pantalla, que va a su ritmo: por cada carcter ma naturaleza, exigen que las transferencias se ha-
transferido (salvo el primero) ejecuta 110.002 ins- gan mediante interrupciones. Esto ocurre, espe-
trucciones, de las que slo dos son tiles (la [56] cialmente, en las aplicaciones de control de proce-
y la [57] en el ejemplo). sos y de comunicaciones, en las que hay disposi-
tivos que avisan de determinadas condiciones que
ocurren espordica e imprevisiblemente.
Las interrupciones
En los Apartados 3.6 y 6.14 veremos que el uso
Las comunicaciones con los perifricos median- de las interrupciones no se limita a las transferen-
te interrupciones representan un enfoque total- cias de entrada/salida, y permite tratar de manera
mente distinto al de la espera activa. El objetivo uniforme otros acontecimientos externos o inter-
bsico es que la UCP pueda seguir ejecutando ins- nos a la UCP (desbordamiento, errores, manteni-
trucciones tiles en lugar de esperar en un bucle. miento de la hora, etc.).
El perifrico avisa cuando est preparado para en-
viar o para aceptar otro carcter, provocando una El acceso directo a la memoria
interrupcin en la ejecucin del programa. Como
consecuencia de esta interrupcin, la UCP pasa a An puede liberarse ms a la UCP del control de
ejecutar un subprograma llamado rutina de servi- las transferencias con los perifricos disponiendo
cio de la interrupcin que se ocupa de la trans- de un subsistema hardware que se encargue de las
ferencia y, efectuada sta, devuelve el control al operaciones que hasta ahora venimos suponiendo
programa interrumpido. que se llevan a cabo mediante software. Por ejem-
Desde luego, hay ocasiones en las que esta ma- plo, podramos pensar en un controlador para la
nera de proceder no resuelve nada; concretamente, pantalla16 que accediese directamente a la MP y,
en el caso de que la UCP necesite que haya entra- robando ciclos a la UCP, fuese extrayendo de la
do una sucesin de caracteres (que forman un dato MP los caracteres que hay que escribir, sin que es-
de entrada) para inmediatamente operar con ellos, tos caracteres tuvieran que pasar por la UCP. Es-
y que no pueda hacer nada hasta que no hayan lle- te controlador realizara as mediante hardware, e
gado los caracteres. Pero en muchas otras ocasio- 16
Esta tcnica se aplica en perifricos ms rpidos, como
nes s permite la operacin simultnea de la UCP y cintas, discos o pantallas grficas.
1.14. Comentarios sobre Smplez 73

Espera activa:
independientemente de la UCP, la misma funcin
que en el Ejercicio 27 se propone realizar median-
te software 17 .
seg/caracter tiempo
Conclusin
Interrupciones:
La Figura 1.11 ilustra la diferencia entre los tres
modos en lo que se refiere al tiempo que mantie-
nen involucrada a la UCP en la transferencia de un
bloque de palabras. Las zonas sombreadas son los tiempo
de RS
intervalos de tiempo que se le sustraen a la UCP Acceso directo a la memoria:
para la transferencia. En el modo de espera activa
la UCP est bloqueada todo el tiempo. Para las in-
terrupciones tiene que ejecutar una rutina de servi-

terminacin
iniciacin
cio cada vez que el perifrico interrumpe (cuando ciclo
de MP
est dispuesto para aceptar o enviar un carcter).
Finalmente, con el modo de acceso directo a la Figura 1.11. Tiempos de ocupacin de la UCP con los
memoria nicamente se le quitan ciclos de memo- mtodos de espera activa, interrupciones y acceso di-
ria, adems de la ejecucin al principio de algunas recto a memoria.
instrucciones para iniciar al controlador y de una
rutina de servicio al final, cuando el controlador microarquitectura (en las Lecciones 10 y 11). En
interrumpe para avisar de que ha terminado con la aras de esa sencillez, hemos prescindido de ele-
transferencia pedida. mentos que se encuentran en las mquinas reales,
En el diseo de Smplez no se ha previsto la lo que conduce a que con Smplez resulta impo-
posibilidad de interrupciones ni de acceso direc- sible o muy difcil programar ciertas operaciones.
to a la memoria. En la Leccin siguiente estudia- En particular:
remos una ampliacin de Smplez que dispone de
un mecanismo muy limitado de interrupciones, en Hemos visto, en la explicacin del programa
el Apartado 3.6 generalizaremos y en la Leccin 6 para sumar cien nmeros, que para comparar dos
veremos otra mquina, Algortmez, con un siste- nmeros es preciso hacer una serie de operacio-
ma completo de interrupciones. El acceso directo nes que se evitaran disponiendo de una instruc-
a la memoria lo trataremos en general en el Apar- cin de resta (o, simplemente, de comparacin).
tado 5.6, y en la Leccin 6 para el caso concreto Igualmente artificioso es el procedimiento que nos
de Algortmez. hemos visto obligados a seguir en el Apartado 1.10
para una operacin tan elemental como restar los
contenidos de dos palabras de la memoria.
1.14. Comentarios sobre Smplez Con el formato explicado para los nmeros no
se pueden representar cantidades negativas. Nor-
Smplez no es ms que una herramienta didc-
malmente se sigue el convenio de reservar un bit
tica para transmitir los conceptos bsicos del ni-
que indique el signo del nmero, como veremos
vel de mquina convencional (aqu) y del nivel de
en la Leccin 3 (y como se sugiere en los Ejerci-
17
La realizacin mediante software slo es posible si la cios 14 y 15).
UCP es capaz de trasegar los caracteres a la velocidad con
que los enva o los recoge el perifrico, y esto es imposible Con el formato explicado para las instruccio-
con perifricos rpidos, como veremos en el Apartado 5.6. nes slo se puede disponer de una capacidad de
74 Leccin 1. Smplez

memoria de 508 palabras (512 menos las cuatro 1.15. Resumen


direcciones reservadas para los puertos de los pe-
rifricos). Esto es a todas luces insuficiente para En su configuracin (modelo estructural) ms
la mayora de los problemas. Puede aumentarse la elemental, un ordenador est constituido por una
capacidad de direccionamiento de la UCP reser- memoria principal (MP), una unidad central de
vando ms bits para el campo CD (aumentando la procesamiento (UCP) y unas unidades de entra-
longitud de palabra, vase el Ejercicio 5, o hacien- da y salida, tambin llamadas perifricos, interco-
do que las instrucciones no ocupen una palabra, nectadas mediante buses (Figura 1.1). Globalmen-
sino dos o ms), o con los modos de direcciona- te, la actividad del ordenador consiste en realizar
miento que estudiaremos a partir de la Leccin si- una sucesin de operaciones con unos datos (pro-
guiente. cedentes de un perifrico de entrada) y entregar los
Ya hemos dicho que el procedimiento de modi- resultados (por un perifrico de salida). Las ins-
ficar las instrucciones para recorrer zonas de me- trucciones que el ordenador debe realizar secuen-
moria no es recomendable y se puede evitar dotan- cialmente constituyen el programa; este programa
do a la mquina de otros elementos, concretamen- se introduce a travs de una unidad de entrada y
te, de registros de ndice, como veremos ya en la queda almacenado en la memoria. La ejecucin
Leccin siguiente. del programa consiste en la lectura sucesiva de las
instrucciones y su interpretacin por parte de la
Tambin es prcticamente absurdo el procedi-
unidad central de procesamiento, entendiendo por
miento para construir subprogramas. En la Lec-
interpretacin el proceso consistente en averi-
cin 4 presentaremos de manera general los meca-
guar de qu instruccin se trata (descodificarla) y
nismos de hardware y software que habitualmente
realizar las operaciones necesarias en la UAL, o
se usan, y en las Lecciones 6, 7 y 8 los estudiare-
dar las rdenes oportunas a las otras unidades.
mos con detalle.
As pues, las unidades de entrada y de salida
El mecanismo esbozado para las comunicacio- se encargan de los intercambios de informacin
nes con perifricos es poco flexible, y mantiene del ordenador con el exterior, mientras que la uni-
bloqueada (en espera activa) a la UCP durante dad central de procesamiento ejecuta el programa
todo el tiempo que el perifrico est ocupado. En previamente almacenado en la memoria; dentro de
la Leccin siguiente concretaremos el principio de ella pueden diferenciarse dos partes: la unidad de
las interrupciones. control (UC) va extrayendo secuencialmente de la
No hemos previsto ms que dos perifricos, una memoria las instrucciones, las analiza y produce
pantalla de texto y un teclado. En la actualidad, in- las micrordenes necesarias para su ejecucin den-
cluso el ms bsico de los ordenadores de dispone tro de la otra parte, la unidad aritmtica y lgica
de una unidad de disco y de una pantalla grfica. (UAL), que realiza las operaciones. Asociados a la
stos son perifricos rpidos en los que resultan UAL hay registros donde se almacenan temporal-
inaplicables las transferencias por espera activa o mente operandos y resultados; Smplez slo tiene
por interrupciones, y tienen que comunicarse di- uno: el registro acumulador. Finalmente, la me-
rectamente con la MP mediante acceso directo a moria principal (MP) est encargada de almacenar
la memoria, como estudiaremos en las Lecciones 5 tanto las instrucciones que constituyen el progra-
y 6. ma como los datos y los resultados.
Con Algortmez (Leccin 6) y con Regs- Si bien la unidad bsica para el almacenamiento
trez (Leccin 8), nos aproximaremos ms a los y la transferencia de informacin es el bit, en los
modelos de mquinas reales. Pero vayamos poco ordenadores los bits no se almacenan ni se extraen
a poco. de la MP individualmente, sino por grupos. Cada
1.15. Resumen 75

uno de estos grupos constituye una palabra, cuya direccin de la MP. Esto nos ha permitido modi-
longitud es el nmero de bits que contiene. ficar ciertas instrucciones en el curso de la eje-
Cada palabra almacenada en la MP (o en un re- cucin del programa, y de esta manera hacer que
gistro) puede ser una instruccin o un dato, de mo- una instruccin vaya refirindose sucesivamente,
do que ese conjunto de bits se interpretar de una u cada vez que se ejecute, a distintas direcciones de
otra manera, siguiendo unos convenios preestable- la MP (tcnica conceptualmente interesante, pero
cidos para cada caso, que se llaman formatos. As, poco recomendable, y sustituida en las mquinas
el formato de instrucciones ms sencillo, que es el reales por otros recursos de hardware).
que hemos visto aqu, tiene dos partes o campos: Un subprograma es un programa que ejecuta
uno es el cdigo de operacin, que identifica el operaciones sobre operandos (argumentos, o pa-
tipo de operacin que ha de hacer la UCP (sumar, rmetros, de entrada) que le transmite el progra-
bifurcar, etc.), y otro es el campo de direccin, que ma que le llama, y que devuelve los resultados
especifica la direccin de la MP en las instruccio- (argumentos, o parmetros, de salida) a ese mis-
nes que hacen referencia a la memoria. mo programa. Una vez terminada su ejecucin, el
Entre las instrucciones, las hay de procesamien- subprograma debe volver al programa que le lla-
to (como sumar un operando que est en la MP a m, para que ste contine ejecutndose desde la
otro que est en el registro acumulador), de trans- instruccin siguiente a la de llamada. Hemos vis-
ferencia de control o bifurcacin (le dice a la UC to cmo en Smplez, a pesar de no tener previstas
que la siguiente instruccin a ejecutar no es la que instrucciones especiales para estas operaciones de
est almacenada en MP a continuacin de sta, si- llamada y retorno, pueden escribirse y utilizarse
no la que est en la direccin que se indica) y de subprogramas.
gobierno de la UCP (por ejemplo, parar). Unas En tres casos concretos se ha materializado la
hacen referencia a la memoria (por ejemplo, los idea que avanzbamos en el Apartado 0.8 (al des-
dos primeros tipos) y otras no (como parar o cribir la UAL de la mquina de von Neumann):
decrementar el acumulador). muchas funciones pueden estar previstas en el
El repertorio de instrucciones de un ordenador hardware o no; si no lo estn, pueden realizarse
y su formato definen su lenguaje de mquina, en mediante software. As ocurre en Smplez con la
el que se pueden escribir programas que la UC in- operacin de resta, con el recorrido de zonas de
terpreta (es decir, ejecuta). memoria y con el uso de subprogramas.
Estas ideas generales, que ya fueron presenta- En un lenguaje ensamblador las instrucciones
das en la Leccin 0 con la mquina de von Neu- no se escriben en binario, sino de forma simb-
mann, se han concretado en un ordenador extre- lica. Los programas fuente escritos en ensambla-
madamente simplificado, Smplez. Conociendo dor tienen que traducirse a binario antes de poder
su modelo funcional, expresado por la descripcin cargarlos en la memoria. Esta es la funcin de un
completa de los formatos de representacin de n- programa ensamblador. El lenguaje ensamblador
meros, caracteres e instrucciones y del repertorio de Smplez lo utilizaremos en la Leccin siguiente
de instrucciones, hemos visto algunos ejemplos de para no perdernos con los detalles de las direccio-
programas en el nivel de mquina convencional. nes de memoria y facilitar la comprensin de los
Lo ms destacable de la programacin en el ni- programas.
vel de mquina convencional es que, una vez car- La espera activa es un procedimiento senci-
gado el programa en la MP, las instrucciones que llo para la comunicacin con los perifricos, pero
lo forman van siendo extradas y ejecutadas en la no siempre aplicable. Ms adelante estudiaremos
UCP, y que la ejecucin de una instruccin puede otros: las interrupciones y el acceso directo a la
implicar cualquier operando situado en cualquier memoria.
76 Leccin 1. Smplez

1.16. Observaciones terminolgicas incluidos en el software del sistema para que el progra-
mador de aplicaciones haga uso de ellos.
Tal como se ha definido la UAL, solamente la com- Seguramente, el lector habr advertido una ambige-
ponen los circuitos que permiten realizar las operacio- dad que se produce al convertir la palabra ensambla-
nes. Para algunos autores incluye tambin a los regis- dor en sustantivo. Normalmente, el contexto determi-
tros (en los modelos de esta Leccin slo hay uno, el na si nos estamos refiriendo a lenguaje ensamblador,
acumulador) en los que estn los operandos o se depo- en ingls assembly language (quizs sera mejor tra-
sitan los resultados. ducir por lenguaje de ensamblaje, o lenguaje de en-
Aunque abreviamos en espaol los nombres de las samble) o a programa ensamblador, en ingls as-
unidades funcionales (UAL, UCP, MP, etc.), hemos op- sembler (el traductor que convierte los programas es-
tado por utilizar nemnicos del ingls, y no del espa- critos en lenguaje ensamblador a programas escritos en
ol, para las instrucciones. Es decir, por ejemplo, LD lenguaje de mquina).
y ST, y no CAR y ALM, para las instrucciones de car- Espera activa es una traduccin de la expresin
gar y almacenar un registro (el acumulador, en el caso busy waiting.
de Smplez), respectivamente. El motivo es que, si bien
para captar los conceptos puede representar inicialmen-
te una pequea perturbacin a algunos lectores, stos 1.17. Notas histricas
van a ser los nombres que se encuentren aquellos que
tengan que trabajar con ordenadores en el nivel de m- El sistema de numeracin de base 8 ya se haba pro-
quina convencional. Igualmente, utilizamos el trmino puesto como medio til para trabajar con las mquinas
bus (que algunos traducen por barra), que est am- calculadoras binarias mucho antes de la aparicin del
pliamente extendido. El bus D es el bus de datos, ordenador (Phillips, 1936; este autor pretenda incluso
denominacin habitual, aunque sirva tambin para las que la humanidad cambiase sus hbitos aritmticos, y
instrucciones. El bus A es el bus de direcciones se acostumbrase a operar en base octal).
(addresses). La representacin en octal o hexadecimal para abre-
Las bifurcaciones (en ingls, branch o jump) viar valores binarios se ha utilizado desde los tiempos
a veces se llaman saltos. Pero reservaremos salto de los primeros ordenadores, lo mismo que los cdigos
para referirnos a un tipo de instrucciones que no hacen nemnicos para las instrucciones. Por ejemplo, para
referencia a la memoria; su efecto es, si la condicin se programar el EDSAC (Apartado 0.12) se utilizaba una
cumple, omitir la siguiente instruccin en la secuencia. sola letra para los cdigos de operacin, y las direccio-
Son las que en ingls se llaman skip, y las comenta- nes se escriban en decimal (Worsley, 1949; Wheeler,
remos en el Apartado 4.7. 1992). Puede decirse que ste fue el primer lenguaje
En la preparacin del programa sobre la sucesin de ensamblador (Campbell-Kelly, 1992). Ms notas sobre
Fibonacci (Apartado 1.6) ha aparecido, naturalmente, la evolucin de los lenguajes de programacin simb-
una de las palabras clave de la informtica: algorit- licos en los Apartados 7.13 y 22.14.
mo. Como ste no es un texto sobre computabilidad La longitud de palabra de doce bits no es habitual
ni sobre programacin, no daremos una definicin ri- actualmente. Se utiliz en uno de los primeros orde-
gurosa del concepto, y diremos simplemente que en- nadores transistorizados, el CDC160, aparecido en
tendemos por algoritmo una secuencia de operaciones 1960. Poco antes, en 1969, Digital Equipment Corp.
bien definidas que sirven para obtener la solucin de haba lanzado el que puede considerarse primer ordena-
un problema. El programa en seudocdigo y el Progra- dor de la segunda generacin (entendiendo que sta
ma 1.2 representan al mismo algoritmo en diferentes comienza con el paso de las vlvulas a los transistores),
lenguajes. el PDP1, que tena una longitud de palabra de diecio-
Subprograma, subrutina y rutina se suelen cho bits. Otro con palabras de doce bits era el minior-
utilizar casi indistintamente. En adelante utilizaremos denador ms vendido de los aos 60, el PDP8 (apare-
normalmente el primer trmino, y reservaremos ruti- cido en 1965), as como un microprocesador derivado
na o subrutina para subprogramas de uso general, de l, el Harris 6100, que se utiliz en el VT78 (sucesor
como las rutinas de servicio de interrupciones que vere- del PDP8), en mquinas de procesamiento de textos y
mos ya en la Leccin siguiente, o las rutinas para ope- en controladores de perifricos, y del que se puede en-
raciones aritmticas (Leccin 7), que se supone estn contrar una descripcin en Bartee (1985).
1.19. Ejercicios 77

1.18. Orientaciones bibliogrficas 1.19. Ejercicios


1. El diseo fsico de Smplez que muestra la Figu-
Los lenguajes de mquina de los ordenadores vie- ra 1.5 (su primitiva y tosca interfaz de usuario)
nen descritos en sus manuales, que presentan detalla- puede mejorarse aadiendo indicadores lumino-
damente sus formatos y repertorios de instrucciones. sos que muestren direcciones y contenidos en bi-
Naturalmente, son bastante ms complicados que el de nario y un nuevo pulsador para incrementar la l-
Smplez: hay muchas ms instrucciones, los modos de tima direccin puesta en los conmutadores. En
direccionamiento (de los que hablaremos en general en qu porcentaje se reducira el nmero de manipu-
la Leccin 4) son variados, y el formato de instruccio- laciones necesarias para cargar un programa?
nes no es uniforme, es decir, los cdigos de operacin
no tienen todos la misma longitud, y las propias ins- 2. Suponga cargado en la MP de Smplez el siguien-
trucciones suelen ser de longitud variable (salvo en las te programa:
llamadas arquitecturas RISC, Apartado 4.9). Direccin Contenido
En los textos de arquitectura de ordenadores suelen (en octal)
aparecer uno o varios ejemplos de ordenadores reales 0 3003
para describir el funcionamiento en el nivel de mqui- 1 0001
na convencional. Nosotros hemos optado por la va del 2 0000
ordenador imaginario, muy simplificado pero que 3 5000
permite explicar los conceptos fundamentales sin per- 4 2001
derse en los detalles, y que adems sirve para concre- 5 0002
tar tambin el funcionamiento en el nivel de microar- 6 7000
quitectura. En otros libros se sigue el mismo enfoque.
Si la UC empieza ejecutando la instruccin alma-
El CODE-2 (Computador Didctico Elemental) de
cenada en la direccin 0, averige lo que hace el
Prieto et al. (2002) tiene tambin doce bits de longitud
programa, y escriba los contenidos de las direc-
de palabra, pero puede direccionar una MP de 4.096
ciones 0 a 6 de la MP despus de la ejecucin.
palabras gracias al uso de direccionamiento indirecto
(como haremos con Smplez+i4); incluye una pila de 3. El mismo problema, suponiendo que lo que hay
ocho palabras para implementar instrucciones de lla- almacenado en la direccin 5 es 0003.
mada y retorno de subprogramas. Gorsline (1986) pre- 4. Lo mismo (el Ejercicio 2), suponiendo que lo que
senta G-1, un ordenador con catorce instrucciones y hay en la direccin 6 es 3000.
aritmtica decimal y con una memoria de mil palabras
de 21 bits (para poder representar en cada palabra cinco 5. Si Smplez, con el mismo repertorio de instruc-
dgitos decimales y el signo). El CUSP (Carletons ciones que hemos definido, tuviera una longitud
Utterly Simple Processor) de Karam y Bryant (1992) de palabra de ocho bits, cul sera la capacidad
es algo ms complejo: tiene noventa y cuatro instruc- mxima de MP direccionable? Y si la longitud
ciones, una MP de 4.096 palabras de veinticuatro bits y de palabra fuese diecisis bits?
varios registros y modos de direccionamiento. Lo ms 6. Conservando la longitud de palabra de doce bits,
frecuente es apoyarse en un modelo con longitud de suponga que decidimos reservar cuatro bits para
palabra de diecisis bits, con cuatro para el cdigo de el cdigo de operacin de Smplez:
operacin (diecisis instrucciones) y doce para el cam- 0000 (0 en hexadecimal): ST
po de direccin (MP de 4.096 palabras): Mano (1976) 0001 (1 en hexadecimal): LD
le llama Basic computer, Foster (1976) Blue (por 0010 (2 en hexadecimal): ADD
el color de la caja), Lee (1985) SDC (Simple Digi- ...
tal Computer)... Nuestra decisin, con Smplez, ha sido 0111 (7 en hexadecimal): HALT
la de simplificar an ms este modelo (despus de todo, etc.
ambos siguen siendo igualmente irreales en la actuali-
dad) para describir lo esencial de los niveles de mqui- (a) De cuntas instrucciones podra constar su
na y de microarquitectura, y luego presentar otros ya repertorio, y cul sera la capacidad de me-
mucho ms parecidos a los reales. moria direccionable?
78 Leccin 1. Smplez

(b) Dado el programa: 4.095 (todos unos), averige cul sera el resulta-
do (interpretado en decimal) de llamar al subpro-
Direccin Contenido grama de resta con los argumentos 20 (minuendo
(en hexadecimal) en el acumulador) y 30 (sustraendo en la direc-
0 105 cin 202).
1 206
2 207 11. Suponiendo que en las direcciones 100 y 101 de
3 008 la MP de Smplez tenemos almacenados sendos
4 700 nmeros, escriba un programa que calcule la di-
5 036 ferencia entre ambos y la deposite en la direccin
6 01A 102, pero que avise poniendo 1 (0001 octal) en
7 054 la direccin 103 en el caso de que el sustraendo
(101) sea mayor que el minuendo (100).
qu es lo que hace, y cul es el resultado de su 12. Siguiendo con la idea del Ejercicio anterior, mo-
ejecucin? (contenido de las direcciones 0-8 antes difique el subprograma de resta para que devuelva
y despus). Qu ocurrira si, por error, la segunda el valor absoluto de la diferencia por el acumula-
instruccin (direccin 1) se introduce como 201 dor y en la direccin 201 ponga 0 si el resultado
(hexadecimal)? es positivo y 1 si es nulo o negativo.
7. Hasta ahora hemos supuesto que el campo de c- 13. Utilizando el subprograma de resta del Ejercicio
digo de operacin ocupa siempre los mismos bits anterior escriba un programa que calcule el m-
del formato de instrucciones. Como consecuen- ximo comn divisor de dos nmeros, A y B, me-
cia, hemos visto que en las instrucciones que no diante el siguiente algoritmo expresado en seudo-
hacen referencia a la memoria el resto de los bits cdigo:
del formato de instrucciones quedan desaprove- repetir mientras A sea distinto de B
chados. Por eso, en muchos ordenadores el cam- si A < B intercambiar A y B;
po de cdigo de operacin no tiene una longitud A = A-B;
fija. Por ejemplo, suponga que la longitud de pa- MCD = A
labra es diecisis bits, y que todos los cdigos de fin repetir
operacin tienen cuatro bits, salvo los que em- 14. Si se dispone de una instruccin de complemen-
piezan con 1111, que corresponden a todas las tar (el contenido del acumulador), es decir, cam-
instrucciones que no hacen referencia a la memo- biar los ceros por unos, y los unos por ce-
ria: el resto de los bits de la instruccin sirven co- ros, resulta mucho ms fcil realizar la diferen-
mo extensin del cdigo de operacin. Cun- cia entre dos nmeros. En efecto, compruebe que
tas instrucciones con referencia a la memoria, y si M y N son dos nmeros y N 1 es el comple-
cuntas sin referencia a la memoria podramos as mento (resultado de complementar: cambiar los
tener en el repertorio? 0 por 1 y viceversa) del segundo, entonces,
8. Suponga que se carga en memoria el programa teniendo en cuenta el truco sugerido en el Apar-
para sumar cien nmeros en Smplez segn la tado 1.8 y utilizado en el Ejercicio 9, resulta que
primera idea del Apartado 1.5 (es decir, con M + N 1 + 1 = M N . Teniendo esto en cuen-
102 instrucciones), y que previamente todas las ta, y suponiendo que Smplez dispone de la ins-
palabras de la memoria contenan ceros. Cul se- truccin NOT (complementar el acumulador, o
ra el resultado de la ejecucin? lo que es lo mismo, hacer la operacin lgica de
negacin sobre su contenido) en lugar, por ejem-
9. Escriba el programa para la suma de cien nme- plo, de CLR, escriba otro subprograma para la
ros, pero con el contador incrementndose de 0 sustraccin.
a 99, segn lo indicado en el texto (al final del
15. En el Ejercicio anterior se supone M N . Anali-
Apartado 1.8).
ce casos en los que no sea as, observe qu tienen
10. Si el resultado de ejecutar DEC cuando el acu- en comn los resultados y vea lo que se obtiene si
mulador contiene 0 (o sea, los doce bits a cero) es estos resultados se complementan.
1.19. Ejercicios 79

16. Considere un ordenador con palabras de ocho las direcciones de comienzo de ambas (argumen-
bits. Los tres primeros bits del formato de instruc- tos de entrada) en esas palabras.
ciones corresponden al cdigo de operacin y el
19. Para que la persona que escribe un programa no
resto a la direccin de MP. Los cdigos de opera-
est obligada a conocer muchos detalles de los
cin son:
subprogramas que utiliza, puede modificarse el
000: HALT (Parar) mtodo explicado en el texto, de modo que la di-
001: CLR (Poner a cero el acumulador) reccin de retorno (en nuestro caso, dentro de la
010: ADD (Sumar al acumulador) instruccin BR que ponemos al final del subpro-
011: SUB (Restar del acumulador) grama) se guarde en la primera palabra del sub-
100: BZ (Bifurcacin si el resultado de la ltima programa, y no en la ltima. Modifique el sub-
operacin en la UAL ha sido cero) programa de resta, y las secuencias de llamada,
101: ST (Almacenar el acumulador) para seguir esta idea.
110: LD (Cargar el acumulador)
111: BR (Bifurcacin incondicionada) 20. Escriba un subprograma para multiplicar nme-
ros enteros en Smplez.
Inicialmente todas las palabras de la MP tienen
como contenido 00000000, salvo las diecisiete 21. Al principio del Apartado 1.7 se dice que 7640
primeras, que contienen lo siguiente: (octal) puede interpretarse en Smplez bien como
el nmero 4.000 (decimal) o bien como la instruc-
Dir. Contenido Dir. Contenido cin HALT. Pero hay una tercera interpretacin.
[ 0] 11010001 [ 9] 01001100 Suponga que la direccin 1 tiene ese contenido
[ 1] 01001111 [10] 10100001 y que se ejecutan sucesivamente estas instruccio-
[ 2] 10110001 [11] 11100000 nes: LD /1 y ST /509. Cul es el resultado de
[ 3] 11010010 [12] 00000001 la ejecucin? En consecuencia, cul es la tercera
[ 4] 01001100 [13] 00000010 interpretacin posible del contenido de una pala-
[ 5] 10110010 [14] 00000000 bra?
[ 6] 01101101 [15] 00000011
22. Escriba en ensamblador los Programas 1.3 y 1.4,
[ 7] 10001110 [16] 00000100
pero con las zonas de datos incluidas en el pro-
[ 8] 11000001
grama (con las seudoinstrucciones RES 100 para
Analice el programa y averige lo que hace. Indi- el primero y RES 50 para el segundo).
que el contenido de las palabras que se modifican,
23. Queremos leer ochenta caracteres sucesivos del
antes y despus de la ejecucin.
teclado y llevarlos a ochenta palabras de la memo-
17. En el Programa 1.6 hemos querido poner de ma- ria, a partir de la direccin 100. Utilizando la tc-
nifiesto cmo un programa, en un determinado nica de espera activa, escriba un programa que
momento del curso de su ejecucin, puede cons- realice esa operacin y que, adems, haga eco,
truir contenidos binarios que en otro momento es decir, cada carcter que se lea del teclado debe
ejecuta como instrucciones. Pero para el proble- aparecer en la pantalla.
ma all planteado hay una solucin ms inme-
24. La conversin entre representacin binaria de n-
diata, que consiste en guardar directamente, en
meros enteros y cadenas de caracteres codificados
las palabras de direcciones 5 y 6 (por ejemplo),
en ASCII es conceptualmente sencilla. Basta con
las codificaciones binarias de BR /17 y BR
tener en cuenta que si n es un dgito decimal su
/27. Rehaga el programa y observe el ahorro en
codificacin en ASCII es 48 + n. Por tanto, a par-
instrucciones.
tir del nmero decimal cdu (centenas-decenas-
18. Convierta el programa para el intercambio de zo- unidades) podemos encontrar su representacin
nas de memoria en un subprograma que valga pa- binaria haciendo la operacin: 100 (c 48) +
ra dos zonas cualesquiera. A tal efecto, se reser- 10(d48)+(u48). Escriba un programa que
varn tres palabras al principio. Se supone que, lea tres caracteres del teclado, los interprete como
previamente a su ejecucin, el programa que lo un nmero y obtenga su representacin interna en
llama habr depositado la longitud de las zonas y binario.
80 Leccin 1. Smplez

25. Imagine un ordenador con palabras de nueve bits. 1100 : BR (bifurcacin incondicionada)
En el formato de instrucciones, los tres primeros 1101 : OUT (escribir un carcter, interpretando
representan el cdigo de operacin, y los restantes los ocho bits menos significativos co-
la direccin. Su repertorio de instrucciones es: mo la codificacin de ese carcter,
000: HALT (Parar) por el perifrico de salida)
001: CLR (Poner a cero el acumulador) Suponga cargado en la MP el siguiente programa:
010: ST (Almacenar el acumulador)
011: LD (Cargar el acumulador) Dir. Contenido Dir. Contenido
100: ADD (Sumar al acumulador) [ 0] 0010100000 [31] 0000000000
101: SUB (Restar del acumulador) [ 1] 0100010001 [32] 0000000001
110: BR (Bifurcacin incondicionada) [ 2] 0110010001 [33] 0000000010
111: BZ (Bifurcacin si el resultado en la UAL [ 3] 0010010010 [34] 0000000011
ha sido cero) [ 4] 0100100000 [35] 0000000100
Las direcciones de memoria 60 y 61 estn asigna- [ 5] 0110010010 [36] 0000000101
das a un perifrico de salida (estado del perifrico [ 6] 0010000100 [37] 0000000110
y dato a escribir, respectivamente) y las 62 y 63 [ 7] 0100100000 [38] 0000000111
a un perifrico de entrada (estado del perifrico y [ 8] 0110000100 [39] 0000001000
dato a leer, respectivamente). [ 9] 0010010000 [40] 0000001001
El siguiente programa est cargado en la MP: [10] 1000010001 [41] 0000001010
[11] 1010001101 [42] 0000010100
Dir. Contenido Dir. Contenido [12] 1100000000 [43] 0000000000
[ 0] 011111110 [ 6] 011111100 [13] 1101010010 [...] (siguen ceros)
[ 1] 111000000 [ 7] 111000101 [14] 0000000000
[ 2] 011111111 [ 8] 011001011 [15] 0000000000
[ 3] 010001011 [ 9] 010111101 [16] 0000001010
[ 4] 101001010 [10] 000110000 [17] 0000000000
[ 5] 111000000 [11] ... [18] 0000000000
[...] (siguen ceros)
Qu hace este programa? En el caso de que hu-
biera que ampliar el programa con una o varias Analice lo que hace tal programa, y en particular
instrucciones ms, sera necesario cambiar algo responda a las preguntas siguientes:
en las dems? Por qu?
Cmo se utiliza la palabra de direccin 17?
26. Considere un ordenador con palabras de diez bits.
Qu resulta en la palabra de direccin 18 des-
En el formato de instrucciones los cuatro prime-
pus de la ejecucin?
ros bits especifican el cdigo de operacin y los
seis restantes una direccin de la memoria princi- Qu pasara si el contenido de la palabra de
pal. Algunos cdigos de operacin del repertorio direccin 16 fuese 0000010100 (o sea, D20
de instrucciones son: en lugar de D10)?
0000 : HALT (parar la ejecucin) Qu escribira el perifrico de salida?
0001 : CLR (poner a cero el acumulador)
0010 : LD (cargar en el acumulador) 27. Escriba un subprograma para mostrar en la pan-
0100 : ADD (sumar al contenido del acumulador) talla ochenta caracteres. Se supondr que el pro-
0110 : ST (almacenar el contenido del acumula- grama que le llama ha colocado previamente esos
dor) ochenta caracteres en otras tantas palabras de la
1000 : SUB (restar al contenido del acumulador) MP, las de direcciones comprendidas entre 10
1010 : BZ (bifurcacin si el resultado en la UAL (donde guarda el primer carcter) y 89 (donde
ha sido cero) guarda el ltimo).