• No se han encontrado resultados

Si el lector ha tenido la paciencia de seguir p:'! so a paso los dos ejemplos podrá hacerse una idea de lo

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 .

(

C

a

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 en

l.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, cambiamos

PEN 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 _ O

I

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 se

h"

detallado más, de modo que cada bloque

co­

rresponde a Una

1nst"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,

OBSERVACIONES

SOBRE 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 con

tales 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 .

SOBRE

LA

liáERPRETACio'r,i'DE

LOS

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ón

101100000000000000000100000000000001

(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 ,

y

que, 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

O

000 000

O 000

O 10

(salta a la direcci6n

2)

[1 J 000000000000000000000000000000000010

(constante

2)

[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 <le

que 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]

0001000000000

O

00

O O

00 10

O

000 000 00

O

00 00

(poner

a

cero el acumula<lor)

[8J

001110000000000000000100000001100100

(cargar

01

oontenido

<le

la direoción

100)

10)

[

15

]

00111000000000000000010

O

000 00

on O

10 00

(cargar el contenido de la direcci6n

8 )

[

16

J

101100000000000000000100000000000001

(sumar el contenidu

de

la dir€Occión

1)

[

17

]

101010000000000000000100000000001000

1.39

- 39 -

010000000000000000000100000000001000

(salto a la direcci6n

8)

Cunndo se ejecuta por vez primera la instrucci6n

[B]

se carga en el acumulador lo que haya en la direc- - ci6n

100.

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 direcci6n

101". A

la tGrcera ve� sería

102,

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

Documento similar