# Parola (informatica)

In informatica, una parola (in inglese word) è l'unità d'informazione naturale caratteristica dell'architettura di un processore. Una parola è un gruppo di bit di una determinata dimensione che sono gestiti come unità dal set di istruzioni o dall'hardware di un processore. La dimensione (o lunghezza) della parola è un'importante caratteristica dell'architettura di un computer.
La sua dimensione influenza diversi aspetti della struttura e del funzionamento di un computer, poiché è la stessa della maggior parte dei registri dei microprocessori. Anche la dimensione dei dati trasferiti dalla CPU alla memoria è generalmente pari a quella di una parola. Infine, gli indirizzi usati per specificare posizioni di memoria sono usualmente singole parole.

## Storia

I microprocessori moderni hanno normalmente parole di 16, 32 o 64 bit. Molte altre dimensioni sono state usate in passato, tra cui 12, 36 e 60 bit; lo slab è un esempio di una delle prime dimensioni di word. Molti dei primi computer erano decimali anziché binari, e avevano di solito word di 10 o 12 cifre decimali, e alcuni computer addirittura non avevano una word di lunghezza definita.
I microprocessori più comuni usati nei computer attuali sono basati sull'architettura IA-32 (ad esempio, i Pentium di Intel e gli Athlon di AMD). Questa architettura è un'estensione della struttura dell'Intel 8086, che aveva una word di 16 bit. L'architettura IA-32 supporta ancora il software scritto per l'8086, perciò il concetto di “word” nel contesto dell'IA-32 non è cambiato. Questo è spesso fonte di confusione, perché la word dell'IA-32 è a 32 bit, ma il termine “word” in questa architettura si riferisce ad una dimensione di 16 bit.

## Descrizione
### Le word in programmazione

Per ragioni legate soprattutto alla portabilità del codice sorgente, nei linguaggi di programmazione il termine word viene usato in genere senza specificarne la dimensione, e viene considerato un tipo di dato. In questo caso indica sempre un gruppo di 16 bit. Viene usato insieme ad altri tipi di dato: nibble (4 bit), byte (8 bit), dword o double word (32 bit), qword o quad word (64 bit).
Quando un programma elabora dei dati di tipo word, deve tenere conto dell'ordine dei byte con cui vengono immagazzinati i dati.

### Usi delle word

In base a come è organizzato un computer, unità della dimensione di una word possono essere usati per:
* Numeri interi – Possono essere disponibili “contenitori” per numeri interi di diverse dimensioni, ma una di queste sarà sempre una word. Altre dimensioni, se ci sono, sono tipicamente multipli o frazioni della dimensione della word. Le dimensioni più piccole sono normalmente utilizzate solo per ottenere una gestione più efficiente della memoria; quando sono caricati nel processore (ad esempio in un registro), i loro valori vengono in genere usati come word.
* Numeri in virgola mobile – I contenitori per i numeri in virgola mobile sono tipicamente una word o un multiplo di essa.
* Indirizzi – Per gli indirizzi di memoria in genere è utilizzata la word. Questo è uno dei motivi principali per i quali la word dei processori è aumentata nel tempo. I processori attuali, a 64 bit, possono indirizzare 8e-9 gigabyte di memoria, una dimensione in genere molto più che sufficiente. Tuttavia alcune applicazioni, tipicamente database, possono richiedere queste dimensioni, e questo ha dato l'impulso alla migrazione del architettura a 64 bit. Sulle architetture precedenti, a 8 o 16 bit, la gestione della memoria era più complessa proprio a causa della dimensione ridotta della word.
* Registri – Generalmente è proprio la dimensione dei registri del microprocessore a designare la dimensione della word. Infatti la dimensione massima dei registri definisce in genere i limiti dei dati utilizzabili (numeri e indirizzi di memoria).
* Collegamento processore-memoria – Quando il processore legge un dato dalla memoria e lo scrive in un registro, o viceversa, la quantità di dati trasferiti è spesso una word. Nei gestori di memoria più semplici, la word è trasferita tramite un data bus, che tipicamente è della dimensione della word o di metà di essa. Nei gestori di memoria che usano una cache, il trasferimento tra il processore e la cache di primo livello è della dimensione della word; tra la cache e la memoria normalmente si usano trasferimenti di dimensioni maggiori (multipli della word).
* Unità di risoluzione degli indirizzi – In genere i valori che rappresentano gli indirizzi di memoria usano come unità il byte. Tuttavia non è in genere possibile accedere ad un byte arbitrario, ma solo a posizioni di memoria della dimensione di una word, che devono avere un indirizzo multiplo di una word. Perciò i dati devo essere allineati a valori multipli della word. Per la lettura di un valore di dimensione inferiore a quello della word (ad esempio, un singolo byte o un singolo bit), è necessario leggere tutta la word di memoria che lo contiene (e scartare i dati in eccesso).
* Istruzioni – Le istruzioni di linguaggio macchina sono normalmente codificate con numeri (detti opcode) della dimensione di una word. Questa è una scelta naturale perché normalmente i dati e le istruzioni condividono la stessa memoria del sistema. Tuttavia, essendo in genere il set di istruzioni abbastanza ridotto, la dimensione degli opcode può essere una frazione della word.

