P101 Manuale Programmazione
P101 Manuale Programmazione
P101 Manuale Programmazione
Programma 101
Questo manuale dedicato alla programmazione del calcolatore Olivetti Programma 101,
allillustrazione delle istruzioni e delle tecniche
che necessario conoscere per programmare la
soluzione di un dato problema.
Tutto ci che si riferisce allaspetto operativo
del calcolatore esula dalle finalit del presente
volume ed trattato nel Manuale Generale.
Poich il calcolatore Olivetti Programma 101,
pur essendo di piccole dimensioni, ha le caratteristiche dei calcolatori elettronici numerici,
allinizio del manuale sommariamente illustrata lorganizzazione di un calcolatore e la funzione del programma.
Lultima parte contiene consigli utili circa il modo con cui si deve affrontare e risolvere un problema mediante luso del calcolatore.
Indice
Struttura di un calcolatore elettronico
9
10
11
11
12
Organi di entrata
Organi uscita
Memoria
Unit di governo e unit aritmetico-logica
Programmazione
12
12
12
14
14
Le funzioni aritmetiche
16
16
17
17
18
19
20
23
23
23
24
Le funzioni di servizio
29
Istruzione di stampa
Istruzione di azzeramento
Interlinea
29
29
30
Le funzioni logiche
31
Principi generali
Salti incondizionati
Salti condizionati
31
31
34
Dati costanti
38
38
38
Tecniche di programmazione
40
40
40
40
41
42
43
43
44
44
45
47
Programmi particolari
49
Programma su pi schede
Istruzione RS
Utilizzazione del tasto S per lavvio di un programma
Utilizzazione dei sottoprogrammi
49
49
50
50
Il calcolo manuale
52
52
52
Norme operative
53
53
53
54
54
Tempi macchina
55
56
Analisi numerica
Analisi logica
Programmazione
56
56
58
59
60
61
Indice analitico
63
(pag. 10)
Memoria
La memoria pu essere considerata la parte centrale di un calcolatore, registra ci che viene
comunicato dallesterno per mezzo degli organi di entrata e lo restituisce opportunamente ela-
borato tramite gli organi di uscita. Ogni dato, risultato o comando deve passare attraverso la
memoria.
La memoria qualificata in funzione della capacit e del tempo di accesso.
La capacit indica quanti dati sono registrabili in memoria. E espressa in varie unit di misura,
a seconda del tipo di calcolatore e dellorganizzazione della memoria.
Il tempo di accesso indica il tempo intercorrente tra il momento in cui si richiede un dato contenuto in memoria ed il momento in cui si pu disporne. Spesso uno stesso calcolatore, specie
se si di medie o di grandi dimensioni, dotato di diversi tipi di memoria.
Le memorie a tempo di accesso rapido (i nuclei magnetici, thin film, ecc.) sono caratterizzate
da un tempo di acceso dellordine dei microsecondi o dei nanosecondi, ma hanno un costo elevato. I dati in esse contenuti possono essere direttamente sfruttati dallunit aritmetico-logica.
Le memorie a tempo di accesso medio o basso (tamburi magnetici, dischi, nastri, ecc.) sono
caratterizzate da un tempo di accesso molto pi elevato, ma hanno un costo notevolmente minore. In generale i dati in esse contenuti non possono essere sfruttati direttamente dallunit
aritmetico-logica, ma devono essere trasportati preventivamente nella memoria ad accesso rapido che ha la funzione di memoria principale del calcolatore e che interviene nellelaborazione
vera e propria. Le altre memorie hanno una funzione ausiliaria e sono utilizzate per
limmagazzinamento di una considerevole quantit di dati.
I calcolatori a programma registrato consentono la registrazione in memoria, sotto forma codificata, del programma relativo allelaborazione che si vuole eseguire. Lunit di governo, ovvero gli organi di comando, prelevano dalla memoria le istruzioni che devono essere via via eseguite.
PROGRAMMA
Per risolvere un determinato problema ogni calcolatore elettronico esegue una serie di operazioni elementari su dati specifici. Lindicazione delloperazione da eseguire e dei dati su cui
operare costituisce unistruzione; una serie di istruzioni che risolve un determinato problema
costituisce un programma.
Preparare un programma significa dunque indicare nellordine le operazioni che il calcolatore
deve compiere, attribuendo a ciascuna un codice determinato nel linguaggio della macchina.
Il programma codificato viene registrato in memoria prima di iniziare lelaborazione dei dati per
la quale stato preparato. In tal modo poi sufficiente fornire al calcolatore solo i dati sui
quali il calcolo si deve svolgere.
Dopo che il programma stato registrato, sufficiente indicare alla macchina dove si trova la
prima istruzione da eseguire; a partire da quel punto, il programma si svolge in modo automatico. Il calcolatore prende in carico, infatti, le singole istruzioni sequenzialmente, ameno che
non incontri istruzioni particolari che costringono lunit di governo a interrompere lesecuzione
sequenziale dei comandi.
Ci si verifica quando il calcolatore deve operare automaticamente delle scelte in base a risultati (pag. 11) ottenuti a al tipo di dati su cui opera (salti condizionati), o quando, indipendentemente da qualsiasi scelta, deve prendere in considerazione che si trova registrata in memoria,
ma che non quella adiacente a quella che si sta esaminando (salti incondizionati).
Si consideri, ad esempio, di dover risolvere un problema nel corso del quale sia necessario
confrontare due dati, a e b. Le esigenze del problema impongono calcoli diversi a seconda
che i due valori da confrontare siano eguali o differenti.
Se il confronto dimostrer luguaglianza dei due valori (a=b), si eseguir una serie di operazioni che potr essere sinteticamente indicata come sequenza n. 1. In caso contrario (ab), la
serie di calcoli che si dovr eseguire sar differente e verr indicata come sequenza n. 2.
Per risolvere il problema il programmatore deve scrivere, dopo unistruzione di confronto, sia la
prima che la seconda sequenza, poich il programma deve sempre prevedere tutti i casi possibili, ma dovr far si che lesecuzione di ciascuna sequenza escluda laltra.
Ci si ottiene nel caso del calcolatore Programma 101, con lutilizzazione di un particolare tipo
di istruzioni, mediante le quali la macchina pu raggiungere luna o laltra sequenza.
Ogni programma preparato per risolvere un certo problema valido indipendentemente dai valori numerici dei dati su cui opera.
Unit aritmetico-logica
Questa unit costituisce la parte del calcolatore capace non solo di eseguire operazioni aritmetiche, ma anche di operare trasferimenti di dati allinterno della memoria e di prendere decisioni logiche.
La parte aritmetica di questa unit prende di solito il nome di accumulatore, ed dotata di
un organo calcolante detto addizionatore-sottrattore che contiene, a fine operazione, il risultato.
Unit di governo
Lunit di governo costituita dallinsieme degli organi di comando; presiede quindi al funzionamento delle singole parti del calcolatore e prende ordinatamente in carico le istruzioni del
programma, le interpreta e le esegue, inviando i corrispondenti comandi agli organi interessati.
Lunit di governo collegata a tutti gli organi del calcolatore.
organi di entrata
organi di uscita
memoria
unit di governo e unit aritmetico-logica
Organi di entrata
Gli organi di entrata sono:
Organi di uscita
Gli organi di uscita sono:
Memoria
La memoria dellOlivetti Programma 101 suddivisa in 10 registri.
Due registri sono dedicati alla memorizzazione del programma e possono contenere ciascuno
24 istruzioni, o comandi elementari.
Nei restanti otto registri, ciascuno dei quali ha la capacit di 22 cifre pi virgola e segno, si
possono invece registrare i dati. Se un dato ha un numero di cifre inferiore alla capacit del registro, questultimo non verr interamente occupato.
I registri sono denominati M, A, R, B, C, D, E, F, e si possono considerare distinti in due gruppi.
(pag. 13) I registri M, A, R sono detti operativi in quanto intervengono direttamente
nellesecuzione delle operazioni aritmetiche. Il registro M ha anche limportante funzione di accogliere tutti i dati impostati in tastiera.
Gli altri registri sono detti di deposito e sono utilizzati per memorizzare dati, risultati intermedi
di un calcolo e dati costanti.
Ogni registro pu contenere un unico dato, di lunghezza massima pari alla sua capacit.
Ciascun registro di deposito pu tuttavia essere diviso in due parti, in ognuna delle quali si pu
registrare un dato avente una lunghezza massima di 11 cifre pi virgola e segno.
Un registro di deposito pu quindi essere utilizzato per la registrazione di dati, secondo una
delle seguenti configurazioni:
Nel primo caso il registro utilizzato
nella sua interezza ed ha una capacit di 22 cifre, pi virgola e segno;
nel secondo, invece, viene utilizzato
diviso in due registri ridotti ed indipendenti, ciascuno della capacit di
11 cifre pi virgola e segno.
Il registro viene in tale circostanza
sdoppiato; la parte destra conserva
la denominazione originaria (ad esempio B) e quella sinistra la stessa,
scritta in minuscolo (ad esempio b).
Durante la stesura dei programmi
per si usa scrivere, anzich la lettera minuscola, la maiuscola seguita
dal simbolo / (ad esempio B/ per B,
D/ per d) in quanto la combinazione
di lettera maiuscola col simbolo / consente di formare da tastiera la corrispondente minuscola.
Poich lOlivetti Programma 101 un calcolatore a programma registrato, nella sua memoria si
introducono anche i comandi elementari, o
istruzioni di programma. I due registri
programma, che accolgono esclusivamente istruzioni, hanno una capacit complessiva di 48 istruzioni. Qualora il programma
sia costituito da pi di 48 istruzioni, quelle
che eccedono questo numero possono essere registrate nei registri F, f, E, e, D, d,
fino ad un massimo di 120.
(pag. 14)
Ciascun registro interno ha la capacit di
24 istruzioni. Un semiregistro ha la capacit di 11 o 13 istruzioni a seconda che si
tratti di della parte destra (contrassegnata
con lettera maiuscola) o sinistra (contrassegnata con lettera minuscola).
I registri impegnati per il programma non
possono essere ovviamente utilizzati per
la memorizzazione dei dati.
Esiste per anche la possibilit di utilizzare
in modo promiscuo i registri F, f, E, e, D,
d, registrando simultaneamente dati ed
istruzioni.
SCHEDA MAGNETICA
I calcolatori elettronici, come gi detto, oltre alla memoria di elaborazione collegata
allunit aritmetico-logica, dispongono in generale di altre memorie dette ausiliarie, pi lente, di elevate capacit e basso costo, utilizzate soltanto a scopo di immagazzinamento di dati.
Nel caso dellOlivetti Programma 101 si pu considerare come ausiliaria la scheda magnetica,
che ha le dimensioni di una normale scheda meccanografica e sulle quale sono registrate magneticamente istruzioni di programma e dati numerici.
Su una scheda magnetica si pu registrare in modo semplice e automatico un programma. E
possibile in tal modo ottenere la registrazione permanente dei programmi su un supporto esterno al calcolatore, nonch la loro semplice e rapida introduzione in memoria ogniqualvolta si
desideri utilizzarli.
Nella registrazione della scheda magnetica, cio nel trasferimento del programma dalla memoria sulla scheda, viene registrato integralmente il contenuto dei registri 1, 2, F, E, D (e di conseguenza anche gli eventuali dati contenuti nei registri F, E, D).
Nelle lettura della scheda, cio nelloperazione di trasferimento da scheda a memoria, il contenuto della scheda andr a occupare tutti i registri 1, 2, F, f, E, e, D, d annullandone il precedente contenuto.
Programmazione
Un programma costituito da una successione di istruzioni atte a definire, nel linguaggio proprio del calcolatore, lordine secondo cui devono essere effettuate le singole operazioni al fine
di risolvere un determinato problema.
Ogni istruzione si divide in due parti: indirizzo e funzione. Le istruzioni composte dalla sola
parte di funzione sottintendono lindicazione del registro M.
Le istruzioni del calcolatore Programma 101 comandano varie funzioni, classificabili nel modo
seguente:
funzioni aritmetiche: le quattro operazioni elementari, la radice quadrata, la determinazione del valore assoluto
introduzione dei dati e funzioni di trasferimento: istruzioni di Stop, trasferimenti semplici, scambio tra registri
funzioni di servizio: azzeramento, stampa, interlinea
funzioni logiche: salti incondizionati, salti condizionati.
(pag. 15)
Le istruzioni di un programma devono essere scritte sequenzialmente dal programmatore, sui
moduli appositamente studiati per evidenziare ad ogni istruzione la situazione di tutti i registri.
Si evitano in tal modo errori dovuti ad una inesatta attribuzione di dati ai singoli registri, soprattutto nei casi in cui si abbiano frequenti trasferimenti.
E inoltre sempre possibile controllare lesatta ubicazione delle singole istruzioni che vengono
man mano ad occupare i registri programma.
Le funzioni aritmetiche
per
per
per
per
comandare
comandare
comandare
comandare
unaddizione
una sottrazione
una moltiplicazione
una divisione
Le singole operazioni sono eseguite algebricamente su numeri positivi o negativi, interi o decimali.
Dopo lesecuzione di unoperazione aritmetica il contenuto dei registri A e M il seguente:
Esempi
prima
+
dopo
prima
dopo
prima
x
dopo
prima
:
dopo
M
5
A
7
5
4
12
6
4
8
2
3
8
2
24
10
Nel caso si eseguano operazioni con numeri decimali, la struttura delle istruzioni non cambia;
occorre per stabilire, posizionando opportunamente lindicatore dei decimali, il numero dei decimali che si desidera ottenere nel risultato. Le possibili posizioni dellindicatore sono 16 (da 0
a 15).
Il calcolatore esegue automaticamente gli incolonnamenti necessari e, nel caso di addizione,
sottrazione o moltiplicazione, prende in considerazione tutti i decimali degli operandi, calcolando il risultato completo delloperazione con eliminazione successiva dei decimali in eccesso rispetto a quelli prefissati.
Nel caso della divisione, invece, il calcolatore aggiunge automaticamente al dividendo tanti zeri, quanti sono necessari per ottenere un risultato con il numero di decimali richiesto.
Dopo lesecuzione di unoperazione aritmetica con numeri decimali, il contenuto dei registri A e
M il seguente:
Oltre ai due registri A e M, nellesecuzione delle operazioni aritmetiche interviene anche il registro R che, al termine di unaddizione, sottrazione o moltiplicazione, contiene il risultato completo delloperazione, con tutti i decimali che gli competono, indipendentemente dalla posizione
dellindicatore dei decimali.
Al termine della divisione il registro R contiene leventuale resto aritmeticamente completo nella sua struttura decimale.
Esempi
prima
+
dopo
prima
x
dopo
prima
:
dopo
decimali 4
M
4,7938
A
7,6329
4,7938
4,7938
12,4267
7,6329
12,4267
4,7938
-5,12
36,5905
-4,2
36,59059602
-5,12
0,8203
0,000064
zione contenente, accanto allindicazione delloperazione, il simbolo del registro da cui si richiama il secondo termine.
Ad esempio, volendo sommare ad un numero contenuto in A un numero contenuto in C, si
programmer listruzione C +, volendo invece sottrarre dal numero contenuto in A il numero
contenuto in F, si programmer listruzione F -.
Lesecuzione delloperazione avviene in due fasi:
1a fase: il calcolatore trasferisce automaticamente il contenuto del registro indicato
nellistruzione nel registro M, mantenendolo inalterato anche nel registro dorigine
2a fase: si esegue loperazione programmata tra i contenuti dei registri A ed M. Il risultato,
con il numero di decimali desiderato, contenuto in A, quello completo (oppure il resto in caso
di divisione) contenuto in R.
Istruzione
1a fase
2a fase
Registro A
Registro R
B+
BM
A+M
risultato troncato
risultato completo
B-
BM
A-M
risultato troncato
risultato completo
Bx
BM
AxM
risultato troncato
risultato completo
B:
BM
A:M
quoziente
resto
La logica descritta per il registro B vale per tutti i registri di deposito (F, E, D, C) nonch per i
registri operativi (A, R) come sar illustrato in seguito.
Esempi
prima
B+
dopo
prima
Cdopo
prima
Dx
dopo
prima
B:
dopo
decimali 0
M
5
A
7
R
9
B
3
10
10
M
5
A
7,5
R
9
C
3,6
3,6
3,9
3,6
M
7
A
5,2
R
9
D
6,4
6,4
33
33,28
6,4
M
5
A
7
R
9
B
3
Esempi
prima
B/+
dopo
prima
B+
dopo
M
2
A
7
R
3
b
8
B
10
8
2
15
7
15
3
8
8
10
10
10
17
17
10
Radice quadrata
Il calcolatore esegue automaticamente e direttamente la radice quadrata.
Diverse sono le istruzioni da programmare, a seconda che il radicando si trovi nel registro M,
oppure in un altro registro, intero o diviso:
a) quando il radicando si trova nel registro M, listruzione corrispondente costituita solo dal
simbolo .
Il calcolatore, nelleseguire listruzione , estrae la radice quadrata del numero contenuto nel
registro M, dopo averlo preventivamente trasferito in A. Il risultato si forma ancora in A, con il
numero di decimali richiesto.
Alla fine delloperazione, nel registro M si trova il risultato moltiplicato per due, nel registro R
invece un dato non significativo.
Operando su un numero decimale il calcolatore corregge automaticamente la composizione decimale del radicando (analogamente a quanto avviene nella divisione per il dividendo) in funzione del numero di decimali richiesto.
Esempi
prima
decimali 0
M
10
A
7
dopo
decimali 1
prima
12
6,8
3,4
dopo
b) quando il radicando si trova in un registro diverso da M, listruzione corrispondente deve essere programmata facendo precedere al simbolo lindicazione del registro in cui si trova il
radicando.
Listruzione poi eseguita dal calcolatore in due fasi:
1a fase: il contenuto del registro indicato dallistruzione viene trasferito nel registro A, rimanendo inalterato nel registro dorigine
2a fase: si estrae la radice quadrata del numero contenuto in A (come nel caso precedentemente esaminato).
Istruzione
1a fase
2a fase
Registro A
BA
AA
risultato troncato
CA
AA
risultato troncato
RA
AA
risultato troncato
B:
BM
A:M
quoziente
resto
Esempi
prima
B
dopo
decimali 0
M
8
A
4
B
27
10
27
M
12
A
8
C
12
6,8
3,4
12
decimali 1
prima
C
dopo
Istruzione
1a fase
2a fase
Registro A
B/
bA
AA
risultato troncato
F/
fA
AA
risultato troncato
(pag. 20)
Esempi
prima
B/
dopo
prima
B
dopo
decimali 0
M
4
A
7
b
17
B
38
8
4
4
7
17
17
38
38
12
17
38
In tal caso A ed R, mantenendo sempre la funzione di registri operativi, assumono anche una
funzione analoga a quella dei registri di deposito. Occorre quindi indicarli nellistruzione programmata prima del simbolo delloperazione da eseguire.
La logica di esecuzione delle operazioni uguale a quella vista per i registri di deposito, con la
differenza che in questo caso nessuno dei due operandi si mantiene inalterato nel registro originario in quanto in esso si forma, a fine operazione il risultato.
1 caso: il registro indicato nellistruzione il registro A.
Istruzione
1a fase
2a fase
Registro A
Registro R
A+
AM
A+M
risultato troncato
risultato completo
A-
AM
A-M
risultato troncato
risultato completo
Ax
AM
AxM
risultato troncato
risultato completo
A:
AM
A:M
esulato troncato
resto
AA
risultato troncato
Istruzione
1a fase
2a fase
Registro A
Registro R
R+
RM
A+M
risultato troncato
risultato completo
R-
RM
A-M
risultato troncato
risultato completo
Rx
RM
AxM
risultato troncato
risultato completo
R:
RM
A:M
esulato troncato
resto
RA
risultato troncato
il contenuto di A positivo. Listruzione di valore assoluto non opera alcuna trasformazione (pag. 21)
il contenuto di A negativo. Listruzione di valore assoluto lo trasforma in positivo.
Esempio
prima
A
dopo
M
3
A
-6
R
4
B
8
a)
(36+12) . 17
----------------------------18
12
36
17
18
12
48
B/x
D/:
17
18
816
45
b)
36
( --- . 25) + 22
9
17
18
Descrizione
(pag. 22)
Le istruzioni da programmare saranno:
decimali 0
Istruzione
36
22
25
C :
Dx
9
25
4
100
B+
22
122
c)
9
25
22
Descrizione
2 . 8 + 12 - 7
----------------------------5
A+
B+
F B :
8
12
7
5
12
16
28
21
4
12
7
5
Descrizione
Somma di 8 + 8 = 16
Somma di 16+ 12=28
Sottrazione di 7 dal risultato precedente, ottenendo 21
Esecuzione della divisione 21: 5 = 4, ottenendo cos il
risultato finale
(pag. 24)
Le istruzioni da programmare saranno:
Istruzione
C+
S
x
4
8
8
7
7
56
Descrizione
4
4
Somma di 3 + 4. = 7
Impostazione di 8 che si posiziona nel registro M
Moltiplicazione di 7 (risultato della somma precedente) per
8 (nuovo dato impostato)
Dato che il numero 8 verr impostato all'istruzione S, e si trover quindi in M, basta programmare l'istruzione x per ottenere il risultato finale.
Funzioni di trasferimento
Le istruzioni di trasferimento comandano lo spostamento di dati da un registro a un altro e sono di quattro tipi:
Nello schema che segue sono illustrati i possibili collegamenti fra i registri.
Per ogni tipo di trasferimento vale una considerazione di carattere generale: la memoria del
calcolatore Programma 101 di tipo conservativo in estrazione e sostitutivo in immissione; di
conseguenza il registro da cui si estrae un dato continuer a conservare il data stesso, mentre
il registro che riceve un dato perde il suo precedente contenuto.
TRASFERIMENTO DA M
Poich ogni dato impostato sulla tastiera viene introdotto in M, e indispensabile poter spostare
altrove il dato stesso prima che una successiva immissione lo distrugga.
L'istruzione mediante la quale viene programmata l'operazione di trasferimento ha il simbolo
(pag. 25) , preceduto dall'indicazione del registro in cui si vuole trasferire il contenuto di M.
Questa operazione di trasferimento lascia inalterato il contenuto di M.
Esempio
prima
C
dopo
M
10
A
36
C
15
10
36
10
, R, A
La prima avrebbe il significato logico di trasferire il contenuto di M in M e non ha quindi alcuna
utilit, la seconda non opera e l'ultima, che avrebbe il significato logico di trasferire M in A, non
utilizzata come tale, ma con un significato particolare che verr esaminato pi avanti.
TRASFERIMENTO IN A
Tutte le operazioni aritmetiche, come e noto, richiedono che il primo operando si trovi in A. Se
il primo operando non e in A, ma in un altro registro, occorre trasferirvelo.
A ci serve l'istruzione di trasferimento in A che introduce direttamente in A il contenuto di
un determinato registro senza alterare il contenuto del registro stesso e di M.
L'istruzione si programma col simbolo preceduto dall'indicazione del registro il cui contenuto
si desidera trasferire.
Esempi
B/
F
prima
R
dopo
M
24
A
36
R
48
B
12
24
48
48
12
prima
dopo
M
9
A
4
R
7
7
(pag. 26)
Istruzione
B
+
A
6
4
4
5
9
5
5
B
5
Descrizione
(pag .26)
Si debba aggiungere il contenuto del registro B a quello di C, partendo da questa situazione:
M
4
A
6
10
10
B+
15
Istruzione
B
5
C
10
10
5
10
Descrizione
Se si fosse invece considerato il contenuto di B come primo operando e si fosse voluto aggiungere a esso il dato in C, si sarebbero programmate nell'ordine le istruzioni B e C +.
Il contenuto finale dei registri sarebbe stato:
M
10
A
15
C
5
B
10
Cambiando l'ordine degli addendi il risultato non cambia; cambia pero il contenuto di M. Pu
essere importante ricordare ci quando si programma una sequenza di calcoli, onde evitare errori derivanti da un'erronea valutazione del contenuto dei registri.
SCAMBIO CON A
Per spostare in un altro registro un risultato formatosi in A, si impiega l'istruzione di scambio
che consente di trasferire il contenuto di A in un registro determinato e con temporaneamente
il contenuto di questo in A.
L'istruzione viene programmata scrivendo il simbolo preceduto dall'indicazione del registro
con cui viene eseguito lo scambio. Come al solito, se il registro interessato all'operazione M,
il suo simbolo non viene indicato.
Esempi
C
E
MA
CA
EA
L'istruzione R non opera e non va usata. L'operazione di scambio non altera il contenuto del
registro M, tranne che nello scambio tra M ed A. Va rilevato che lo scambio l'unica operazione che permette di trasferire un dato da A in altro registro (di deposito).
Esempio
prima
B
dopo
M
6
A
9
R
12
B
15
15
12
M
4
A
10
C
8
D
7
Istruzione
D
C
-
10
8
4
7
10
6
10
10
Descrizione
10
D
C
8
10
7
8
6
Descrizione
Occorre osservare che in tal modo risulta cambiato il contenuto di C poich il trasferimento del
primo operando in A si e ottenuto mediante uno scambio.
La situazione finale del contenuto dei registri pertanto diversa.
Si debba calcolare:
S
:
S
x
B
S
S
:
B+
124
124
12
12
15
15
15
157
157
6
6
150
124
124
10
10
150
157
157
26
176
4
4
150
150
150
150
150
1
176
150
150
150
150
150
150
Descrizione
Impostazione del dividendo
Trasferimento del dividendo in A
Impostazione del divisore
Esecuzione della prima divisione
Impostazione del moltiplicatore
Esecuzione della moltiplicazione
Memorizzazione del risultato della moltiplicazione in B
Impostazione del dividendo della seconda divisione
Trasferimento del dividendo in A
Impostazione del divisore
Esecuzione della seconda divisione
Richiamo del risultato della moltiplicazione sommandolo al
contenuto di A
(pag. 28)
prima
/
dopo
2,6
5,231
21,8
12
0,231
5,231
21,8
12
Per illustrare pi efficacemente l'utilit della istruzione in esame, si supponga di avere un tempo espresso in ore e frazione decimale di ora (ad esempio 5,31) e di volerlo trasformare in ore,
minuti e secondi. La trasformazione viene programmata tenendo presente che un'ora corrisponde a 60 minuti e un minuto a 60 secondi.
Istruzione
S
B
S
Bx
/
Bx
/
-
M
60
60
5,31
5,31
0,31
0,31
0,31
60
0,6
0,6
0,6
60
0,0
0,0
B
60
5,31
5,31
5,0
0,31
18,6
18,6
18,0
0,6
36,0
36,0
36,0
60
60
decimali 1
Descrizione
Impostazione di 60
Trasferimento di 60 in B
Impostazione di 5,31
Trasferimento di 5,31 in A
Parte decimale di A in M
5,31- 0,31 = 5 (numero delle ore)
Trasferimento della frazione decimale di ora nel registro A
0,31 x 60 (determinazione dei minuti)
Parte decimale di A in M
18,6 - 0,6 = 18 (numero dei minuti)
Trasferimento della frazione decimale di minuti nel registro A
0,6 x 60 (determinazione dei secondi)
Parte decimale di A in M
36,0 - 0,0 = 36 (numero dei secondi)
Si osserva che con le istruzioni / , -, si ottiene in A il dato senza la sua parte decimale; con la
sequenza / , , si ottiene in A il dato senza la sua parte intera. E cos possibile operare indipendentemente sia sulla sola parte intera sia sulla sola parte decimale.
Le funzioni di servizio
Istruzione di stampa
Come in ogni calcolatore elettronico, anche nell'Olivetti Programma 101 la stampa dei risultati
deve essere appositamente comandata.
A ci provvede l'istruzione di stampa mediante la quale si pu stampare non solo un risultato,
ma anche un dato contenuto in qualsiasi registro.
Essa viene programmata col simbolo preceduto dall'indicazione del registro il cui contenuto
si deve stampare. Il calcolatore stampa i risultati con il numero di decimali richiesto. Il contenuto del registro R viene sempre stampato per intero.
Esempio
Con A si stampa il contenuto di A
Con C/ si stampa il contenuto di c
Il contenuto del registro interessato all'operazione di stampa non viene alterato.
In stampa si ottiene, oltre al dato richiesto, anche l'indicazione dell'istruzione corrispondente.
Esempio
123,45 b
2589,90 A
Ci permette di differenziare e individuare pi facilmente i dati stampati. A questo scopo, per
distinguere l'una dall'altra due stampe del contenuto di A, si possono utilizzare le istruzioni A
e A/ che vengono interpretate dall'unit di governo come due comandi analoghi, pur provocando la stampa di codici diversi.
Supposto che il contenuto di A sia 4284,5 si ottiene:
4284,5 A
4284,5 a
programmando A
programmando A /
Esempio
(a x b)2
--------c
Le istruzioni sono le seguenti:
S
S
x
A x
S
:
A
Impostazione di a
Trasferimento di a in A
Impostazione di b
Moltiplicazione di a x b
(a x b)2
Impostazione di c
Divisione del contenuto di A per c
Stampa del risultato.
Istruzione di azzeramento
Per azzeramento di un registro s'intende la operazione di cancellazione del contenuto del registro stesso.
Questa operazione si programma con il simbolo *, preceduto dall'indicazione del registro che si
vuole azzerare.
I registri M ed R non possono mai essere azzerati utilizzando questa istruzione. L'azzeramento
di M si pu realizzare con una operazione di scambio , qualora il contenuto di A sia nullo.
L'azzeramento di R, invece, si pu ottenere come risultato di una moltiplicazione con un fattore
nullo; il prodotto infatti (evidentemente nullo) si forma sia in A sia in R.
L'istruzione * necessaria quando si vuole utilizzare nella sua capacit intera un registro precedentemente diviso.
Se ad esempio si vuole disporre di B come registro intero, dopo aver utilizzato i registri (pag. 30)
divisi b e B, per evitare l'overflow, occorre azzerare preventivamente b, programmando B/*.
Nel caso opposto, per passare dal registro intero ai registri divisi, si deve programmare l'azzeramento del registro intero se il suo contenuto supera le 11 cifre.
Valgono, per ulteriore chiarimento, gli esempi seguenti:
Istruzione
M
15.000.000.000.000
B/*
B
Istruzione
B*
B/
b
2450
B
3320
0
3320
15.000.000.000.000
M
3500
b
B
24.000.000.000 .000.000
0
3500
0
0
Interlinea
L'istruzione / fa avanzare di una interlinea, senza stampa, la striscia di carta. Viene utilizzata
per ottenere una maggiore spaziatura verticale tra due successive righe di stampa, per distanziare, ad esempio, la stampa del risultato da quella dei dati di calcolo.
Anche in questa istruzione i simboli / e non hanno alcun riferimento con il loro significato
logico normale.
Le funzioni logiche
Principi generali
Le istruzioni di un programma so no esaminate dal calcolatore sequenzialmente.
Spesso per si presenta la necessita di dover accedere a una o pi istruzioni che non seguono
ordinatamente l'ultima eseguita.
In tal caso si ricorre alle istruzioni di salto, che comandano al calcolatore di interrompere l'esame sequenziale delle istruzioni e di saltare a un diverso punto prestabilito dal programma. Le
istruzioni di salto vengono qualificate come funzioni logiche.
Due sono gli elementi che caratterizzano un salto: il punto in cui si interrompe la normale sequenza di istruzioni, detto origine del salto, e il punto di arrivo, a partire dal quale viene ripreso il normale esame delle istruzioni, detto destinazione del salto.
I salti sono di due tipi:
salti incondizionati, che vengono eseguiti, indipendentemente da qualsiasi condizione,
alla sola lettura dell'istruzione corrispondente
salti condizionati, che alla lettura dell'istruzione corrispondente vengono eseguiti solo se
sussistono certe condizioni.
Salti incondizionati
La programmazione di un salto si effettua mediante due istruzioni.
La prima, che si chiama istruzione di origine, indica il punto del programma in cui ha inizio il
salto; la seconda, detta istruzione di destinazione, indica il punto di arrivo del salto a partire
dal quale le successive istruzioni sono di nuovo prese in esame sequenzialmente.
Nel caso di salto incondizionato il calcolatore, quando legge nel programma un'istruzione di origine, salta sempre alla corrispondente istruzione di destinazione, indipendentemente da qualsiasi condizione.
In un programma si possono trovare, per esigenze diverse, pi salti; e indispensabile, di conseguenza, individuare in modo univoco la destinazione corrispondente a ciascun punto di origine.
Data l'origine del primo salto, la sua destinazione deve poter essere riconosciuta in modo tale
che non si confonda con la destinazione del secondo, del terzo, ecc.
Le due istruzioni di un salto devono perci essere collegate tra loro in modo che, fissata l'origine, risulti determinata la destinazione corrispondente.
Quando il calcolatore legge nel programma una istruzione di origine, ricerca automaticamente
l'istruzione di destinazione corrispondente, a partire dalla prima istruzione del programma. Se
per errore sono state program mate due istruzioni di destinazione eguali, il calcolatore si porter sempre sulla prima ignorando la seconda.
Le coppie di istruzioni di salto incondizionato di cui si pu disporre sono 16.
Istruzione di origine
V
W
Y
Z
CV
CW
CY
CZ
DV
DW
DY
DZ
RV
RW
RY
RZ
Istruzione di destinazione
AV
AW
AY
AZ
BV
BW
BY
BZ
EV
EW
EY
EZ
FV
FW
FY
FZ
(pag. 32)
In forma abbreviata le predette coppie di istruzioni possono venire rappresentate come segue:
Origine del salto
C
D
R
A
B
E
F
dove: = V, W, Y, Z
In taluni programmi possibile avere pi punti di origine per un'unica destinazione. L'esempio
che segue indica due sequenze di istruzioni aventi pi punti di origine per uno stesso punto di
destinazione.
L'utilizzazione del loop pu riferirsi all'intero programma o a parte di essa, qualora sia necessaria la ripetizione di una sola sua parte. Le considerazioni 'suesposte hanno un valore meramente esemplificativo e teorico, in quanta nella programmazione di una sequenza di loop occorre
prevedere una possibilit di interruzione del ciclo, senza di che il calcolatore ripeterebbe all'infinito la sequenza. Tale interruzione, che deve essere sempre prevista nel programma, si comanda con l'istruzione S (o con la programmazione di un salto condizionato).
Descrizione
AV
S
S
x
Ax
S
+
A
V
Impostazione di ai
Trasferimento di ai in A
Accumulo di ai sul totale precedente contenuto in B
Memorizzazione dell'accumulo.
(pag. 34)
La sequenza ciclica ed perci opportuno ricorrere alle istruzioni di salto incondizionato al fine di programmarla una sola volta.
Si viene in tal modo a realizzare un loop all'interno del programma poich una sua determinata
sequenza viene pi volte ripetuta prima di passare alle istruzioni successive.
Dopo l'introduzione dell'ultimo data la macchina esegue ancora l'istruzione di salto che chiude
il cielo e si arresta sullo Stop iniziale. Ci avviene perch la meccanica dei salti incondizionati
rigida e non comporta un'operazione di scelta da parte del calcolatore. E perci l'operatore che
deve intervenire per comunicare al calcolatore di non ripetere ulteriormente il ciclo, non essendovi altri dati da elaborare, ordinandogli di eseguire invece le ulteriori istruzioni del programma.
A tal fine indispensabile che le istruzioni successive al loop siano precedute da un'istruzione
di destinazione per fare in modo che l'operatore, impostando l'istruzione di origine corrispondente, comandi al calcolatore di eseguire le istruzioni ad essa successive. Pi chiaramente,
quando la macchina si arresta sullo Stop dopo l'introduzione del centesimo dato, l'operatore
deve abbassare uno dei tasti V, W, Y, Z, a seconda che l'istruzione di destinazione che segue il
cielo sia AV, AW, AY o AZ.
Il programma completo per risolvere il problema in esame e il seguente:
Istruzione
AV
S
C
B*
BV
S
B+
B
CV
AW
B
C:
A
V
Descrizione
Istruzione di destinazione di inizio programma
Impostazione di 100
Memorizzazione di 100
Azzeramento di B, registro in cui si fa l'accumulo
Istruzione di destinazione della sequenza ciclica
Impostazione di ai
Trasferimento di ai in A
Accumulo di ai
Memorizzazione dell'accumulo
Istruzione di salto che chiude la sequenza ciclica
Istruzione di destinazione per la sequenza finale
Richiamo del totale in A
Divisione del totale per 100
Stampa della media
Istruzione di salto che chiude il programma
L'istruzione B*, situata al quarto posto, necessaria in quanto prima d'iniziare il loop il contenuto di B deve essere zero.
Salti condizionati
La struttura delle istruzioni di salto condizionato del tutto simile a quella dei salti incondizionati.
E richiesta infatti, anche in questo caso, una coppia di istruzioni (l'origine e la destinazione)
(pag. 35) per definire un salto, ma la differenza sostanziale sta nel fatto che, incontrata un'istruzione di origine, il calcolatore ricerca la destinazione corrispondente solo a certe condizioni.
Il calcolatore esamina il valore numerico contenuto in quell'istante nel registro A, e in base a
tale valore opera una scelta tra due diverse sequenze di istruzioni:
se A > 0
se A 0
Le due istruzioni che definiscono un salto condizionato sono ovviamente legate tra loro, dato
che a ogni istruzione di origine corrisponde un'unica istruzione di destinazione.
Le coppie di istruzioni di salto condizionato di cui si pu disporre sono 16:
Istruzione di origine
/V
/W
/Y
/Z
C/V
C/W
C/Y
C/Z
D/V
D/W
D/Y
D/Z
R/V
R/W
R/Y
R/Z
Istruzione di destinazione
A/V
A/W
A/Y
A/Z
B/V
B/W
B/Y
B/Z
E/V
E/W
E/Y
E/Z
F/V
F/W
F/Y
F/Z
/
C /
D /
R /
A /
B /
E /
F /
dove: = V, W, Y, Z
Con le istruzioni di salto condizionato, il calcolatore acquista una capacita discriminante automatica, in quanto pu scegliere tra due possibili sequenze del programma a seconda del contenuto del registro A.
Per chiarire meglio quanto asserito, valga ancora l'esempio sopra esposto, a illustrazione delle
applicazioni relative ai salti incondizionati.
Qualora si fosse creato un contatore, aggiornato mediante l'aggiunta di una unita a ogni ciclo,
la ripetizione del ciclo si sarebbe potuta automaticamente arrestare quando il contatore avesse
raggiunto il valore 100.
La sequenza ciclica avrebbe dunque dovuto:
accumulare ai
aggiornare il contatore
sottrarre da 100 il valore del contatore.
In tal modo, programmando alla fine di essa un salto condizionato, si sarebbe potuta interrompere la sua ripetizione quando il contatore avesse raggiunto il valore di 100.
(pag. 36)
Il programma risulterebbe quindi cos modificato:
Istruzione
Descrizione
A V
S
D
S
C
B *
C /*
B/V
S
B +
B
D
C/ +
C /
C
C/C/V
B
C :
A
V
Come appare da questo esempio il calcolatore conta il numero di cicli da eseguire e, raggiuntolo, trascura l'istruzione di salto condizionato, portandosi invece sulle ulteriori istruzioni del programma.
Nel caso esaminato la condizione A>0 stata generalizzata con quella di A>x. Infatti la fine
della sequenza ciclica e stata determinata dal confronto del contatore con 100. Quindi per esaminare la condizione A>x (ove x un dato contenuto in un registro numerico) basta sottrarre x dal contenuto di A prima di programmare l'istruzione di salto condizionato.
Sia x un risultato sul quale si devono svolgere determinate operazioni in base al confronto fra i
due numeri a e b.
Precisamente:
se a > b si deve calcolare x * z
se a < b si deve calcolare x - z
se a = b si deve calcolare x + z
Le istruzioni da programmare saranno:
Istruzione
AW
S
B
S
S
/Y
A
/Z
B
S
+
A
W
A/Z
B
S
A
W
A/Y
B
S
x
A
W
Descrizione
Istruzione di destinazione iniziale
Impostazione di x
Memorizzazione di x in B
Impostazione di a
a nel registro A
Impostazione di b
(a-b)
1a istruzione di salto condizionato che separa i casi (a - b) > 0 e (a - b) 0
Valore assoluto di (a-b)
2a istruzione di salto condizionato che separa i casi (a - b) < 0 e (a - b) = 0
caso (a-b)=0
xA
Impostazione di z
x + z in A
Stampa del risultato
Salta incondizionato di fine programma
Destinazione del 2 salto condizionato
caso (a-b)<0
xA
Impostazione di z
x - z in A
Stampa del risultato
Salto incondizionato di fine programma
Destinazione del 1 salto condizionato
caso (a-b)>0
x A
Impostazione di z
x . z in A
Stampa del risultato
Salto incondizionato di fine programma
Dopo che l'operatore ha abbassato il tasto W, la macchina esegue le istruzioni che trova dopo AW, le quali calcolano la differenza tra i due numeri a e b (analizzando non a <=> b,
ma (a - b) <=> 0).
L'istruzione /Y fa s che il calcolatore esegua il confronto tra zero e quanto si trova in A. Di conseguenza:
se a>b: in A c'e un valore positivo, si ricerca quindi la destinazione corrispondente A/Y
e vengono eseguite le istruzioni che seguono
se a<b: in A c'e un valore negativo, quindi si eseguono le istruzioni successive /Y. Il
calcolatore determina il valore assoluto del contenuto di A e incontrando /Z esegue un
nuovo confronto del contenuto di A con zero. Il valore questa volta e positivo poich si
e preso in considerazione un valore assoluto; il calcolatore ricerca quindi l'istruzione A/Z
se a = b: in A c'e un valore nullo. In questo caso il calcolatore giunge, passo a passo,
alla istruzione /Z, non esegue il salto, essendo a = b, (a - b) = 0, e passa alle istruzioni
che seguono /Z.
Alla fine di ciascuno dei sottoprogrammi alternativi sopra esaminati e necessario, per tenere
separate le varie sequenze, programmare uno Stop o un'istruzione di origine di salto in condizionato per comandare l'arresto o il ritorno all'inizio del programma.
Dati costanti
La registrazione di un programma su scheda magnetica comporta il trasferimento dell'intero
contenuto dei registri 1, 2, F, E, D, sulla medesima; viceversa, la lettura di una scheda trasferisce in memoria, nei registri suddetti, quanto in essa si trova.
E possibile quindi registrare su scheda anche dati numerici, in particolare costanti che intervengano pi volte nel corso di un programma. La registrazione di costanti su scheda magnetica
si pu eseguire in due modi:
A
R+
R
d
La sequenza di istruzioni cos compilata va inserita nel programma, alla posizione prevista,
preceduta ogni volta dall'istruzione A /.
Per chiarire quanto esposto, si voglia calcolare la circonferenza di un cerchio di raggio r = 5,
utilizzando la nota formula 2r e codificando sia il valore di (3,14) sia 2.
Le istruzioni da programmare saranno:
decimali 1
Istruzione
A V
S
A/
R +
R
D/
x
A/
D/
x
A
V
5
5
3,14
15,7
2
2
15,7
31,4
31,4
Descrizione
Riferimento iniziale
Introduzione del raggio r=5
5A
Segnalazione di costante codificata
Istruzioni corrispondenti
alla costante codificata
3,14
5 x 3,14
Segnalazione di costante codificata
Istruzione corrispondente alla costante 2
5 x 3,14 x 2
Stampa del risultato
Salto di fine programma
Per la codifica manuale delle costanti da inserire in programma, senza ricorrere all'utilizzazione
del calcolatore, vedi la tabella posta alla fine del volume.
Tecniche di programmazione
Descrizione
Azzeramento del contenuto di A
Esecuzione della sottrazione tra A e M (dove si trova il precedente valore di A) ottenendo come
risultato l'inversione richiesta
Reciproco di un dato
Supposto che il dato X (0) sia contenuto nel registro A, il suo reciproco 1/x si ottiene nel
modo seguente:
Istruzione
A :
:
Descrizione
1 in A ed x in M
Esecuzione della divisione 1 : x, ottenendo cos il reciproco
CALCOLO DI 1x
Si suppone, anche in questo caso, che il dato x (0) sia contenuto nel registro A e si programma quanto segue:
Istruzione
A :
+ (o -)
Descrizione
1 in A ed x in M
A + M (o A - M)
Generazione di costanti
Nel capitolo precedente sono stati descritti due metodi mediante i quali e possibile inserire in
programma dati numerici costanti.
Alcune volte pero si possono creare automaticamente delle costanti con opportuni accorgimenti, soprattutto quando il valore dei dati numerici non e elevato. Ad esempio:
per ottenere 1, basta avere nel registro A un numero diverso da zero e programmare
l'istruzione A :
per avere 2 in A, si programma l'istruzione A : seguita dall'istruzione A +
per avere 1/2 in A, si programma un operazione di radice seguita dall'istruzione : (diviso).
Queste costanti, cos generate, possono essere successivamente e variamente sommate al fine
di ottenere altre costanti di valore non elevato.
(pag. 41)
R-
Descrizione
Sottrazione del risultato completo (contenuto in R) da quello troncato (contenuto in A). In A si ottiene
zero; in R le cifre decimali scartate nella operazione precedente, con il segno meno; in M il risultato
completo della precedente operazione
Trasferimento in A del contenuto di M
Sottrazione del risultato completo di partenza dal contenuto attuale di R per ottenere l'eventuale
arrotondamento
R
R-
5,1327
5,1327
- 0,0007
5,132
5,1327
-0,000
5,1327
5,133
-0,0007
5,1334
Nel risultato finale si ha l'arrotondamento all'unit superiore, perch la prima cifra scartata 7.
Per arrotondare invece 5,1324 con il medesimo numero di decimali, le istruzioni saranno:
Istruzione
R
R -
5,1324
5,1324
- 0,0004
5,132
5,1324
-0,000
5,1324
5,132
-0,0004
5,1328
In questo caso nel risultato finale si ha l'arrotondamento all'unita inferiore perch la prima cifra
scartata 4.
Nel caso di operazioni aritmetiche concatenate, se si vuole ottenere un maggior grado di precisione, opportuno inserire la routine di arrotondamento dopo ogni operazione, in particolare
dopo la moltiplicazione. (pag. 42)
Ovviamente, dopo la divisione e la radice quadrata, questa sequenza non pu essere applicata
poich in R si forma il resto nel primo caso, un dato non significativo nel secondo.
Larrotondamento dopo la divisione si ottiene perci con la sequenza seguente (supponendo
che il registro B contenga il dividendo e C il divisore):
Istruzione
R
B +
R
C :
Descrizione
Trasferimento in A del resto aritmeticamente corretto della divisione
Somma del resto al dividendo che si suppone contenuto nel registro B
completo della precedente operazione
Trasferimento in risultato completo della somma in A
Divisione del risultato precedente (dividendo + resto) per il divisore, ottenendo il quoziente
arrotondato.
B
C
R
B
R
C
:
+
:
8
8
315
315
8
315
39,37
0,04
315,04
315,04
39,38
315
0,04
315,04
0,00
In tal caso si ha un arrotondamento per eccesso poich la prima cifra scartata nel quoziente
5 (315 : 8 = 39,375)
Volendo ora eseguire la stessa divisione con lindicatore dei decimali posizionato a zero, si ottiene un arrotondamento per difetto del quoziente, perch la prima cifra scartata 3.
Istruzione
B
C
R
B
R
C
:
+
:
8
8
315
315
8
315
39
3
318
318
39
315
3
318
6
Descrizione
Somma del risultato troncato a quello completo contenuto in R
Scambio del contenuto di A con quello di M
Differenza A- M
Risultato della somma con larrotondamento desiderato
(pag. 43)
Esempio
Istruzione
A
12,00
R
12,001
R +
12,001
24,00
24,00
24,00
24,00
12,001
-11,99
12,01
24,001
24,001
-11,999
12,010
Contenuto di d
Arrotondamento
0,2
0,1
0,01
.
a5
a 10
a 100
.
Si osserva che l'arrotondamento opera sulla cifra meno significativa per qualsiasi posizione dell' indicatore dei decimali.
Nella tabella seguente e illustrato un esempio di arrotondamento a 5, con l'indicatore dei decimali a zero.
Istruzione
D/x
R
R D/:
0,2
30,6
30,6
- 0,6
0,2
A
153
30
-0
30,6
31
155
30,6
- 0,6
- 0,6
31,2
0,0
d
0,2
Programmazione di un contatore
Particolari istruzioni permettono al calcolatore di formare automaticamente un contatore, ossia
una quantit il cui valore viene costantemente incrementato di una unit per contare quante
volte un certo ciclo viene ripetuto.
Le istruzioni che permettono di aggiornare il valore di un contatore devono evidentemente essere inserite nella sequenza ciclica. Si deve invece provvedere prima di essa all'azzeramento
del registro in cui il contatore si deve formare.
Supponiamo ad esempio che il registro diviso B/ sia utilizzato per il contatore e che nel registro
A si trovi un dato diverso da zero; l'aggiornamento si ottiene con le seguenti istruzioni:
Istruzione
Descrizione
A :
B/+
B/
(pag. 44)
Descrizione
valore massimo
contatore
B
contatore
A :
contatore
1
1
contatore
contatore - 1
contatore
contatore - 1
329
150
215
Per operare sui singoli dati occorrer ovviamente separarli. Ci possibile dividendo il numero
per 10, 100, 1000 o successive potenze di 10, a seconda del numero di cifre che si desidera
via via isolare. Nellesempio ora esposto, trattandosi di dati di 3 cifre ciascuno, occorrer dividere il numero complessivo per 1000 (103) per quattro volte consecutive. Dopo ogni divisione
(con l'indicatore dei decimali a zero), il numero che si desidera isolare si trover nel registro R
come resto della divisione.
Perch questa tecnica sia conveniente, occorre che tutti i dati numerici che si desidera collocare nel medesimo registro abbiano eguale numero di cifre. In tal caso baster utilizzare sempre
lo stesso divisore per separarli. In caso contrario si dovr rendere eguale il numero di cifre di
ciascun dato aggiungendo degli zeri alla sinistra dei dati con meno cifre, fino a renderli tutti
della stessa lunghezza.
(pag. 45)
N . xy -(x) . (y)
b= ----------------------------N . x2-(x) 2
y - b . x
a = ---------------N
dove:
r
b
a
x, y
N
=
=
=
=
=
coefficiente di correlazione
coefficiente angolare
ordinata all'origine
dati variabili
numero delle coppie di osservazioni.
Le istruzioni da programmare saranno quelle indicate nella tabella della pagina seguente; la
procedura operativa sar:
1.
2.
3.
4.
5.
6.
abbassare il tasto V
impostare la variabile x1 (sul 1 S)
impostare la variabile y1 (sul 2 S)
ripetere le operazioni 2 e 3 per tutte le coppie di variabili
abbassare il tasto Z
il calcolatore stampa nell'ordine i risultati r, b, a.
I registri F ed E sono usati in modo promiscuo, per la memorizzazione di dati (di capacit massima di 15 cifre) e istruzioni.
Il registro d usato per la memorizzazione di un dato di 3 cifre (N).
Si noti come C debba essere usato come registro intero per conservare la xy che pu superare le 11 cifre.
ADDIZIONE E SOTTRAZIONE
Queste due operazioni non presentano problemi dal punto di vista della capacita, in quanto basta ricordare che gli operandi subiscono un incolonnamento preliminare prima che l'operazione
venga eseguita e che l'eventuale scarto di cifre, predisposto con l'indicatore dei decimali, avviene soltanto dopo che il risultato si formato nel registro A.
E quindi necessario che il numero di cifre intere dell' operando avente un maggior numero di
cifre intere, sommato al numero di cifre decimali dell'operando avente un maggior numero di
cifre decimali, non superi 22.
Esempi
a)
432100118,467
+
325,123456789123456
il primo operando ha 12 cifre di cui 9 intere e 3 decimali, il secondo operando 18 cifre di cui 3
intere e 15 decimali, per cui
9 + 15 = 24
L'operazione non si pu dunque eseguire poich il risultato supererebbe la capacit dell'accumulatore, pur avendo i singoli operandi una lunghezza accettabile.
La segnalazione di supero di capacita si ha indipendentemente dal posizionamento dell'indicatore dei decimali per il motivo prima enunciato.
b)
432100118,467
+
3251234,56789123456
L'operazione invece, in tal caso, effettuabile poich il primo operando ha 9 interi e 3 decimali, il secondo 7 interi e 11 decimali. Si ha infatti:
9 + 11 = 20
rispettando cos la condizione richiesta.
MOLTIPLICAZIONE
Il risultato di una moltiplicazione pu avere al massimo un numero di cifre pari alla somma delle cifre dei due fattori.
E possibile perci determinare se la lunghezza del risultato compatibile con la capacit dell'accumulatore, tenendo presente che la somma del numero di cifre del moltiplicando e del
moltiplicatore non deve superare 22.
Quanto sopra valido indipendentemente dal posizionamento dell'indicatore dei decimali poich, come gi per l'addizione e la sottrazione, anche nel caso di moltiplicazione il risultato viene troncato solo a operazione avvenuta.
Cos l'operazione
345678,7876589459 x
765,7438
non pu essere eseguita dal calcolatore pur posizionando a zero l'indicatore dei decimali. Analogamente a quanto avviene per l'addizione, il prodotto di due fattori pu avere eccezionalmente (pag. 48) 23 cifre. In questa caso pero il risultato non pi operabile.
Qualora invece il numero di decimali richiesto sia superiore alla somma dei decimali dei singoli
operandi, occorre tener presente che la somma del numero di cifre intere del moltiplicando e
del moltiplicatore, nonch dei decimali richiesti, deve essere 22.
Quindi, generalizzando, si pu dire che:
la somma del numero di cifre intere dei fattori e del maggiore tra il numero di decimali richiesti
e la somma dei decimali degli operandi non deve superare 22.
DIVISIONE
Nel caso della divisione il numero dei decimali che si pu richiedere data dalla differenza tra
22 e la somma delle cifre intere del dividendo e dei decimali del divisore.
Questa regola valida con dividendo o divisore sia interi che decimali e qualunque sia la relazione dell'uno rispetto all'altro (dividendo <=> divisore), purch il divisore abbia almeno una
cifra intera significativa.
Esempi
a) dividendo di 10 cifre intere e divisore di 5. In tal caso basta calcolare: 22 - 10 = 12. L'indicatore dei decimali potr dunque essere posizionato al massimo a 12
b) dividendo di 8 interi e 5 decimali, divisore di 10 interi: 22 - 8 = 14
c) dividendo di 6 interi e 3 decimali, divisore di 4 interi e 4 decimali: 22 - (6 + 4) = 12
d) dividendo di 6 interi e 3 decimali, divisore di 8 interi e 2 decimali: 22 - (6 + 2) = 14.
Qualora il divisore non abbia invece cifre intere significative (sia cio 0, . . . . . .), il massimo
numero di decimali che pu essere richiesto per il quoziente e eguale a:
22 - (numero delle cifre intere del dividendo + numero delle cifre decimali del divisore + numero degli zeri che precedono la prima cifra significativa del divisore).
Occorre dunque sottrarre al numero di decimali, determinato can la regola precedentemente
enunciata, tante unita quanti sano gli zeri (compreso quello che precede la virgola) che stanno
a sinistra della prima cifra significativa del divisore.
Esempi
a)
1234,32 : 0,003
22 - ( 4 + 3 + 3 ) = 12
123456,32 : 0.35
22 - ( 6 + 2 + 1 ) = 13
RADICE QUADRATA
Occorre tener presente che il calcolatore modifica la composizione decimale del radicando,
analogamente a quanta avviene per il dividendo nel caso della divisione.
Infatti, prima che sia eseguita l'operazione di radice, il radicando viene modificato in modo che
il numero dei suoi decimali risulti sempre eguale al numero di decimali richiesti per il risultato.
Il numero dei decimali che si pu richiedere dato da:
22 - (numero delle cifre intere del radicando - 1).
Programmi particolari
Programma su pi schede
Per risolvere problemi complessi, che richiedono l'esecuzione di complicate o lunghe sequenze
di calcoli con oltre 120 istruzioni, occorre spezzare il programma in parti, ognuna delle quali,
preposta all'esecuzione di una particolare sequenza, viene registrata in memoria dopo aver ultimato la parte precedente. Ciascuna parte viene registrata su una scheda magnetica. I risultati intermedi che si desidera man tenere nel passaggio tra una scheda e la successiva, possono
essere memorizzati nei registri M, A, R, b, B, c, C, che non so no interessati nella lettura della
scheda magnetica.
Qualora oltre al contenuto dei registri elencati interessi conservare anche il contenuto dei registri d e D, occorre programmare prima del passaggio alla scheda successiva l'istruzione speciale RS.
Istruzione RS
Questa istruzione comanda il trasferimento del contenuto del registro D in R e viceversa; essa
ha caratteristiche speciali e pu essere utilizzata nei seguenti casi:
Programmi registrati su pi schede, per conservare temporaneamente nel registro R dati o risultati parziali contenuti nel registro D (D, d). Tale registro infatti, unitamente ai registri E ed
F, viene automaticamente azzerato non appena ha inizio la lettura di una scheda. Con l'istruzione RS viene scambiato il contenuto dell'intero registro D, anche se diviso in D e d, con quello del registro R, rendendo quindi possibile, nel passaggio da una scheda all'altra, la conservazione di dati e/o risultati parziali nel registro R, oltre che in M, A, B, C.
L'istruzione RS e posta alla fine della prima parte del programma e, per ripristinare la situazione originale, all'inizio della successiva.
Tra la prima e la seconda istruzione RS non si pu eseguire alcuna funzione aritmetica, di
stampa o di trasferimento, che interessi i registri R e D.
Si debba ad esempio calcolare in base a certi dati di partenza il valore di 8 funzioni x1, x2, . . . .
. . ., x8, che devono poi essere moltiplicate rispettivamente per y1, y2, . . . . . . y8, ove le y
rappresentano i risultati di calcoli successivi. Si supponga di aver organizzato il programma su
due schede: la sequenza registrata sulla prima fornisce i valori delle x, mentre con la seconda
scheda si calcolano le y e si eseguono i prodotti finali xi . yi (i = 1, 2, 3,. . . 8).
Si organizzer il calcolo della x in modo che la situazione dei registri alla fine del programma
della prima scheda sia quella qui sotto indicata e si utilizzer quindi l'istruzione RS:
Istruzione
AV
.
.
.
RS
x1
x1
x2
x2
.....
x7 x8
x3
x3
x4
x4
x5
x5
x6
x6
x7
x8
L'introduzione della seconda scheda non altera M, A, R, b, B, c, C, per cui all'inizio del programma corrispondente si avr:
Istruzione
AV
RS
.
.
.
V
x1
x1
x2
x2
x7 x8
.....
x3
x3
x4
x4
x5
x5
x6
x6
x7
x8
(pag. 50)
Programmi che usano il registro D per istruzioni nella parte iniziale e, successivamente, per
contenere dati numerici.
Senza la programmazione di opportune istruzioni che consentono l'uso promiscuo dei registri,
non possibile introdurre dati nei registri che ospitano istruzioni di programma. Mediante le
istruzioni R * ed RS possibile liberare il registro D dalla parte di programma in esso contenuta, consentendo cos, nel corso successivo del programma, una riutilizzazione del registro per
dati numerici.
Le istruzioni R* ed RS vanno situate nel programma in posizione tale da essere eseguite dopo
le istruzioni contenute in D.
Si pu in tal modo ottenere un programma di 120 istruzioni e al tempo stesso fare uso del registro D come registro numerico.
Per ripetere il programma necessaria ogni volta la lettura della scheda magnetica.
Il programma deve essere organizzato in modo che le prime istruzioni che il calcolatore esegue
siano quelle contenute in D.
48 istruzioni) senza alterare il contenuto del registro F ne quello dei due registri di programma.
In fase di lettura esse inviano il loro contenuto sol tanto nei registri D ed E. (pag. 51)
Con tale procedura si possono richiamare, nel corso di un programma principale, pi sottoprogrammi differenti, introducendo semplicemente al momento opportuno le schede corrispondenti.
Per inserire un sottoprogramma consigliabile programmare le istruzioni:
/
S
L'operatore dovr poi introdurre la scheda parziale e premere manualmente il tasto di selezione del sottoprogramma.
Nella stesura del programma principale occorre non utilizzare i salti condizionati o incondizionati previsti per il sottoprogramma.
Se si deve utilizzare ripetutamente un sottoprogramma si pu ricorrere, come si e visto, a un
contatore, oppure, quando sufficiente ripetere poche volte il ciclo, a tecniche particolari.
La pi comune quella di programmare dopo il sottoprogramma un'istruzione di scambio con
un registro precedentemente azzerato e una istruzione di origine di salto condizionato.
Il calcolo manuale
Il calcolatore Olivetti Programma 101 pu essere utilizzato anche manualmente in modo non
dissimile dalle normali calcolatrici.
Tutte le funzioni che possono essere programmate vengono eseguite anche con comando manuale.
Nel calcolo manuale, a differenza di quello programmato, quando l'operatore imposta i dati,
deve impartire al calcolatore anche le relative istruzioni impostandole sulla tastiera
Norme operative
Registrazione dei programmi
Un programma registrato in memoria direttamente da tastiera, abbassando i tasti corrispondenti ai simboli delle istruzioni. L'operazione viene eseguita nel modo seguente:
1. mettere in funzione il calcolatore
2. premere l'annullatore generale
3. premere il pulsante registrazione programma
(pag. 54)
1. premere il pulsante stampa programma
2. abbassare il tasto di selezione programma. La stampa si arresta dopo ogni istruzione di
Stop; per riprenderla abbassare il tasto
3. disinserire il pulsante stampa programma dopo la stampa di tutte le istruzioni.
Se un programma letto da scheda non occorre abbassare il tasto che ne seleziona l'inizio. In
tal caso, dopo l'inserimento di stampa programma, abbassare il tasto inizialmente e
dopo ogni istruzione di Stop.
Alla fine del programma, abbassando il tasto viene stampato soltanto S.
Per registrare dati numerici occorre trasferirli nei registri E e D, con le normali procedure.
Per registrare su scheda parziale il contenuto di E e D, si opera nel seguente modo:
1. premere i pulsanti registrazione programma e stampa programma
2. introdurre la scheda magnetica.
Per leggere infine una scheda parziale si opera come segue:
1. premere il pulsante stampa programma
2. introdurre la scheda magnetica, il cui contenuto trasferito nei registri E e D, senza alterare il contenuto degli altri registri.
Tempi macchina
L'esecuzione di un'istruzione richiede sempre un tempo di lettura e un tempo operativo. Il
tempo di lettura e costante mentre il tempo operativo varia a seconda dell'istruzione.
La tabella seguente riporta i tempi macchina, espressi in millisecondi.
Istruzioni
Tempo operativo
Aritmetiche
Addizione
Sottrazione
Moltiplicazione
Divisione
Radice quadrata
Valore assoluto
Tempo
Tempo
Tempo
Tempo
Tempo
Tempo
allineamento
allineamento
allineamento
allineamento
allineamento
allineamento
Tempo lettura
+
+
+
+
+
8,8
8,8
8,8 (C + N)
8,8 (C + N)
17,6 (C + N/2)
2,2
2,2
2,2
2,2
2,2
2,2
Trasferimenti
Tempo allineamento
2,2
Servizio
Stampa
Interlinea
Azzeramento
500 : 1200
~ 500
Tempo allineamento
2,2
2,2
2,2
2,2
Tempo allineamento
Tempo allineamento
2,2
2,2
2,2
Salti
Scambio D ed R (RS)
Segnale di costante
codificata (A/)
Moltiplicazione
C = somma delle cifre del fattore contenuto in A
N = numero delle cifre del fattore contenuto in A
Divisione
C = somma delle cifre del quoziente
N = numero delle cifre del quoziente
Radice quadrata
C = somma delle cifre della radice
N = numero delle cifre della radice
Il tempo di allineamento, che deve essere considerato per le operazioni aritmetiche come un
tempo di incolonnamento legato al posizionamento della virgola, varia tra 24 x 2,2 m/sec e 47
x 2,2 m/sec.
Per ragioni tecniche il tempo di allineamento interviene anche nei trasferimenti di qualsiasi tipo, nellazzeramento e nelle istruzioni RS e A/.
Il tempo di stampa varia tra 500 e 1200 m/sec (per la stampa da 0 a 23 caratteri).
Il tempo varia quindi in funzione dei caratteri stampati. Considerando N il numero dei caratteri,
si ha circa:
t = 500 + 31 N
analisi numerica
analisi logica
programmazione
Ogni programma dovr per essere successivamente controllato per verificarne l'esattezza e
individuare eventuali errori.
Analisi numerica
In questa fase si determinano i metodi di calcolo numerico pi adatti al problema proposto. E
necessario infatti scegliere metodi che traducano calcoli complessi in una serie di operazioni elementari o di semplici decisioni logiche, le uniche, in sostanza, che ogni calcolatore pu eseguire.
Analisi logica
DIAGRAMMA DI FLUSSO
La fase precedente serve a fissare un certo numero di formule che occorre collegare opportunamente tra di loro per risolvere il problema. L'analisi logica stabilisce i collegamenti tra le varie sequenze di calcolo, prevedendo tutte le eventualit possibili e determinando per ciascuna il
lavoro del calcolatore.
E molto utile, per non dire indispensabile, rappresentare graficamente la loro concatenazione
logica, sia per materializzare il ragionamento di chi ha condotto l'analisi, sia, soprattutto nei
problemi pi complessi, per ricordare tutte le eventualit che possono presentarsi e che devono essere programmate.
Tali rappresentazioni grafiche sono comunemente chiamate diagrammi di flusso o flowcharts e si realizzano mediante simboli prestabiliti, in modo che anche chi non abbia direttamente analizzato il problema li possa interpretare.
E opportuno indicare i simboli pi comunemente usati per la stesura di un diagramma di flusso.
Operazione generica
Ogni operazione per la quale non esistano simboli appositi viene descritta esplicitamente, o in
forma simbolica, all'interno di un rettangolo. In tal caso occorre integrare il diagramma con
opportune indicazioni.
Ad esempio si pu avere:
oppure
QxP =L
Questo simbolo indica un sottoprogramma. Per distinguere i vari sottoprogrammi tra loro se ne
scrive, all'interno del simbolo, il nome.
Alternativa
Questo simbolo indica il punto del programma in cui vengono operate scelte logiche tra differenti alternative.
Per convenzione, se il risultato del confronto interno al simbolo maggiore di zero si prosegue
verticalmente; se minore o eguale si continua a destra. Nel caso di triplice condizione, se il
risultato eguale a zero si prosegue a sinistra.
Entrata o uscita dati
Si utilizza questo simbolo per rappresentare l'uscita dei risultati stampati su striscia.
Connettori
Questi simboli sono utilizzati per collegare punti distanti di un diagramma di flusso senza bisogno di lunghe righe di collegamento.
Qualora una o pi vie terminino con un circolo entro il quale racchiuso un numero o una lettera di riferimento, necessario ricercare il circolo che contenga lo stesso numero o lettera di
riferimento e considerarlo come punto di partenza per il proseguimento del programma.
I segnali di inizio e fine di un programma sono due connettori particolari entro i quali si scrive
rispettivamente Start e Stop.
Si consideri ad esempio di dover effettuare il seguente calcolo:
axb+cxd=W
con le seguenti alternative:
W > 100 si calcola W x 3
W = 100 si calcola W + 10
W < 100 si calcola W + 1000
il diagramma di flusso relativo evidenzia la successione e le connessioni logiche tra le singole
operazioni.
Programmazione
Dopo che un problema stato esaminato in modo analitico fissando sia il metodo di calcolo sia
lo sviluppo logico, occorre scriverlo in un linguaggio comprensibile per il calcolatore, codificando singole operazioni secondo regole prestabilite. Questo lavoro costituisce la stesura
del programma, ovvero la programmazione.
si esegue un'operazione aritmetica il cui risultato supera la capacit dei registri (overflow); in questo caso si perde il contenuto originario dei registri A ed R
si introduce da tastiera un dato eccedente la capacita del registro M
si trasferisce un dato formato da pi di 11 cifre in un registro diviso
si accede alla parte sinistra di un registro diviso, mentre il registro utilizzata prima nella
sua interezza contiene ancora un dato avente pi di 11 cifre
si fa una divisione per zero; anche in questo caso si perde il contenuto originario dei registri A ed R
si esegue una qualsiasi operazione che interessa un registro occupato da istruzioni.
Inoltre si accende la luce rossa quando una scheda magnetica non stata letta in modo corretto o non stata letta affatto perch danneggiata o introdotta irregolarmente.
Si pu individuare facilmente l'istruzione che ha provocato il verificarsi di una situazione anormale facendo stampare il programma registrato a partire dall'istruzione immediatamente successiva a quella che ha causata l'errore. Ci si ottiene abbassando il pulsante stampa programma e quindi il tasto (inizialmente e a ogni eventuale successiva istruzione di Stop).
Nei casi in cui il calcolatore non possa segnalare l'errore (perch il programma, bench errato,
non incompatibile con la sua logica operativa), occorre ricercarne le cause controllando ad
una ad una le singole istruzioni o le varie sequenze.
Questo controllo pu essere eseguito usando manualmente il calcolatore Programma 101.
E opportuno ricordare che quando si incontra in programma una costante codificata nella quale non stata indicata la posizione della virgola, il calcolatore si arresta.
Parte destra
dell'istruzione
(valore numerico)
0 = S
1 =
per la cifra pi
significativa
della costante
SI
D/
NO
SI
E/
NO
2 =
3 =
-
4 = +
5 = -
----------------------------------------------------per tutte
SI
R/
le altre cifre
+
NO
R
= x
= :
SI
F/
=
NO
= *
Codificazione di 1,55
5
R 5
R 1
D /
Codificazione di -144,325
5
F 2
F
3
F
4
F / +
4
F +
1
E
Codificazione di -0,4891
1
F
9
F *
8
F
4
F +
0
E / S
Codificazione di 10
0
R / S
1
D
Codificazione di -10
0
F/S
1
E
Tipo delle
istruzioni
aritmetiche
di introduzione
e trasferimento
dati
di servizio
logiche
Funzioni
Addizione
Sottrazione
Moltiplicazione
Divisione
Radice quadrata
Valore assoluto
Introduzione dato M (1)
Trasferimento da M
Trasferimento in A
Scambio con
A
Trasfer. parte decimale
Stampa (2)
Azzeramento
Interlinea
Salti incondizionati (3)
speciali
Codici
X +
X X x
X :
X
A
S
X
X
X
/
X
X *
/
A
CB
DE
RF
/A/
C/B/
D/E/
R/F/
A/t
RS
X
x
x
x
x
x
x
m
x
a
0
s'interrompe sempre la sequenza all'istruzione di origine e si
riprende a quella di destinazione
lndice analitico
A
Arrotondamento a valori prestabiliti
Arrotondamento all'unit pi vicina
Arrotondamento per eccesso
43
41
42
C
Calcolo manuale
Capacit dei registri operativi
Contatore (programmazione di un)
Costanti (codificazioni di)
Costanti (generazione di)
Costanti nei registri di deposito
52
17
43
38
40
38
D
Decimali (operazioni con)
Decimali (trasferimento dei)
Discriminazione fra tre condizioni
47
28
36
17
20
21
12
12
P
Posizionamento dei dati nei registri
Programma
Programma (lettura ed esecuzione dei)
Programma (messa a punto di un)
Programma (registrazione dei)
Programmazione
Programmazione (tecniche di)
23
10
54
59
53
14
40
R
E
Esecuzione ripetuta di un programma
32
F
Funzioni
Funzioni
Funzioni
Funzioni
aritmetiche
di servizio
di trasferimento
logiche
16
29
24
31
G
Generazione di costanti
40
Radice quadrata
19
Reciproco di un dato
40
Registrazione dei programmi
53
Registrazione di pi dati in un unico
registro
44
Registri di deposito
17
Registri divisi
13,18
Registri operativi (capacit dei)
17
Registri operativi (operazioni con dati
contenuti nei)
20
Registro
13
Interlinea
30
Interruzione automatica di una sequenza
ciclica
44
Introduzione dei dati
23
Inversione di segno di un dato
40
Istruzione di azzeramento
29
Istruzione di stampa
29
Salti condizionati
Salti incondizionati
Salti incondizionati (applicazioni
relative ai)
Scambio con A
Scheda magnetica
Schede parziali
Sequenze di operazioni aritmetiche
Sottoprogrammi (utilizzazione dei)
34
31
33
26
14
51
21
50
T
M
Tecniche di programmazione
Memoria
10, 12 Tempi macchina
Messa a punto e controllo di un programTrasferimento da M
ma
59
Trasferimento della parte decimale
Trasferimento in A
40
55
24
28
25
N
Norme operative
53
O
Operazioni aritmetiche elementari
16
U
Unit aritmetico-logica
11, 14
Unit di governo
11, 14
Uso promiscuo dei registri F, E, D, per
45
dati e istruzioni
V
Valore assoluto (determinazione del)
20