fmprobo que puede llegar a ser el programar problemas un
poco m1ls complicados
(*) .Si todavia le qued�n 1lniJoos p�
(*) En la pd.ctica un usuano solo uti-li"a e l lcnquaj� de máquina en ocadones muy c"cep<don�les, por ojem_ plo, at poner úi! mar",hn una instalaclC;h, p�r� ""rgar manualmente en la memoria un paqu�ño pro�rama ("bo"t� �r<lp·) que a su vaz p"rmitirá cargar �ut"",áticamentQ
a
trav�s de un periférico otros p�ogramas(cap.
J , _ I\p. 7 . 2 ) . lln a�taa ocasÍo!1es se simplifi<;a bastantú el n<lbajo tomando los hib e� grupos de trús o cu,, tro y pasando así direQ-t-_�mentc al s�"t",ma de numer�_ don octal o· hexadecimal, respectivamente .(
Ca
p.
l , Ap. 2 . 2 ) .- 32 -
1.32
ra continuar, le invitamos a complet_ar un tercer eJemplo, del cual $610 llegaremo� aquí hasta el organigrama, que mas adelante programaremos con un procedimiento bastante menos engOrroso.
Basta reflexionar un pooo sobre la naturaleza de las difioultades encontradas para advertir que, en defi nitiva, todas provienen de tareas rutinarias, cálculo de los datos,e interpretaci6n de los resultados en sistema: hinario, atribuci6n de direcciones, gue también han de -
ponerse en b_tnario, 'l tener que consultar continuamente los cdd:igos de operaci6n. Ahora hien, el ordenador es una maquina concebida procisameute palOa realizalO c1l:1cu-- los rutinarios, por lo que podemos pensar en encargar al propio ordenador de tales talOeas. En el Capítulo siguie!!. t.e explotaremos esta idea.
Se trata de oalcular e imprimir el primer número mayor que
1 . 000
de la sucesi6n de Fibonacci.La ",ucesión de Fibonacci se define as!,
�
O ¡
_1 ¡
f - f, " , (n>1)
n n- n-
ES decir,
0 , 1 , 1 , 2 , 3 , 5, 8 , 1 3 , 2 1 , 34,55,89 ,144
• • •Es-ta suoesi6n fu¡; ya estudiada por los pitagóri cos, que encontraron en ella curiosas propiedades antro po16gioas. Así, la relaci6n
fn+l/fn� 1 , 6 ,
que ellos llam� ron "número de oro", se corresponde oon muchas proporci;:>: neS anat6micas. Actualmente, y en un terreno m&s pragm& tico, la sucasi6n de Fibonacci encuentra aplicación enl.33 - 33 -
algunos algoritmos de optimizaci6n .
Volviendo a nuestro problema, habrá que calculQr �ucesivamento todos los t(\rm1nos medianta la suma de los dos anterioros, parar cuando el Oltimo calculado s�a su
p<!rior a 1.000 � irnprirn�rlo. Podemos definir trQS varia_
bias (que en la máquina ocupadn luego trQS p,.,s.\ciones
de memoria), UL'I' (e¡ Mti,"o término calculado) "EN (el
penllltimo t1irmino calculado) y SUM (la suma <le ULT y PEN) .
Comenzamos por hacer P�N � O , ULT � 1 . Luego calculamos
SOM = P�N
+
ULT. Si SU�l ea menor qu<> 1.000, cambiamosPEN por ULT y ULT po ... SUM, y volvemos a calcular SUN, y
asI sucesivamente. Cuando SUM > 1.000 <)rdenaremDs escri
bir SUM y parar.
E=p
•• a<
PEN _ OI
U I..T - 1 SUM+-(PEN)+(ULT) PEN_(UI..T)(SUM)
UI..T_(SUM) Fig. 1 . 9 .- 34- - 1.34 Este conjunto de p"sos o alf1olti.tmG (*) está "e--- presentado en -forma de organigram" en la f1gu"a
1 . 9 :
en la 1.10 seh"
detallado más, de modo que cada bloqueco
rresponde a Una1nst"ucci6n
de máquina.(" ('( (" (" (" (" ( (, .¡ (9) _ (ULT) (.o) ( (") íSUM)
(14)
(i2) PARAR (15) Fig.1.10.
( ' ) Utilizaremo$ "n adolanto> "alg<:>r;tolo" co.mo e"pedUca ción de Una a"ü�"ncia de accion"� para la �"lución : de un problema. Iln el Tema 2 del vol.
Ir
se profundi za sobre este .concepto, -¡,ásico en Informática. -1 .
35
- 35 -
4,
OBSERVACIONESSOBRE LA ENTRADA/SAUDA
La instru��U;n (le entrada de datos en EIT-2 (c6- oi9"0 oe operación 011ll) implica que la unl¿ad de entra da, después de leer 109 caracteres PQrforados en la tar jeta, "ebe ocuparse de tr"ducirlos al formato dC! coma fi
p, creando Una pal"bra oe 36 bits para transferirla a -
l a �!P . Análogamente, la instrucci6n de salida (10UOO) r.<:c quiüre que j a ut\idad de salida interprete la palabra )'
l a traduzca a una cadima da df'lHo� decimal"s antes de ilnrrimir. Oporaciones similares deben rC!ahzarsc con las instruccion�s de entrada )' sahda en coma flotante que - utilizarem,,� luego.
Mora bien, es muy conveniente advertir desde e.§. te mOZOento que en ningün orde"ador real s� h"eel\ las co municaciones con 01 m::terlor de es!:C! modo. Las razones -
para ello Sí> exponC!n cn 01 Terna 4 d", ��t� volumen (Caro
1,
II.r. 1 . 2 ) . Si en BIT-2 vamo� a s"q�lr trabajando contales instrucciones es para no pcrd<:!rnc� dí:! mamí:!"to en
los detalles r{)lativamente compli"ado� jeo las encradas y
salidas, detalles que,se expondr�n cm c� ciLado 'l'ema 4 .
5 .
SOBRELA
liáERPRETACio'r,i'DELOS
CONTEI1IDOS DE LA ��EM
üRIA,
Como hemos visto, tanto las insLr�cGlonC!s COIl'O -
Jos datos se almacenan en la memOrla de IlIT-¿ eodlfica- dos, de acuerdo con unos convenlOS rreestablecidos , en -
ristras de 36 bits. Por tanto, el contenido de c,,-alquiür
- JI> -
1 . 3 6
°
corno un dato (* ) .Por ejemplo , supongamos que en una determinada direcci6n est4 almacenada la Siguiente ristra de bits:
000000000000000000000000000000000010
podemos decir que en esta direooión está almaoe nado el namero
2 °
la instr\tcci6n "parar" (al ser el có digo de operaci6n el oO�'L'espondiente a parar, el resto da los bits no cuentan) , y ambas oosas son Ciertas . El que la máqUina lo interprete Como una cosa u otra depen de de cllmo "stl'! escrito el conjunto del programa. Conti nuando Con el ejemplo, supongamos que esa palabra est4 en la dir"cción 1, y que en un determinado momento se ejecuta la instrucción101100000000000000000100000000000001
(que nst!!. almacenada, por ejemplo, en la direcci6n al , que, traducida a nue"tro lenguaje, le dice a la unidad
!le control: "s""'a al aoumulador el oontenido de la direc c16n 1"1 entonces, el resulta,10 de ejecutar esta Gltim" instrucción será que el contenido del acUl\tulador se ha- br!!. inorementado en dos unidades. l\.hora bien, si en la
( ' ) Este es así en el ",odelo de máquina de propósito ga_ neral que aqu! eG�amos considerando. sin embargo, en ,"uchos sistemas digitales programados concebJ.dos pa ra aplioaotones especiales, y que cada d ! a abundan - mas gracias a la apart�lón de unidades do proceso ",uy pequeñas y muy baratas llamadas rnicroprooesado- "e9, loa datos se encuentran en una memoria apa.rte - de la dé loa programas.
1 . 3 7
- 37 -
direcci6n
O
hay, por ejemplo,000100000000000000000100000000000000,
que oorresponde a la instrucci6n "poner a o"ro el acumu
ladorw , entonces resultaría
10
siguiente,a) al ejecutarse l a lnstrucci6n almacenada en
0,
se pondria a cero e l acumulador ¡
b) se pasaría a la siguiente instrucci6n , que es
precisamente la que hay en la direcci6n
1 ,
yque, Como hemos visto, Corresponde a "parar" . Por tanto, se detendría la ejocuci6n , y no se s:!. guirían ejecutando instrucciones , y , concretamente, nun
ca se ejecutaría la almacenada en 8 .
s i lo que queremos es guardar en l a direcci6n 1
la constante 2 , Y que este contenido nunca sea interpre
tado como instrucci6n, hay una forma muy fácil de hacer
la, basta con 1ntroducir en la direcci6n
O
Una instruo-ci6n de salto incondicianal¡ asi, nuestro programa po- - dría ser:
[ O]
0100000000 O 000 O 000 0001
O000 000
O 000O 10
(salta a la direcci6n2)
[1 J 000000000000000000000000000000000010
(constante2)
[2]
00010000000000 O 00 O 000 1000 000 O 000 0000
(poner a cero el acumulador) etc.
- J8 -
1 .38
Por otra
parte, el hecho <leque cualquier pala-
b;r;a pueda interpretnrse como una instrucción o oomo un
dato permite gue se puedan modificar, si sc dos",a, las -
instrucciones ",n el ourso de la ejecución de un programa _
"ara ilustrar esta »osihUid"d, consideremos un »rograma
que contenga, entre otras, las siguientes instrucciones,
[O]
010000000000000000000100000000000010(salto a la dirección 2)
[1]
000000000000000000000000000000000001(constante
1)[2]
0001000000000O
00O O
00 10O
000 000 00O
00 00(poner
acero el acumula<lor)
[8J
001110000000000000000100000001100100(cargar
01oontenido
<lela direoción
100)10)
[
15]
00111000000000000000010O
000 00on O
10 00(cargar el contenido de la direcci6n
8 )[
16J
101100000000000000000100000000000001(sumar el contenidu
dela dir€Occión
1)[
17]
1010100000000000000001000000000010001.39
- 39 -010000000000000000000100000000001000
(salto a la direcci6n8)
Cunndo se ejecuta por vez primera la instrucci6n
[B]
se carga en el acumulador lo que haya en la direc- - ci6n100.
Más adülante, con la inst>:ucción[15J
se cargn el contenido de[8J ,
con la[16J
se le suma una unidad(contenido de
[1J ) ,
y COn la[17J
el resultado , es deci r,101100000000000000000100000001100101
se deposita nuevamente en la dirección
8.
Siguen luego unas instrucciones que realizan algún procesu que ahora no viene al caso, y cOn la[25J
se salta a la di- recci6n 8 . Entonces, al ejecutar por segunda vez esa ins trucción (la[sJ)
lo que Interpreta la unidad de control es "cargar en el acumulador el contenido de la direcci6n101". A
la tGrcera ve� sería102,
etc. Vemos así que - - unas veces el contenido de la dirección 8 se interp,·"ta como una instrucción, mientras que otras (durante la ej2: cuCión de[15] - [17.J )
se intel'preta como Un dato.Esta tlÍcnlca de "modificaci6n de instrucción" puede utilizarse, por ejemplo, para tratar sucesivamente un grupo de palabras que ocupan una determinadn zona dc la memoria (en el programa ahterior , la zona correspon- diente a las direcciones
100
y sucesiva s ) . Sin embargo, en la mayoría de los casos es una t¡;cnica poco recomenda- 40 - 1 . 4 0