Ho letto in questo tutorial di programmazione dell'assemblaggio che 8 bit sono utilizzati per i dati mentre 1 bit è per la parità, che viene quindi utilizzato per rilevare errori di parità (causati da guasti hardware o disturbi elettrici).
È vero?
Ho letto in questo tutorial di programmazione dell'assemblaggio che 8 bit sono utilizzati per i dati mentre 1 bit è per la parità, che viene quindi utilizzato per rilevare errori di parità (causati da guasti hardware o disturbi elettrici).
È vero?
Risposte:
Un byte di dati è di otto bit, potrebbero esserci più bit per byte di dati che vengono utilizzati nel sistema operativo o persino a livello hardware per il controllo degli errori (bit di parità o anche uno schema di rilevamento degli errori più avanzato), ma i dati sono otto bit e qualsiasi bit di parità è generalmente invisibile al software. Un byte è stato standardizzato per indicare "otto bit di dati". Il testo non è sbagliato nel dire che potrebbero esserci più bit dedicati alla memorizzazione di un byte di dati rispetto agli otto bit di dati, ma quelli non sono in genere considerati parte del byte in sé, il testo stesso indica questo fatto.
Puoi vederlo nella seguente sezione del tutorial:
Doubleword: a 4-byte (32 bit) data item
4 * 8 = 32, potrebbe effettivamente richiedere 36 bit sul sistema, ma per i tuoi scopi e scopi è solo 32 bit.
char
in C (che è il collegamento) è esattamente la più piccola unità di memoria indirizzabile. Si chiama semplicemente char , ma lo standard C lo rende anche byte .
Tradizionalmente, un byte può avere qualsiasi dimensione ed è solo la più piccola unità di memoria indirizzabile. In questi giorni, i byte a 8 bit sono stati praticamente standardizzati per il software. Come ha detto JustAnotherSoul, l'hardware potrebbe memorizzare più bit degli 8 bit di dati.
Se stai lavorando su dispositivi logici programmabili, come FPGA, potresti vedere che la loro memoria interna è spesso indirizzabile come blocchi a 9 bit e come autore HDL, potresti usare quel 9 ° bit per il controllo degli errori o solo per archiviare quantità maggiori di dati per "byte". Quando si acquistano chip di memoria per hardware personalizzato, in genere è possibile scegliere tra unità indirizzabili a 8 o 9 bit (o 16/18, 32/36, ecc.), E quindi dipende da te se si dispone di "byte" a 9 bit e quali lo fai con quel nono bit se scegli di averlo.
Quel testo ha una formulazione estremamente scadente. Sta quasi certamente parlando della RAM ECC (codice di correzione degli errori) .
La RAM ECC memorizza comunemente informazioni a 8 bit utilizzando 9 bit. Il bit per byte extra viene utilizzato per memorizzare i codici di correzione degli errori.
(In entrambi i casi, ogni byte è distribuito su ogni chip. Immagine gentilmente concessa da Puget Systems )
Tutto ciò è completamente invisibile agli utenti dell'hardware. In entrambi i casi, il software che utilizza questa RAM rileva 8 bit per byte.
A parte questo: i codici di correzione degli errori nella RAM in genere non sono in realtà 1 bit per byte; sono invece 8 bit per 8 byte. Questo ha lo stesso spazio in testa, ma presenta alcuni vantaggi aggiuntivi. Vedi SECDED per maggiori informazioni.
In generale, la risposta breve è che un byte è 8 bit. Ciò semplifica eccessivamente la questione (a volte anche fino al punto di inesattezza), ma è la definizione a cui la maggior parte delle persone (incluso un gran numero di programmatori) ha familiarità, e la definizione che quasi tutti usano per impostazione predefinita (indipendentemente da quanti byte di dimensioni diverse essi ' ho dovuto lavorare con).
Più specificamente, un byte è la più piccola unità di memoria indirizzabile per l'architettura data ed è generalmente abbastanza grande da contenere un singolo carattere di testo. Sulla maggior parte delle architetture moderne, un byte è definito come 8 bit; ISO / IEC 80000-13 specifica anche che un byte è 8 bit, così come il consenso popolare (il che significa che se stai parlando, diciamo, di byte a 9 bit, incontrerai molti problemi a meno che tu non esplicitamente indica che non intendi byte normali).
Tuttavia, ci sono eccezioni a questa regola. Per esempio:
sizeof(char)
, pur affermando indirettamente che a char
deve essere un minimo di 8 bit, ogni byte deve avere un indirizzo univoco e non devono esserci spazi tra byte contigui in memoria. Questo per rendere le lingue più portatili di quanto sarebbero se richiedessero esplicitamente byte a 8 bit. [Il numero di bit in un byte è specificato come CHAR_BIT
, nell'intestazione "limiti" della libreria C ( limits.h
in C, climits
in C ++).]
Quindi, nella maggior parte dei casi, un byte sarà generalmente di 8 bit. In caso contrario, è probabilmente 9 bit e può o meno essere parte di una parola di 36 bit.
Si noti che il termine byte non è ben definito senza contesto. Per quanto riguarda le architetture informatiche, si può presumere che un byte sia a 8 bit, almeno per le architetture moderne. Ciò è stato in gran parte standardizzato dai linguaggi di programmazione come C, che richiedeva che i byte avessero almeno 8 bit ma non forniva alcuna garanzia per byte più grandi, rendendo 8 bit per byte l'unica ipotesi sicura.
Esistono computer con unità indirizzabili di dimensioni superiori a 8 bit (in genere 16 o 32), ma tali unità vengono generalmente chiamate parole macchina, non byte. Ad esempio, un DSP con parole RAM da 32 KB a 32 bit verrebbe pubblicizzato con 128 KB o RAM, non 32 KB.
Le cose non sono così ben definite quando si tratta di standard di comunicazione. ASCII è ancora ampiamente utilizzato e ha byte a 7 bit (che si adattano perfettamente ai byte a 8 bit sui computer). I ricetrasmettitori UART sono ancora prodotti per avere una dimensione dei byte configurabile (di solito, puoi scegliere almeno tra 6, 7 e 8 bit per byte, ma 5 e 9 non sono inauditi).
Un byte viene generalmente definito come la più piccola unità di spazio di memoria indirizzabile individualmente. Può essere di qualsiasi dimensione. Ci sono state architetture con dimensioni di byte comprese tra 6 e 9 bit, forse anche più grandi. Ci sono anche architetture in cui l'unica unità indirizzabile è la dimensione del bus, su tali architetture possiamo o dire che semplicemente non hanno byte o che il byte ha le stesse dimensioni della parola (in un caso particolare che conosco sarebbe essere a 32 bit); in entrambi i casi, non è sicuramente a 8 bit. Allo stesso modo, ci sono architetture bit-indirizzabili, su quelle architetture, potremmo di nuovo sostenere che i byte semplicemente non esistono, o potremmo sostenere che i byte sono 1 bit; in entrambi i casi è una definizione ragionevole, ma 8 bit è decisamente sbagliato.
Su molte architetture di uso generale mainstream, un byte contiene 8 bit. Tuttavia, ciò non è garantito. Quanto più ti allontani dalle CPU mainstream e / o generiche, tanto più si incontrano byte non a 8 bit. Questo va così lontano che alcuni software altamente portatili rendono persino configurabili le dimensioni. Ad esempio, le versioni precedenti di GCC contenevano una macro chiamata BITS_PER_BYTE
(o qualcosa del genere), che configurava la dimensione di un byte per una particolare architettura. Credo che alcune versioni precedenti di NetBSD possano essere eseguite su architetture non a 8 bit per byte.
Se vuoi davvero sottolineare che stai parlando di una quantità esatta di 8 bit piuttosto che della più piccola quantità di memoria indirizzabile, per quanto grande possa essere, puoi usare il termine ottetto , che è ad esempio usato in molti nuovi RfC.
CHAR_BIT
(trovata in limits.h
), di cui non sono a conoscenzaBITS_PER_BYTE
Quando ho iniziato a programmare nel 1960, avevamo parole a 48 bit con byte a 6 bit - allora non si chiamavano quel nome, ma erano chiamati caratteri. Quindi ho lavorato sul computer Golem con parole a 75 bit e byte a 15 bit. Successivamente, i byte a 6 bit erano la norma, fino a quando IBM non è uscito con il 360, e oggigiorno un byte è comunemente equivalente a un ottetto, cioè 8 bit di dati. Alcuni componenti hardware avevano bit aggiuntivi per il rilevamento degli errori e forse per la correzione degli errori, ma questi non erano accessibili dal software.
Un byte è 8 bit.
In un lontano passato c'erano diverse definizioni di una parola di memoria e di un byte. Il suggerimento che questa ambiguità sia diffusa o prevalente nella vita di oggi è falso.
Fin dalla fine degli anni '70, un byte è stato di 8 bit. La popolazione di massa di computer e PC domestici ha tutti usato in modo inequivocabile un byte come valore di 8 bit nella loro documentazione, così come tutte le schede tecniche e la documentazione per unità disco floppy, unità disco rigido e PROM / EPROM / EEPROM / Flash EPROM Chip di memoria / SRAM / SDRAM che ho letto in quel periodo di tempo. (E ne ho letti personalmente molti in tutto quel periodo di tempo.) Ethernet e un paio di altri protocolli di comunicazione mi spiccano come insoliti nel parlare di ottetti.
L'ambiguità del termine byte è di per sé una cosa rara e oscura. Pochissimi tra i programmatori, i progettisti, i progettisti, i venditori, i tecnici dell'assistenza o gli utenti medi degli ultimi 30 anni penserebbero che significasse qualcosa di diverso da un valore a 8 bit, se riconoscessero la parola .
Quando un byte viene gestito dall'hardware, ad esempio se archiviato in chip di memoria o comunicato lungo il filo, l'hardware può aggiungere dati ridondanti al byte. Ciò può in seguito aiutare a rilevare errori hardware in modo che i dati inaffidabili possano essere riconosciuti e scartati (ad es. Parità, checksum, CRC). Oppure può consentire la correzione di errori nei dati e il recupero dei dati (ad es. ECC). In entrambi i casi, i dati ridondanti verranno eliminati quando il byte è stato recuperato o ricevuto per un'ulteriore elaborazione. Il byte rimane il valore centrale a 8 bit e i dati ridondanti rimangono dati ridondanti.
Innanzitutto, il tutorial a cui fai riferimento sembra essere piuttosto obsoleto e sembra essere diretto a versioni obsolete di processori x86, senza dichiararlo, quindi molte delle cose che leggi lì non saranno comprese da altri (ad esempio se affermi che una WORD è di 2 byte, le persone o non sapranno di cosa stai parlando, o sapranno che ti è stato insegnato sulla base di processori x86 molto obsoleti e sapranno cosa aspettarti).
Un byte è il numero di bit che qualcuno decide che dovrebbe essere. Potrebbe essere 8 bit, o 9 bit o 16 bit, qualsiasi cosa. Nel 2016, nella maggior parte dei casi, un byte sarà di otto bit. Per sicurezza puoi usare il termine ottetto: un ottetto è sempre, sempre, otto bit.
La vera confusione qui sta confondendo due domande: 1. Qual è il numero di bit in un byte? 2. Se volessi trasferire un byte da un posto all'altro, o se volessi memorizzare un byte, usando mezzi fisici pratici, come lo farei? La seconda domanda di solito ti interessa poco, a meno che tu non lavori in un'azienda che produce modem, dischi rigidi o unità SSD. In pratica sei interessato alla prima domanda, e per la seconda dici semplicemente "beh, qualcuno si prende cura di quello".
Il bit di parità menzionato è un meccanismo primitivo che aiuta a rilevare che quando un byte viene archiviato in memoria e, successivamente, il byte viene letto, la memoria è cambiata per caso. Non è molto buono, perché non troverà che due bit sono stati cambiati, quindi è probabile che una modifica non venga rilevata, e non può recuperare dal problema perché non c'è modo di scoprire quale degli 8 bit è cambiato o anche se il bit di parità è cambiato.
I bit di parità non sono praticamente utilizzati in quella forma primitiva. I dati archiviati in modo permanente sono generalmente protetti in modi più complicati, ad esempio aggiungendo un checksum a 32 bit o più lungo a un blocco di 1024 byte, che occupa molto meno spazio extra (0,4% in questo esempio anziché 12,5%) ed è molto meno probabilità di non scoprire quando qualcosa non va.
WORD
, il che ... in qualche modo dimostra il tuo punto, dal momento che molti nomi di tipo WinAPI sono obsoleti ma conservati per compatibilità con le versioni precedenti. xP
Nell'uso moderno, un byte è 8 bit, punto (sebbene abbia storicamente avuto altre definizioni). D'altra parte, una parola di dati è qualunque cosa l'hardware in questione gestisca come un'unità atomica - potrebbe essere 8 bit, 9 bit, 10 bit, 12 bit, 16 bit, 20 bit, 24 bit, 32 bit, ecc. Vari computer i sistemi nel corso degli anni hanno avuto ogni sorta di dimensioni delle parole diverse.
Per implementare un sistema di memoria o un protocollo di trasmissione, è utile aggiungere il rilevamento / correzione degli errori che comporta bit aggiuntivi. Non creano un byte a 9 bit perché, come detto sopra, un byte è 8 bit.
Vari schemi aggiungono il rilevamento e / o la correzione degli errori in vari modi.
L'uso tipico della parità è di aggiungere un bit in più alla parola di trasmissione in modo che il ricevitore possa rilevare un singolo bit di errore.
Uno schema in grado di fornire la correzione dell'errore a bit singolo prevede l'aggiunta di 4 bit ECC per parola di dati a 32 bit. Questo sembra essere aritmeticamente equivalente a 1 bit per byte, ma non può / non funziona in questo modo. Una parola dati a 36 bit può contenere informazioni sufficienti per recuperare da un errore a singolo bit per uno spazio dati a 32 bit.
8 bit. All'interno della CPU e della tastiera, è a 9 e 11 bit. I dati dell'utente sono rappresentati in 8 bit però. I tasti sulla tastiera inviano canti che sono divisi in 11 bit. 1 bit iniziale, 1 bit finale, 1 bit di parità e 8 bit che rappresentano un tasto premuto.