### Famiglie di dimensione

Con l'aumento di complessità nel design dei computer, è diminuita l'importanza della dimensione della word nell'architettura. Questo a causa della maggior capacità dell'hardware di usare una gamma più ampia di dimensioni per i dati, in quanto dimensioni differenti hanno diversa efficacia nei vari contesti. Uno dei problemi però è la necessità di mantenere la retrocompatibilità, pur aumentando le prestazioni e le capacità dei processori. Come conseguenza la dimensione scelta per la word nel progetto originale deve poter coesistere con dimensioni alternative senza intaccare la compatibilità con il codice esistente.
Uno degli esempi più noti è l'architettura x86. Il progetto originale dell'8086 prevedeva chiaramente una word di 16 bit. Il progetto molto più evoluto dell'80386 aggiunse alla base dell'8086 un'organizzazione basata su unità di 32 bit. Se fosse stato un progetto privo di vincoli, avrebbe avuto una word di 32 bit, ma essendo un'estensione dell'8086 la dimensione della word ha continuato ad essere a 16 bit. La stessa situazione si è recentemente riproposta, con l'estensione di questa architettura a 64 bit.
Perciò l'architettura dei computer moderni, più che su di un'unica onnipresente dimensione di word, è basata su una "famiglia" di dimensioni strettamente legate fra loro (essendo potenze di 2 della dimensioni più piccola). Quindi sarebbe arbitrario definire una di queste dimensioni la word dell'architettura, ed è per queste ragioni storiche che il termine word oggi è quasi considerato semplicemente il sinonimo di “16 bit” (così come byte è il sinonimo di “8 bit”).

## Scelta della dimensione della parola

Quando si progetta l'architettura di un computer, la scelta della dimensione della word è di importanza sostanziale. Vi sono considerazioni di progetto che suggeriscono particolari dimensioni dei gruppi di bit per particolari usi (ad esempio, per gli indirizzi), e queste considerazioni portano a differenti dimensioni per i vari usi. Tuttavia, gli aspetti di economicità nella progettazione spingono per un'unica dimensione, o a una serie molto ridotta di dimensioni diverse ma risultanti da multipli o sottomultipli di una dimensione primaria. Questa dimensione preferenziale diventa la dimensione della word nell'architettura.
La dimensione del “carattere” è una di quelle che influenza la scelta della word. Prima della metà degli anni sessanta, i caratteri erano spesso registrati come numeri di 6 bit; questo permetteva di avere non più di 64 caratteri, quindi i letterali erano limitati alle maiuscole. Siccome è efficiente in termini di tempo e di spazio avere la word multipla della dimensione del carattere, le word in quel periodo erano multiple di 6 bit (nelle macchine binarie). Una scelta comune era la word a 36 bit, che era anche una buona dimensione per i numeri a virgola mobile.
Dopo l'introduzione da parte di IBM del System/360, il cui design usavano caratteri a 8 bit e che supportava anche le lettere minuscole, la dimensione standard dei caratteri (o, più precisamente, del byte) divenne di 8 bit. Di conseguenza la dimensione della word divenne naturalmente un multiplo di 8 bit, con word di 16, 32 e 64 bit.

### Architetture a parola variabile

Fra le prime architetture di computer ve ne erano alcune che usavano ciò che spesso è chiamata “word a lunghezza variabile”. In questo tipo di architettura, gli operandi numerici non hanno una dimensione fissa, ma la loro lunghezza è determinata da uno speciale carattere terminatore. Queste macchine usavano per i numeri la codifica BCD (binary-coded decimal); esempi sono l'IBM 702, l'IBM 1401 e l'IBM 1620.

### Word e indirizzamento dei byte

Il modello di memoria di un'architettura è influenzato fortemente dalla dimensione della word. In particolare la risoluzione degli indirizzi di memoria (la più piccola unità di memoria che può essere indirizzata) è generalmente della dimensione di una word. In questo approccio, i valori degli indirizzi che differiscono di uno indicano word adiacenti in memoria. Questo è naturale per le macchine che lavorano quasi esclusivamente con word (o multipli di word), ed ha il vantaggio di permettere alle istruzioni di usare campi di dimensioni minime per contenere gli indirizzi, il che permette una dimensione più piccola delle istruzioni o un maggior numero di istruzioni.
Quando la gestione dei byte è parte significativa del carico di lavoro, è usualmente più vantaggioso usare il byte, anziché la word, come unità della risoluzione della memoria. Questo permette di accedere in maniera semplice ad un carattere arbitrario in una stringa. Una word può essere lo stesso indirizzata, ma l'indirizzo usato richiede alcuni bit in più dell'alternativa con risoluzione a word. In queste architetture la dimensione della word deve essere un valore intero multiplo della dimensione del byte. Questo approccio all'indirizzamento fu usato nell'IBM 360, e da allora è stato l'approccio più comune nel design dei computer.

