Qual è la differenza tra una parola e un byte?


93

Ho fatto delle ricerche. Un byte è di 8 bit e una parola è l'unità più piccola che può essere indirizzata sulla memoria. La lunghezza esatta di una parola varia. Quello che non capisco è qual è il punto di avere un byte? Perché non dire 8 bit?

Ho posto questa domanda a un prof e lui ha detto che la maggior parte delle macchine in questi giorni sono indirizzabili a byte, ma cosa sarebbe una parola?


12
È meglio evitare il termine "parola" a causa della sua ambiguità. Oppure
rendilo

2
È vantaggioso avere una parola più grande o più piccola?

2
@ quest4knoledge una parola più grande consente puntatori più grandi (ovvero più RAM) e consente di elaborare rapidamente numeri più grandi. Può anche consentire che alcune operazioni come memset siano più veloci, lavorando in blocchi più grandi. Tuttavia, i processori con una parola più grande richiedono più transistor nel processore e possono consumare un po 'più di energia.
VoidStar

@VoidStar e una parola più grande significherebbero uno spazio di indirizzamento più piccolo o sono confuso?

1
Per rispondere alla domanda "qual è il punto di avere un byte" - è storia. Le CPU non erano inizialmente in grado di gestire qualcosa di più grande di un "byte" (i processori precedenti gestivano solo nybbles (4 bit) ma il termine non prese mai piede). La prima CPU di qualsiasi nota è stata l'Intel 8086/8088. È stato progettato per gestire le istruzioni costruite attorno ai "byte", anche per questo ci riferiamo ancora alla memoria in termini di xByte, ad esempio GigaByte perché l'unità di base della memoria indirizzabile era il byte. 'K è un riferimento a KiloByte di cui i primi PC avevano 16, espandibili a 64 - woo hoo!
Fred

Risposte:


169

Byte : oggi un byte è quasi sempre a 8 bit. Tuttavia, non è sempre stato così e non esiste uno "standard" o qualcosa che lo imponga. Poiché 8 bit è un numero conveniente con cui lavorare, è diventato lo standard de facto.

Word : la dimensione naturale con cui un processore gestisce i dati (la dimensione del registro). Le dimensioni delle parole più comuni incontrate oggi sono 8, 16, 32 e 64 bit, ma sono possibili altre dimensioni. Ad esempio, c'erano alcune macchine a 36 bit o anche macchine a 12 bit .

Il byte è la più piccola unità indirizzabile per una CPU. Se vuoi impostare / cancellare singoli bit, devi prima recuperare il byte corrispondente dalla memoria, fare confusione con i bit e quindi riscrivere il byte in memoria.

La parola, al contrario, è la più grande porzione di bit con cui un processore può eseguire l'elaborazione (come addizione e sottrazione) alla volta. Questa definizione è un po 'confusa, poiché alcuni processori potrebbero avere parole di dimensioni diverse per attività diverse (ad esempio elaborazione di numeri interi o in virgola mobile). La dimensione della parola è ciò con cui lavora la maggior parte delle operazioni.

Ci sono anche alcuni processori che hanno una dimensione del puntatore diversa : per esempio, l'8086 è un processore a 16 bit, il che significa che i suoi registri sono larghi 16 bit. Ma i suoi puntatori (indirizzi) sono larghi 20 bit e sono stati calcolati combinando due registri a 16 bit in un certo modo.


9
Ottima risposta. Mi limito a cavillare con " [la] parola al contrario è il più grande pezzo di bit con cui un processore può eseguire l'elaborazione ... alla volta ". In realtà è il pezzo di bit più comune, ecc. Molte architetture che si sono evolute nel tempo hanno una dimensione delle parole che non è la più ampia, ma spesso sono limitate in ciò che possono fare con i loro valori più ampi.
Ross Patterson

