Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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.
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
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.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
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
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
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
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
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
Programa 1.7. Suma de los diez primeros trminos de la sucesin de Fibonacci, con cdigo fuente en ensamblador.
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
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
(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).