Immaginiamo che il sign. Rossi voglia comunicare via Internet al sign. Mouroir. L'Italia e la Francia sono completamente servite da reti telematiche per cui il suo messaggio dovrebbe correre attraverso la minutissima maglia esistente tra le città di Rossi e di Mouroir. Sebbene le due nazioni siano vicine, l'intricatissimo cammino richiederebbe una notevole spesa di tempo, tale per cui Rossi e Mouroir troverebbero Internet del tutto inutile. Il sostanza Internet non funzionerebbe affatto se i messaggi dovessero transitare in mezzo al traffico locale. 

Per cogliere le dimensioni del problema poniamo un esempio con le comunicazioni viarie. Se noi dovessimo girare l'Europa viaggiando per stradine e per vicoletti attraverso paesetti e villaggi, rinunceremmo a muoverci. I collegamenti veloci vengono assicurati dalle autostrade le quali scavalcano la fitta ed intricata rete locale mediante lunghissime tratte. Così pure Internet riesce a funzionare grazie a potenti collegamenti internazionali ed intercontinentali. Questi formano una maglia mondiale in armonia alle caratteristiche di questo tipo di rete illustrata nella risposta 70

Dunque l'imagine di autostrade digitali è corretta anche se un pò colorita. I tecnici preferiscono parlare di dorsali o backbone le quali collegano direttamente i grandi centri telematici. Come le autostrade sono essenziali alla struttura viaria, così pure le dorsali sono essenziali per Internet. 

Tutt'oggi le dorsali attirano un vivo interesse e sono influenzate da un dinamico sviluppo tecnologico. Quasi mensilmente le riviste parlano di esperimenti e proposte di nuovi protocolli, nuovi modelli trasmissivi ecc. Gran parte dell'avvenire dipenderà da loro.

 

 

anno 2004

85. E' corretto parlare di "autostrade digitali"?  

86. Un esempio di machine code. 

I linguaggi simbolici di programmazione più o meno da vicino riflettono il linguaggio naturale. Il Pascal, tanto per citare il più comune nelle scuole, adotta parole mutuate dall'inglese. Il Cobol addiritura prende intere frasi. L'esempio:

perform CALCOLO varying IMPORTO from 20 to 1260 by 10 until FINE-CALCOLO.

Significa:

"esegui CALCOLO variando l'IMPORTO da 20 a 1260 di 10 in 10 finchè arrivi a FINE-CALCOLO"

 

Linguaggio ben più ostico per l'uomo è l'Assembler che non imita i linguaggi naturali. Le sue istruzioni riflettono direttamente i comandi binari eseguiti dalla macchina. I programmatori scrivono sigle che non hanno affatto un aspetto familiare. Ad esempio la somma di due dati decimali si indica con AP, la moltiplicazione con MP. Dal fatto che l'Assembler riflette esattamente le esigenze della macchina, ne viene che ci sono tanti linguaggi Assembler quanti sono i modelli hardware di sistema. Per esempio abbiamo l'Assembler mainframe, e l'Assembler PC.

Infine abbiamo il linguaggio macchina (o machine code) il quaIe è binario, viene eseguito dai circuiti, ed è impossbile da scrivere a mano. Ovviamente il linguaggio macchina è legato al modello di macchina come l'Assembler. 

Esiste dunque un abisso tra il programma nella versione simbolica che è 'umana' ed il programma nella versione 'macchina' letto dai circuiti. Da questo consegue che un programma simbolico viene necessariamente tradotto da un apposito apparato per poter essere eseguito dalla macchina. Il cosidetto compilatore si incarica di questo lavoro. Ad esempio il programma Basic viene tradotto in binario dal compilatore Basic, e da PIPPO.BAS si ottiene PIPPO.EXE. Anche il programma PIPPO.ASM in Assembler viene compilato e si ha PIPPO.EXE.

 

Fatta questa necessaria premessa, rivolgiamo la nostra attenzione all'Assembler, il linguaggio di programmazione del tutto simmetrico al machine code. Ogni sua istruzione corrisponde ad una operazione della macchina. Per vedere come l'Assembler rifletta direttamente il machine code - come lei ha richiesto - supponiamo di sommare il contenuto del registro 12 nel registro 3 (i registri sono campi contenuti nella CPU e quindi i circuiti vi operano molto velocemente). In Assembler mainframe Add Register di Reg12 in Reg3 si scrive così:

AR  Reg3,Reg12

Il compilatore Assembler lo riduce a due byte, in linguaggio macchina si ha:

00011010  00111100

I primi 8 bit a partire da sinistra sono il codice dell'operazione, cioè 0011010 significa Add Register per la macchina. I successivi quattro bit - cioè 0011 - indicano 3 e gli ultimi quattro bit - vedi 1100 - il registro 12.
Questa è dunque una semplice istruzione in machine code così come la vede e la esegue la CPU.  

 

Il binario è assai complicato da scrivere ed i tecnici hanno introdotto la codifica esadecimale che semplifica la scrittura. Invece di annotare 4 bit, essi preferiscono usare un solo simbolo esadecimale.
I 16 simboli che codificano i quattro bit su carta sono i seguenti:

Quindi un tecnico scrive l'istruzione macchina sopra riportata in questo modo:

1A 3C

Questa scrittura compare anche nei tabulati tecnici. Ad esempio la mappatura della memoria centrale appare in questo modo. Ogni coppia di simboli è un byte in memoria.

Questi tabulati vengono esaminati soprattutto dai sistemisti cioè dagli esperti del sistema operativo, del database manager, del TCP/IP ecc. Essi per scoprire i guasti devono talora verificare "de visu" le istruzioni che la macchina ha eseguito, una ad una. Hanno dunque familiarità con il machine code che invece interessa il programmatore generico solo sul piano culturale.

 

anno 2004