11
Per un credito extra, un "bocconcino" è un termine comune per mezzo byte. È sorto durante la prima era della CPU dei microcomputer ( ad esempio , l'Intel 8080), ed è sempre stato inteso come 4 bit, perché a quel punto il byte si era stabilizzato a 8 bit.
Ross Patterson

6
Oggi un byte a 8 bit è uno standard; vedere IEC 80000-13: 2008.
user2431763

1
@DebanjanDhar: Sì, non sono collegati. L'unica relazione è che una pagina è (AFAIK) sempre un multiplo della dimensione della parola.
DarkDust

4
x86 (come al solito) rende le cose complicate: nella terminologia Intel, a wordè di 16 bit, anche sulle moderne CPU x86 dove la dimensione predefinita dell'operando è di 32 bit (dword) e la larghezza del registro intero è di 64 bit (qword). E i registri xmm sono larghi 128 bit ( movdqaspostamento doppio quadruplo). Il bus di memoria è largo almeno 64 bit (e trasferisce in burst di 64 byte = una linea di cache) e i percorsi da unità di esecuzione a cache sono larghi almeno 128 bit, o 256 o addirittura 512 bit. Qualunque sia la dimensione nativa della parola macchina del moderno x86, non è a 16 bit, ma il moderno x86 usa ancora la terminologia 8086.
Peter Cordes

16

Quello che non capisco è qual è il punto di avere un byte? Perché non dire 8 bit?

A parte il punto tecnico che un byte non è necessariamente 8 bit, i motivi per avere un termine è la semplice natura umana:

  • economia dello sforzo (nota anche come pigrizia) - è più facile dire "byte" piuttosto che "otto bit"

  • tribalismo - a gruppi di persone piace usare il gergo / un linguaggio privato per distinguerli dagli altri.

Fatti trasportare dal flusso. Non cambierai più di 50 anni di terminologia IT accumulata e bagaglio culturale lamentandoti.


FWIW - il termine corretto da usare quando intendi "8 bit indipendenti dall'architettura hardware" è "ottetto".


pensavo che l'ottetto fosse solo la traduzione francese del byte, grazie;)
Abdelouahab Pp

8

BYTE

Sto cercando di rispondere a questa domanda dal punto di vista del C ++.

Lo standard C ++ definisce "byte" come "unità di dati indirizzabile sufficientemente grande da contenere qualsiasi membro del set di caratteri di base dell'ambiente di esecuzione".

Ciò significa che il byte è costituito da almeno un numero sufficiente di bit adiacenti per accogliere il set di caratteri di base per l'implementazione. Ovvero, il numero di valori possibili deve essere uguale o superiore al numero di caratteri distinti. Negli Stati Uniti, i set di caratteri di base sono solitamente i set ASCII ed EBCDIC, ciascuno dei quali può essere ospitato da 8 bit. Quindi è garantito che un byte avrà almeno 8 bit.

In altre parole, un byte è la quantità di memoria richiesta per memorizzare un singolo carattere.

Se vuoi verificare il 'numero di bit' nella tua implementazione C ++, controlla il file 'limits.h'. Dovrebbe avere una voce come di seguito.

#define CHAR_BIT      8         /* number of bits in a char */

PAROLA

Una parola è definita come un numero specifico di bit che possono essere elaborati insieme (cioè in un tentativo) dalla macchina / sistema. In alternativa, possiamo dire che Word definisce la quantità di dati che possono essere trasferiti tra CPU e RAM in una singola operazione.

I registri hardware in un computer sono di dimensioni di parola. La dimensione della parola definisce anche l'indirizzo di memoria più grande possibile (ogni indirizzo di memoria punta a una memoria di dimensioni di byte).

Nota - Nei programmi C ++, gli indirizzi di memoria puntano a un byte di memoria e non a una parola.


6

Perché non dire 8 bit?

Perché non tutte le macchine hanno byte a 8 bit. Dato che hai taggato questo elemento C, cerca CHAR_BITin limits.h.


6

Una parola è la dimensione dei registri nel processore. Ciò significa che le istruzioni del processore come, add, mul, ecc. Sono su input a dimensione di parola.

Ma la maggior parte delle architetture moderne ha una memoria indirizzabile in blocchi di 8 bit, quindi è conveniente usare la parola "byte".


Quindi in un certo senso il termine "byte" è usato solo per comodità?

Sì, "byte" era particolarmente conveniente quando il termine è stato inventato. Come molte convenzioni, una volta stabilite, persistono. Non sono sicuro se la terminologia basata su byte renda davvero più facile la comprensione dei computer nel quadro generale, ma è la convenzione dominante e non è come cambiare in tempi brevi.
VoidStar

Byte è il termine usato per un'unità usata come carattere nel testo. Storicamente c'erano byte con dimensioni da 6 a 9 bit.
starblue

@starblue com'è possibile che un carattere occupi meno spazio di una parola?

1
@ quest4knoledge: perché la memoria è immagazzinata in pezzi più piccoli che le parole. Una parola è 32 bit (o 64 bit sulle macchine più recenti). In un algoritmo che elabora i singoli caratteri 1 per 1, occupano un'intera parola solo quando sono all'interno della CPU e, quando vengono reinseriti nella RAM, sono più fitti.
VoidStar

5

In questo contesto, una parola è l'unità che una macchina usa quando lavora con la memoria. Ad esempio, su una macchina a 32 bit, la parola è lunga 32 bit e su una macchina a 64 bit è lunga 64 bit. La dimensione della parola determina lo spazio degli indirizzi.

Nella programmazione (C / C ++), la parola è tipicamente rappresentata dal int_ptrtipo, che ha la stessa lunghezza di un puntatore, astraendo in questo modo questi dettagli.

Alcune API potrebbero tuttavia confonderti, come l'API Win32, perché ha tipi come WORD(16 bit) e DWORD(32 bit). Il motivo è che l'API inizialmente mirava a macchine a 16 bit, poi è stata trasferita su macchine a 32 bit, quindi su macchine a 64 bit. Per memorizzare un puntatore, puoi usare INT_PTR. Più dettagli qui e qui .


5

Sembra che tutte le risposte presuppongano linguaggi di alto livello e principalmente C / C ++.

Ma la domanda è etichettata "assembly" e in tutti gli assemblatori che conosco (per CPU a 8 bit, 16 bit, 32 bit e 64 bit), le definizioni sono molto più chiare:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")

3
No, queste dimensioni sono valide solo su una macchina a 16 bit. Probabilmente sei abituato alla programmazione Windows che utilizza ancora queste macro poiché è un'eredità dei suoi giorni a 16 bit e MS non si è preoccupata di correggerla.
DarkDust

2
A proposito, poiché la dimensione di una parola (e in realtà anche un byte) può variare, ISO-C ha i tipi int<X>_te uint<X>_t(più altri) che dovrebbero essere usati se si desidera una variabile / parametro di una dimensione di bit specifica.
DarkDust

@DarkDust stiamo parlando del linguaggio assembly qui. Gli standard C non sono rilevanti. A proposito, sto programmando l'assembly dal 1980 e gli stessi nomi erano in uso. (beh, forse tranne qword)
john ha trovato il

Tuttavia, ho trovato un'eccezione: in GNU come, .wordpotrebbero essere 32 bit (ad esempio per Sparc ).
DarkDust

Siamo spiacenti, AS non è un assemblatore. È un brutto, storpio, miserabile, mutante, creato con l'unico obiettivo di essere un back-end per i compilatori HLL.
john ha trovato il

3

La lunghezza esatta di una parola varia. Quello che non capisco è qual è il punto di avere un byte? Perché non dire 8 bit?

Anche se la lunghezza di una parola varia, su tutte le macchine moderne e anche su tutte le architetture più vecchie che conosco, la dimensione della parola è ancora un multiplo della dimensione del byte. Quindi non vi è alcun aspetto negativo particolare nell'usare "byte" su "8 bit" in relazione alla dimensione della parola variabile.

Oltre a ciò, ecco alcuni motivi per utilizzare byte (o ottetto 1 ) su "8 bit":

  1. Le unità più grandi sono solo convenienti per evitare numeri molto grandi o molto piccoli: potresti anche chiedere "perché dire 3 nanosecondi quando potresti dire 0,000000003 secondi" o "perché dire 1 chilogrammo quando potresti dire 1000 grammi", ecc.
  2. Al di là della comodità, l'unità di un byte è in qualche modo fondamentale come 1 bit poiché molte operazioni normalmente non funzionano a livello di byte, ma a livello di byte: indirizzare la memoria, allocare memoria dinamica, leggere da un file o socket, ecc.
  3. Anche se dovessi adottare "8 bit" come tipo di unità, quindi potresti dire "due 8 bit" invece di "due byte", sarebbe spesso molto confuso far sì che la tua nuova unità inizi con un numero. Ad esempio, se qualcuno dicesse "cento 8 bit" potrebbe essere facilmente interpretato come 108 bit, anziché 100 bit.

1 Anche se considererò un byte come 8 bit per questa risposta, questo non è universalmente vero: sulle macchine più vecchie un byte può avere una dimensione diversa (come 6 bit . Ottetto significa sempre 8 bit, indipendentemente dalla macchina ( quindi questo termine è spesso usato per definire i protocolli di rete) Nell'uso moderno, byte è usato in modo schiacciante come sinonimo di 8 bit.


2

Qualunque sia la terminologia presente nei datasheet e nei compilatori, un "Byte" è di otto bit. Non proviamo a confondere interrogatori e generalità con le eccezioni più oscure, in particolare perché la parola "Byte" deriva dall'espressione "By Eight". Ho lavorato nel settore dei semiconduttori / elettronica per oltre trent'anni e non una volta conosciuto "Byte" si esprimeva qualcosa di più di otto bit.


Insolito sì (lo sappiamo. Un esempio è: The texas instruments c54x Google texas instruments c54x byte. Ti.com/lit/ug/spru393/spru393.pdf "Le istruzioni 'C55x sono lunghezze di byte variabili che vanno da 8 bit a 48 bit ". stackoverflow.com/questions/2098149/...
barlop

1
Non viene affatto da lì. Il termine è stato effettivamente coniato da W. Buchholtz all'IBM alla fine degli anni '50. Fonte: bobbemer.com/BYTE.HTM . Secondo Bob Bemer, l'ortografia "byte" è stata preferita a "morso" per evitare confusione (con "bit") a causa di errori di battitura. Lo saprebbe. Lui era lì!
Stephen C

(Solo 30 anni? Sei un semplice whipper-snapper. Ho imparato a programmare su sistemi in cui la dimensione naturale dei "byte" non era di 8 bit :-))
Stephen C

1

Riferimento: https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

L'unità di base della memoria del computer è il bit. Un bit può contenere uno dei due valori, 0 e 1. Tutta l'altra memoria in un computer si basa su raccolte di bit. Dato un numero sufficiente di bit, è sorprendente quante cose può rappresentare un computer: numeri, lettere, immagini, filmati, suoni, documenti e programmi, solo per citarne alcuni. Un byte è di 8 bit e sulla maggior parte dei computer è il pezzo di archiviazione più piccolo e conveniente. Ad esempio, la maggior parte dei computer non ha un'istruzione per spostarsi un po 'ma ne ha una per spostare un byte. Un termine meno comune è parola, che è l'unità di dati nativa di una data architettura del computer. Una parola è composta da uno o più byte. Ad esempio, un computer che dispone di registri a 64 bit e indirizzamento di memoria a 64 bit ha in genere parole a 64 bit (8 byte). Un computer esegue molte operazioni nella sua dimensione nativa della parola anziché un byte alla volta. Memoria del computer, insieme alla maggior parte del throughput del computer, viene generalmente misurato e manipolato in byte e raccolte di byte. Un kilobyte, o KB, è 1.024 byte per megabyte, o MB, è 1.024 2 byte per gigabyte o GB, è 1.024 3 byte per terabyte o TB, è 1.024 4 byte per petabyte, o PB, è 1.024 5 byte Computer i produttori spesso arrotondano questi numeri e dicono che un megabyte è 1 milione di byte e un gigabyte è 1 miliardo di byte. Le misurazioni di rete sono un'eccezione a questa regola generale; sono dati in bit (perché le reti spostano i dati un po 'alla volta) 024 5 byte I produttori di computer spesso arrotondano questi numeri e dicono che un megabyte è 1 milione di byte e un gigabyte è 1 miliardo di byte. Le misurazioni di rete sono un'eccezione a questa regola generale; sono dati in bit (perché le reti spostano i dati un po 'alla volta) 024 5 byte I produttori di computer spesso arrotondano questi numeri e dicono che un megabyte è 1 milione di byte e un gigabyte è 1 miliardo di byte. Le misurazioni di rete sono un'eccezione a questa regola generale; sono dati in bit (perché le reti spostano i dati un po 'alla volta)


-1

Se una macchina è indirizzabile a byte e una parola è l'unità più piccola che può essere indirizzata in memoria, allora immagino che una parola sarebbe un byte!


Sì. L'unità di memoria indirizzabile minima su TMS320C54xx (uno dei DSP di Texas Instruments) è lunga 16 bit, che è anche la dimensione più piccola dei suoi registri per uso generico. E il compilatore TI C definisce char = short = int = 16 bit su di esso.
Alexey Frunze

No, la maggior parte delle macchine RISC ha parole a 32 bit, ma può indirizzare singoli byte. Su MIPS, ad esempio, significa word sicuramente 32 bit, ma c'è un'istruzione lb(load byte) che carica 8 bit.
Peter Cordes

-1

Un gruppo di 8 bit è chiamato byte (con l'eccezione dove non lo è :) per alcune architetture)

Una parola è un gruppo di bit di dimensioni fisse che vengono gestiti come un'unità dal set di istruzioni e / o dall'hardware del processore. Ciò significa che la dimensione di un registro di uso generale (che generalmente è più di un byte) è una parola

In C, una parola è più spesso chiamata intero =>int


7
Un gruppo di 8 bit è chiamato ottetto.
cnicutar

2
corretto: il termine è octetstato definito per denotare esplicitamente una sequenza di 8 bit a causa dell'ambiguità associata al termine byte . Ma mi piace il suono di bytemeglio :)
Tolitius

2
@tolitius: +1 per "Ma mi piace il suono di bytemeglio": sospetto fortemente che tu non sia solo in questo e sicuro per alcuni sistemi di nicchia, la "confusione" di un byte potrebbe essere una dimensione diversa da 8 bit non è più rilevante in questi giorni.
Joachim Sauer

-1

I termini di BYTE e WORD sono relativi alla dimensione del processore a cui si fa riferimento. I processori più comuni sono / erano a 8 bit, 16 bit, 32 bit o 64 bit. Queste sono le lunghezze WORD del processore. In realtà metà di una PAROLA è un BYTE, qualunque sia la lunghezza numerica. Pronto per questo, metà di un BYTE è un NIBBLE.


No, nelle CPU con parole a 32 bit e byte a 8 bit (ad es. MIPS o ARM), mezza parola corrisponde a 2 byte.
Peter Cordes

-3

Infatti, nell'uso comune, la parola è diventata sinonimo di 16 bit, proprio come byte ha 8 bit. Può creare un po 'di confusione poiché la "dimensione della parola" su una CPU a 32 bit è di 32 bit, ma quando si parla di una parola di dati, si significherebbe 16 bit. I microcontrollori con una dimensione di parola di 32 bit hanno iniziato a chiamare le loro istruzioni "lunghe" (presumibilmente per cercare di evitare la confusione parola / doppia parola).


1
Dipende interamente dal tipo di CPU. Come fai notare, su macchine a 32 bit non IA32, una "parola" è tipicamente di 32 bit.
Ross Patterson

2
@RossPatterson Dipende interamente dal fatto che tu stia sviluppando software o cenando.
Ingegnere

ARM / MIPS / altre architetture RISC tradizionali hanno parole a 32 bit. È la larghezza del registro (nella versione a 32 bit di questi ISA) e la larghezza dell'istruzione. 16 bit è una mezza parola, quindi le istruzioni ARM amanoldrh caricare 16 bit e estenderli a zero in un registro a 32 bit. O ldrshper caricare e firmare-estendere 16 bit.
Peter Cordes
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.