### La potenza di 2

I valori dei dati possono occupare dimensioni differenti in memoria perché, per esempio, alcuni numeri devono avere una precisione maggiore di altri. Le dimensioni usate comunemente sono scelte come potenze di 2 multiple dell'unità di risoluzione degli indirizzi (byte o word). Questo è comodo perché convertire l'indice di un elemento di un array nell'indirizzo di memoria dell'elemento richiede solo un'operazione di shift anziché una moltiplicazione. In alcuni casi questa relazione permette anche di evitare l'uso delle divisioni. Di conseguenza, molti dei computer moderni hanno dimensione della word (e degli altri operandi) che sono potenze di 2 della dimensione del byte.

## Tabella delle dimensioni delle parole

| Anno | Architettura del computer | Dimensione della word (w) | Dimensioni degli interi | Dimensioni virgola mobile | Dimensioni delle istruzioni | Allineamento della memoria |
| 1941 | Z3 | 22 b | – | w | 8 b | w |
| 1942 | ABC | 50 b | w | – | – | – |
| 1944 | Harvard Mark I | 23 d | w | – | 24 b | – |
| 1946 (1948) | ENIAC | 10 d | w | – | – (2d ) | – |
| 1951 | UNIVAC I | 12 d | w | – | ½w | w |
| 1952 | IAS machine | 40 b | w | – | ½w | w |
| 1952 | IBM 701 | 36 b | ½w, w | – | ½w | ½w |
| 1953 | IBM 702 | n d | 0d, ... 511d | – | 5d | d |
| 1954 | IBM 650 | 10 d | w | w | w | w |
| 1954 | IBM 704 | 36 b | w | w | w | w |
| 1954 | IBM 705 | n d | 0d, ... 255d | – | 5d | d |
| 1959 | IBM 1401 | n d | 1d, ... | – | d, 4d, 5d, 7d, 8d | d |
| 1959 | IBM 1620 | n d | 2d, ... | 4d, ... 102d | 12d | d |
| 1960 | LARC | 12 d | w, 2w | w, 2w | w | w |
| 1960 | PDP-1 | 18 b | w | – | w | w |
| 1961 | IBM 7030 Stretch | 64 b | 1b, ... 64b, 1d, ... 16d | w | ½w, w | b, ½w, w |
| 1962 | IBM 7094 | 36 b | w | w, 2w | w | w |
| 1964 | CDC 6600 | 60 b | w | w | ¼w, ½w | w |
| 1965 | IBM 360 | 32 b | ½w, w, 1d, ... 16d | w, 2w | ½w, w, 1½w | 8 b |
| 1965 | UNIVAC 1108 | 36 b | $^1$/$_6$w, ¼w, $^1$/$_3$w, ½w, w | w, 2w | w | w |
| 1965 | PDP-8 | 12 b | w | – | w | w |
| 1970 | PDP-11 | 16 b | w | 2w, 4w | w, 2w, 3w | 8 b |
| 1971 | Intel 4004 | 4 b | w | – | 2w, 4w | w |
| 1972 | Intel 8008 | 8 b | w | – | w, 2w, 3w | w |
| 1975 | Cray-1 | 64 b | 24 b, w | w | ¼w, ½w | w |
| 1978 (1980) | Intel 8086 (w/Intel 8087) | 16 b | 8 b, w (w, 2w, 4w) | – (2w, 4w, 5w, 17d) | 8, 16, 24, ... 112 b | 8 b |
| 1978 | VAX-11/780 | 32 b | 8 b, ½w, w, 1d, ... 31d, 1b, ... 32b | w, 2w | TBD | 8 b |
| 1979 | Motorola 68000 | 32 b | 8 b, ½w, w | – | ½w, w, ... TBD | 8 b |
| 1982 (1983) | Motorola 68020 (w/Motorola 68881) | 32 b | 8 b, ½w, w | – (w, 2w, 2½w) | ½w, w, ... TBD | 8 b |
| 1985 | MIPS | 32 b | 8 b, ½w, w | w, 2w | w | 8 b |
| 1991 | PowerPC | 32 b | 8 b, ½w, w | w, 2w | w | 8 b |
| 2000 | Itanium (IA-64) | 64 b | 8 b, ¼w, ½w, w | ½w, w | 41 b | 8 b |
| legenda: b: bit, d: cifre digitali, w: dimensione della word dell'architettura, n: dimensione variabile |||||||