...

Il Linguaggio del Il Linguaggio del Computer

by user

on
Category: Documents
23

views

Report

Comments

Transcript

Il Linguaggio del Il Linguaggio del Computer
ITCG CATTANEO CON LICEO DALL'AGLIO - via M. di Canossa, 3 - Castelnovo ne’ Monti (RE)
Sezione ITI - Corso di Fisica - prof. Massimo Manvilli
Il Linguaggio del
Computer
I primi calcolatori, come il MARK I e l'ENIAC, realizzati fra
il 1944 ed il 1946, usavano il sistema di numerazione
decimale. Fu il fisico matematico ungherese Johann von
Neumann a suggerire, nel 1946, l'uso del sistema
binario. Da allora, questo sistema di numerazione si è
legato ai calcolatori in maniera indissolubile, tanto che
oggi esso è impiegato da qualsiasi macchina per
calcolare, dalla più semplice calcolatrice tascabile fino al
più potente supercalcolatore.
Le ragioni sono due:
1- il sistema binario impiega due soli simboli (0 ed 1), mentre, come è noto, il sistema decimale
ne usa dieci. Ciò rende assai più agevole rappresentare i numeri nel calcolatore. Ogni numero
(ed ogni lettera o simbolo grafico) può quindi essere rappresentato da una sequenza di O ed 1,
un po' come accade con il codice "Morse" che utilizza il punto e la linea, corrispondenti ad un
impulso breve o lungo.
Nei calcolatori troviamo una serie di minuscoli circuiti, in ciascuno dei quali può passare o non
passare corrente : al primo di questi stati del circuito si fa corrispondere la cifra 1, al secondo, la
cifra 0. Se, invece del sistema binario, si usasse quello decimale, occorrerebbe distinguere fra
dieci valori diversi dell'intensità della corrente per rappresentare le cifre da 0 a 9, il che, come è
facile capire, sarebbe tecnicamente assai più complicato.(in realtà è più corretto parlare di
"onde di tensione a dente di sega" che noi continueremo però ad indicare genericamente
come "impulsi elettrici" )
Nel computer il sistema binario viene realizzato facendo corrispondere alla cifra 1 un impulso di
tensione positivo (3-5 v) ed allo 0 un valore pressoché nullo . Le tre sequenze in figura
corrispondono ai numeri 255,11,38.
2 - I calcoli, nel sistema binario, sono più semplici che nel sistema decimale. Per esempio, in
questo sistema di numerazione, qualsiasi moltiplicazione si riduce al calcolo dei quattro prodotti
fondamentali :
0x0=0;0x1=0;1x0=0;1x1=1
Nel sistema decimale, invece, come sapete, le moltiplicazioni "elementari" sono tutte quelle
della cosiddetta "tavola pitagorica".
Bit, byte, ecc.
In un calcolatore quindi tutti i dati (numeri, caratteri alfabetici, istruzioni) sono rappresentati con
un codice binario.
bit = è una parola inglese, che letteralmente significa "pezzettino"; nel linguaggio dei
calcolatori, essa viene usata come contrazione di
"binary digit " (="cifra binaria").
Corrisponde quindi ad una informazione (o cifra) binaria elementare (O oppure 1)
Le sequenze di bit, usate nei calcolatori, prendono il nome di "byte" e di "parole".
byte = è un gruppo di 8 bit. Esistono 256 (= 28) possibili combinazioni di bit per
scrivere 1 byte "
"parole" = insieme di bytes ; hanno una lunghezza variabile da calcolatore a
calcolatore. Nei ''calcolatori personali" più piccoli esse possono essere lunghe
un solo byte (cioè 8 bit); nei calcolatori più potenti nanno una lunghezza
maggiore ; per esempio:2 byte (16 bit), 4 byte (32 bit) o 8 byte (64 bit).
Utilizzando quindi parole più lunghe si possono rappresentare molti più numeri, ad
esempio:
o
con 1 byte(8 bit) esistono 28 = 256 conbinazioni di bit possibili
o
con 2 byte(16 bit) esistono 216 = 65.536 conbinazioni di bit possibili
o
con 4 byte(32 bit) esistono 232 = 4.294.967.296 conbinazioni di bit possibili..
o
ecc.
Come l'elaboratore scrive i numeri
I numeri vengono normalmente rappresentati con "parole".
Esistono due tipi di rappresentazione diverse per i numeri interi e per i numeri decimali (questi
ultimi chiamati spesso "numeri a virgola mobile" perché schematizzati con la tecnica "
floating-point", dall'inglese "to float"="fluttuare") . Questo è però un argomento che verrà
adeguatamente approfondito nel corso del triennio.
Per semplicità, ci limiteremo qui a fare qualche esempio di codifica dei numeri interi, supponendo
inoltre che le parole del calcolatore siano di 8 bit.
Agli 8 bit della parola si attribuisce il seguente significato:
ordine
1°
2°
3°
4°
5°
6°
7°
8°
parola ad 8 bit
+/- 2^6
2^5 2^4 2^3 2^2
2^1 2^0
binari
-128
64
32
16
8
4
2
1
decimali
Il valore del primo bit permette di distinguere i numeri interi positivi da quelli negativi; infatti, se esso
è 0, il numero è positivo; se è 1, il numero è negativo. Per questa ragione, il primo bit viene spesso
chiamato "bit del segno". Qualche esempio ci aiuterà a comprendere meglio come vengano
codificati i numeri positivi e negativi:
A - Vogliamo rappresentare il numero positivo +22.
Nel sistema binario, come è facile verificare, tale numero si scrive 10110 ; esso pertanto verrà
codificato negli ultimi cinque bit della parola, come segue:
0
0
0
1
0
1
1
0
Ovvero (da destra) :
0x2^0 + 1x2^1 + 1x2^2 + 0x2^3 +1x2^4 + 0x2^5 + 0x2^6 = 0+2+4+0+16+0+0 =22
con il bit dell'ottavo ordine = 0 ad indicare che si tratta di un numero positivo.
B- Vogliamo rappresentare il numero negativo -123.
Esso può essere espresso come la somma algebrica del numero negativo -128 e del numero
positivo +5 (infatti: -128 + 5 = -123).
Il primo di questi numeri (-128) verrà codificato ponendo 1 nel primo bit della parola (in quanto
questo bit rappresenta le unità negative dell'ottavo ordine, cioè proprio -128).
Il secondo numero (+5), che in binario si scrive 101, verrà codificato negli ultimi tre bit.
In definitiva il numero considerato si rappresenterà come :
1
0
0
0
0
1
0
1
Ovvero :
1x2^0 + 0x2^1 + 1x2^2 + 0x2^3 +1x2^4 + 0x2^5 + 0x2^6 - 2^7= 1+0+4+0+0+0+0 - 128 = 123
La grandezza dei numeri rappresentabili in un calcolatore è limitata. Con parole di 8 bit, si
possono, per esempio, codificare solo numeri interi compresi tra:
-128
1
0
0
0
0
0
0
0
1
1
1
1
1
+127
0
1
1
Tali limiti, naturalmente, si allargano se si usano parole più lunghe : per esempio, con parole di
32 bit si possono codificare numeri di valore fino a circa 4 miliardi. Per i numeri più grandi si
possono usare più parole oppure si ricorre alla rappresentazione "a virgola mobile" (nella quale,
di un numero si rappresentano solo le cifre più significative e la loro posizione rispetto alla
virgola). Con essa, utilizzando parole di 32 bit, si arrivano a codificare numeri fino a circa 1038 .
Se poi, nel corso dei calcoli, si ottenesse, come risultato di un'operazione, un numero ancora più
grande di questo limite, il calcolatore, non potendo rappresentarlo, segnalerebbe all'utente un
errore di "overflow" ( in inglese, "straripamento ").
Come l'elaboratore scrive i
dati simbolici
I dati simbolici (o alfanumerici) sono tutti quei caratteri, come ad esempio lettere
dell'alfabeto, segni di interpunzione o anche cifre numeriche , che non vengono utilizzate
dal calcolatore per effettuare operazioni matematiche. Un carattere viene, in generale,
rappresentato con un byte.
Ricordando quanto si è detto in precedenza, possiamo dunque ritenere che il "byte"
serva per rappresentare un simbolo alfanumerico mentre la "parola" venga usata per la
rappresentazione dei numeri utilizzati per il calcolo vero e proprio .
Il codice, oggi impiegato quasi universalmente per rappresentare i caratteri ed i simboli
normalmente presenti sulla tastiera di un PC (anche "estesa"), è il codice ASCII (una
sigla che sta per "American Standard Code for Information Interchange" = "Codice
americano standard per lo scambio di informazioni"). Esso definisce 128 caratteri diversi
fra i quali: le lettere dell'alfabeto sia maiuscole che minuscole, le cifre numeriche , i segni
di interpunzione ecc.) associandoli ai numeri binari da 0 a +127 (il n° 128 è
adeguato ad esprimere tutti i caratteri ed i simboli delle usuali tastiere).
Vediamo, per esempio, la rappresentazione di alcuni di questi caratteri (la Tabella
completa del codice ASCII esteso, usato nei personal computers, è riportata in allegato).
simbolo
codice binario
numero decimale
A
01000001
65
a
01100001
97
B
01000010
68
;
00111010
59
1
00110001
49
Ciò significa che, ad esempio, se stiamo scrivendo e digitiamo la lettera "A" diamo il via
ad 8 impulsi di tensione (di cui il primo ed il settimo al valore massimo e gli altri prossimi
allo zero) che partono contemporaneamente ed il computer interpreta disegnando una A
sullo schermo e memorizzandola nella sua memoria di lavoro (RAM)
La memoria , il linguaggio
macchina , il Sistema Operativo
e la velocità di elaborazione
L'unità centrale del computer non è altro che un complesso circuito, costituito da componenti
elettronici e connessioni elettriche. Pertanto, la trasmissione e la elaborazione delle informazioni
al suo interno possono avvenire solamente sotto forma di segnali elettrici.
Il computer , in definitiva , può essere considerato come una "macchina elettrica" che utilizza un
alfabeto costituito da due soli simboli (pensiamo sempre all'esempio del codice Morse),
combinando i quali si possono comporre frasi o eseguire calcoli, esattamente come noi
facciamo con il nostro alfabeto e la nostra numerazione decimale; il nostro cervello però,
essendo molto più evoluto di un computer, è in grado di gestire contemporaneamente molti più
simboli oltre a segnali visivi , tattili ecc. .
D'altra parte il linguaggio binario risulterebbe per noi estremamente "scomodo" ; basti pensare
che una semplicissima parola come "buongiorno " dovrebbe essere scritta con 80 caratteri,
anche se sitratta di una serie di 0 ed 1 ; ciò comporterebbe una lentezza insostenibile oltre alla
necessità di libri o quaderni di dimensioni spaventose (pensate al povero Dante impegnato
nell'impresa di scrivere "La Divina Commedia" o Tolkien alle prese con la trilogia del "Signore
degli Anelli" in linguaggio binario!!!! )
Lo stesso discorso vale per la numerazione decimale che per l'uomo
risulta di utilizzo molto più agile, anche se dobbiamo ricordarci le
tabelline a memoria.
Per il calcolatore elettronico il fatto di dover gestire un codice così
"elefantiaco" non è un problema perché la velocità con cui riesce a
"muovere" gli impulsi elettrici al suo interno è eccezionale.
La velocità di elaborazione del microprocessore (il "cuore" della
macchina che esegue operazioni e distribuisce gli impulsi elettrici agli
altri componenti ) viene normalmente chiamata "velocita di Clock" ,
espressa in MHz (MegaHertz) , oggi anche in GHz (Gigahertz), e si
riferisce alla frequenza con cui gli impulsi elettrici (ovvero i bit) vengono
emessi dall'"orologio temporizzatore" interno, cioè teoricamente la
velocità massima con cui possono essere gestiti.
Chip contenente Milioni di
transistors
Ad esempio :


clock = 800 MHz significa che il microprocessore è in grado di
gestire al massimo 800 milioni (!) di "impulsi" al secondo
clock = 1,5 GHz significa che il microprocessore è in grado di
gestire al massimo 1,5 miliardi (!!!!!) di "impulsi" al secondo
La velocità effettiva dei computers in realtà è influenzata anche da altri importanti
parametri (velocità del "bus" interno ovvero del canale di collegamento dei vari
componenti col microprocessore, presenza ed entità di una memoria" cache" di 2°
e/o 3° livello, quantità di memoria RAM presente ecc.), pur se di solito, a livello
commerciale, viene sbandierata la sola velocità del microprocessore.
Come risulta evidente è necessario utilizzare dispositivi di memoria, per la registrazione
permanente dei dati, estremamente capienti, in grado di immagazzinare enormi
sequenze di bit .
Di solito si tratta di dispositivi di tipo magnetico, ottico o magneto-ottico (dischetti, dischi
rigidi , CD ecc.) .
I dispositivi magnetici si basano sull'orientamento di microscopiche "schegge" di
ossido di ferro magnetizzato (cioè microscopiche calamite)ordinate sulla superficie , cui
si fanno corrispondere le due cifre binarie fondamentali; il funzionamento dei CD invece è
di tipo ottico, quindi del tutto diverso, ed utilizza un piccolo laser.
Ogni cella elementare di memoria potrà allora contenere, dal punto di vista logico,
solamente uno zero o un uno, cioè una cifra binaria.
Per esprimere quantitativamente la capacità della memoria centrale, ma anche delle
memorie ausiliarie, si usano i multipli del bit e soprattutto del byte. l più comuni sono:
o
o
o
o
1kilobyte = 1 kb = 1024 bytes
1Megabyte= 1 Mb = 1024 Kb = 1.048.576 bytes
1Gigabyte = 1 Gb = 1024 Mb = 1.073.741.824 bytes
1Terabyte = 1 Tb = 1024 Gb = 1.099.511.627.780 bytes
Occorre fare attenzione al fatto che il prefisso "kilo" è qui impropriamente usato con il
significato di "x1024", anziché di "x1000" in quanto la numerazione binaria è basata sulle
potenze di due ed il numero 1024 è pari a 210. Analogo discorso vale per gli altri prefissi.
Nella memoria centrale, dati, comandi e istruzioni si trovano tutti sotto forma binaria
(linguaggio binario). Ogni singola parola può allora essere un dato, un comando oppure
una istruzione ; con una simile impostazione, un osservatore esterno non può più
distinguere tra essi, poiché appunto dati, comandi e istruzioni risultano trasformati in
parole binarie.
Questa impostazione del computer è detta di Von Neumann, dal nome del matematico
americano di origine ungherese (vissuto nella prima metà del nostro secolo) che per
primo la teorizzò.
Tutto il software, come per esempio i programmi di scrittura, di grafica, di calcolo ed
anche i giochi deve essere scritto in linguaggio binario.
Le convenzioni con cui si abbinano significati alle cifre binarie si chiamano codici, e sono
evidentemente arbitrarie.
In ogni caso, anche se il linguaggio binario è intrinseco al computer (tant'è vero che
prende il nome di "linguaggio macchina"), esso appare, come abbiamo già detto,
scomodo e poco"umano" ; risulta assai noioso predisporre lunghe sequenze di istruzioni
tutte composte da zeri e da uno, senza contare che un simile esercizio induce facilmente
all'errore.
Per ovviare a questi inconvenienti, le Case costruttrici hanno dotato i loro computers di
alcuni elementari strumenti, allo scopo appunto di semplificare il lavoro degli utenti, e, in
qualche misura, di isolare gli utenti stessi dall'hardware.
Il vantaggio ottenuto è duplice: da un lato, infatti, I'operatore può non conoscere i
particolari fisici della macchina, e dall'altro non può nuocere alla macchina commettendo
errori nella delicata programmazione in linguaggio macchina delle periferiche.
I programmi destinati a questo scopo costituiscono il cosiddetto "Sistema Operativo".
Ogni macchina destinata ad un utente (esclusi solamente i programmatori delle Case
costruttrici) è dotata di un Sistema Operativo. I programmi che formano il Sistema
Operativo sono in grado di svolgere tutte le funzioni elementari relative all'unità centrale
ed alle periferiche previste per un certo computer.
Una loro caratteristica è quella di poter essere facilmente aggiornati con nuove versioni.
Le modalità di uso dei Sistemi Operativi variano poi da Sistema a Sistema: normalmente
all'accensione della macchina il Sistema Operativo si avvia e si pone automaticamente in
uno stato, detto "livello di comando" o CLI (dall'inglese Command Level Interface), in cui
è disponibile a ricevere i comandi che vengono immessi direttamente dalla tastiera o,
tramite il mouse, utilizzando i menù a tendina e le interfacce grafiche ormai diffuse a
livello di massa.
I linguaggi di alto livello per la
programmazione
Il computer non conosce la soluzione di
nessun problema, né di fisica, né di altra
natura, fino a quando non sia stato
opportunamente programmato per tale scopo
specifico.
Programmare il computer significa, in primo
luogo, individuare il metodo di soluzione (o
algoritmo ), quindi specificarlo formalmente
secondo una tecnica prefissata, ed infine
tradurlo nel linguaggio della macchina.
Dunque, il programma è solamente una
traduzione della soluzione in un particolare
linguaggio. La soluzione del problema e la sua
formalizzazione (scrittura secondo regole
formali) spettano evidentemente all'uomo.
Dovremo cioè conoscere già una via per
risolvere ogni specifico problema, magari con
carta e penna, e tradurre poi la nostra
soluzione affinché il computer possa eseguire
le operazioni necessarie a raggiungere il
risultato prefissato. Uno dei metodi più
immediati per scrivere algoritmi consiste
nell'utilizzare i cosiddetti diagrammi a blocchi
(flow-chart) che ne forniscono una efficace
rappresentazione grafica facilmente
interpretabile.
Qui a lato è riportato il diagramma dell'algoritmo di
soluzione di una semplice equazione di 2° grado In
conclusione, I'uso dell'elaboratore non ci avvicinerà alla
soluzione dei problemi, ma ci fornirà un utile strumento
per potenziare le nostre capacità di calcolo e di
utilizzazione dei dati derivati dalle nostre esperienze.
Per le motivazioni ora esposte, e per quanto si è detto riguardo al linguaggio macchina, è
rapidamente entrato nella mentalità comune il concetto di codifica, la quale consiste
nell'uso di un codice mnemonico al posto del codice binario. Un linguaggio di questo tipo,
detto "linguaggio assemblatore", rimane comunque orientato alla macchina pur
risultando maggiormente comprensibile agli operatori umani. E tuttavia realizzabile un
approccio diverso.
Un linguaggio "più umano", sia pure adattato e semplificato per l'uso da parte del
computer, prenderà il nome linguaggio orientato al problema, altrimenti detto linguaggio
di alto livello.
Un linguaggio di alto livello verrà progettato in modo specifico per essere chiaro
all'operatore, cioè per permettergli di scrivere materialmente le istruzioni che si intende
impartire al computer utilizzando sigle, abbreviazioni o contrazioni di parole di uso
comune, molto più facili da usare e ricordare.
Sarà invece demandato ad altri programmi (e cioè ancora alla macchina) il compito di
tradurre le istruzioni di tale linguaggio in linguaggio macchina, esonerando I'utente dalla
conoscenza di quest'ultimo.
I traduttori di linguaggi chiamati interpreti o compilatori , a seconda delle modalità
d'uso vengono forniti sotto forma di programmi registrati come files (documenti) su
appositi dischi.
Ciò rende possibile l'uso, sulla stessa macchina, di diversi linguaggi di programmazione, i
cui interpreti o compilatori vanno acquistati presso i rivenditori autorizzati.
I linguaggi di alto livello più famosi sono :
BASIC
"Beginners All purpose Symbolic Instruction Code" ; sviluppato a metà degli anni '60 , semplice sia a
livello di apprendimento che di uso, adatto a risolvere problemi scientifici e commerciali
Fa parte di una nuova generazione di linguaggi che consentono di programmare non solo scrivendo
VISUAL
righe di istruzioni in codice, ma in modo più intuitivo, posizionando e disegnando elementi grafici col
BASIC
mouse; rispetto ai linguaggi tradizionali quelli "visuali" permettono di ottenere risultati esteticamente
migliori in tempi più brevi
C
creato nei primi anni '70, ha la particolarità di poter controllare il calcolatore anche nelle componenti
più interne ; attualmente molto utilizzato per lo sviluppo di software tecnici e scientifici
Estensione del linguaggio C sviluppata negli anni '80. E' un linguaggio" orientato agli oggetti" (object
C++
oriented) che rende possibile un tipo di programmazione concettualmente differente dai precedenti.
Attualmente è molto utilizzato nell'automazione industriale.
COBOL
FORTRAN
"Common Business Oriented Language" ; è uno dei primi linguaggi di programmazione , risale agli
anni '50 ed è adatto a trattare problemi di tipo commerciale.
"FORmula TRANslation" ; indicato nella trattazione di problemi scientifici ed ingegneristici.
deve il proprio nome al matematico Blaise Pascal(1623-1662) ; fu sviluppato da Wirth e dalla sua
PASCAL
equipe presso l'università di Zurigo. Grazie alla sua flessibilità e semplicità trova applicazione nella
scuola per scopi didattici
DELPHI
PROLOG
HTML
JAVA
Sviluppato negli anni '90 può essere considerato l'evoluzione del PASCAL nell'ambito dei "linguaggi
visuali"
"PROgramming in LOGic" ; utilizza una programmazione logica largamente impiegata nell'ambitto
dello studio della cosiddetta "intelligenza artificiale" ; molto complesso.
"HyperText Markup Language" ; pur non essendo un vero e proprio linguaggio di programmazione è
molto utilizzato per formattare i documenti da immettere in rete.
derivato dal C++ , ma concepito appositamente per applicazioni nell'ambito di internet.
A livello didattico (scolastico, ma anche universitario) si
introduce spesso, per un primo approccio alla
programmazione, il TURBO PASCAL le cui ultime versioni
risultano integrate, ossia comprendono tutto il necessario per
sviluppare i programmi (cioè scriverli, eseguirli, correggerli),
permettono una agevole correzione degli errori, che vengono
localizzati direttamente sul testo del programma , sono veloci
sia nella compilazione, cioè nella traduzione in linguaggio
macchina, che nella esecuzione dei programmi e sono dotate
di capacità grafiche, più o meno avanzate (a seconda
dell'elaboratore di cui si dispone), ma sempre relativamente
semplici da usare .
In seguito si passa al C++ in quanto tale passaggio risulta
piuttosto semplice dal punto di vista logico , nonostante la
complessità di tale linguaggio.
I.T.C.G. Carlo Cattaneo - SEZIONE ITI - CORSO DI FISICA - prof. Massimo Manvilli
Fly UP