Ich habe einige Nachforschungen angestellt. Ein Byte besteht aus 8 Bits und ein Wort ist die kleinste Einheit, die im Speicher adressiert werden kann. Die genaue Länge eines Wortes variiert. Was ich nicht verstehe, ist, wozu ein Byte gut ist? Warum nicht 8 Bit sagen?
Ich habe einem Profi diese Frage gestellt und er sagte, dass die meisten Maschinen heutzutage byteadressierbar sind, aber was würde das für ein Wort bedeuten?
assembly
memory
hardware
terminology
cpu-architecture
Peter Cordes
quelle
quelle
Antworten:
Byte : Heute ist ein Byte fast immer 8 Bit. Dies war jedoch nicht immer der Fall und es gibt keinen "Standard" oder etwas, das dies vorschreibt. Da 8 Bit eine bequeme Zahl für die Arbeit ist, wurde sie zum De-facto-Standard.
Wort : Die natürliche Größe, mit der ein Prozessor Daten verarbeitet (die Registergröße). Die heute am häufigsten vorkommenden Wortgrößen sind 8, 16, 32 und 64 Bit, andere Größen sind jedoch möglich. Zum Beispiel gab es einige 36-Bit-Maschinen oder sogar 12-Bit-Maschinen .
Das Byte ist die kleinste adressierbare Einheit für eine CPU. Wenn Sie einzelne Bits setzen / löschen möchten, müssen Sie zuerst das entsprechende Byte aus dem Speicher abrufen, mit den Bits herumspielen und das Byte dann zurück in den Speicher schreiben.
Das Wort ist dagegen der größte Teil der Bits, mit denen ein Prozessor gleichzeitig eine Verarbeitung (wie Addition und Subtraktion) durchführen kann. Diese Definition ist etwas unscharf, da einige Prozessoren möglicherweise unterschiedliche Wortgrößen für unterschiedliche Aufgaben haben (z. B. Ganzzahl- oder Gleitkomma-Verarbeitung). Die Wortgröße ist das, womit die meisten Operationen arbeiten.
Es gibt auch einige Prozessoren mit einer anderen Zeigergröße : Beispielsweise ist der 8086 ein 16-Bit-Prozessor, was bedeutet, dass seine Register 16 Bit breit sind. Die Zeiger (Adressen) sind jedoch 20 Bit breit und wurden berechnet, indem zwei 16-Bit-Register auf bestimmte Weise kombiniert wurden.
quelle
word
beträgt a 16 Bit, selbst auf modernen x86-CPUs, bei denen die Standardoperandengröße 32 Bit (dword) und die ganzzahlige Registerbreite 64 Bit (qword) beträgt. Und xmm-Register sind 128 Bit breit (movdqa
Doppelquadrat verschieben). Der Speicherbus ist mindestens 64 Bit breit (und überträgt in Bursts von 64 Bytes = eine Cache-Zeile), und die Pfade von Ausführungseinheit zu Cache sind mindestens 128 Bit breit oder 256 oder sogar 512 Bit breit. Was auch immer die native Maschinenwortgröße von modernem x86 ist, es sind keine 16 Bit, aber modernes x86 verwendet immer noch die 8086-Terminologie.Abgesehen von dem technischen Punkt, dass ein Byte nicht unbedingt 8 Bit ist, sind die Gründe für einen Begriff einfache menschliche Natur:
Wirtschaftlichkeit (auch bekannt als Faulheit) - es ist einfacher , "Byte" als "acht Bits" zu sagen.
Tribalismus - Gruppen von Menschen verwenden gerne Jargon / eine private Sprache, um sie von anderen abzuheben.
Nur mit dem Strom schwimmen. Sie werden nicht mehr als 50 Jahre angesammelte IT-Terminologie und kulturelles Gepäck ändern, wenn Sie sich darüber beschweren.
FWIW - der richtige Begriff für "8 Bit unabhängig von der Hardwarearchitektur" ist "Oktett".
quelle
BYTE
Ich versuche diese Frage aus C ++ - Perspektive zu beantworten.
Der C ++ - Standard definiert "Byte" als "Adressierbare Dateneinheit, die groß genug ist, um ein Mitglied des Basiszeichensatzes der Ausführungsumgebung aufzunehmen".
Dies bedeutet, dass das Byte aus mindestens genügend benachbarten Bits besteht, um den Basiszeichensatz für die Implementierung aufzunehmen. Das heißt, die Anzahl der möglichen Werte muss gleich oder größer als die Anzahl der unterschiedlichen Zeichen sein. In den Vereinigten Staaten sind die Grundzeichensätze normalerweise die ASCII- und EBCDIC-Sätze, von denen jeder mit 8 Bits aufgenommen werden kann. Somit ist garantiert, dass ein Byte mindestens 8 Bits hat.
Mit anderen Worten, ein Byte ist die Speichermenge, die zum Speichern eines einzelnen Zeichens erforderlich ist.
Wenn Sie die Anzahl der Bits in Ihrer C ++ - Implementierung überprüfen möchten, überprüfen Sie die Datei 'Limits.h'. Es sollte einen Eintrag wie unten haben.
WORT
Ein Wort ist definiert als eine bestimmte Anzahl von Bits, die von der Maschine / dem System zusammen (dh in einem Versuch) verarbeitet werden können. Alternativ können wir sagen, dass Word die Datenmenge definiert, die in einer einzigen Operation zwischen CPU und RAM übertragen werden kann.
Die Hardwareregister in einer Computermaschine haben eine Wortgröße. Die Wortgröße definiert auch die größtmögliche Speicheradresse (jede Speicheradresse zeigt auf einen Speicher mit Byte-Größe).
Hinweis - In C ++ - Programmen verweisen die Speicheradressen auf ein Byte Speicher und nicht auf ein Wort.
quelle
Weil nicht alle Maschinen 8-Bit-Bytes haben. Da Sie dies markiert haben
C
, schauen SieCHAR_BIT
in nachlimits.h
.quelle
Ein Wort ist die Größe der Register im Prozessor. Dies bedeutet, dass Prozessoranweisungen wie "Add", "Mul" usw. auf wortgroßen Eingaben ausgeführt werden.
Die meisten modernen Architekturen verfügen jedoch über einen Speicher, der in 8-Bit-Blöcken adressierbar ist. Daher ist es zweckmäßig, das Wort "Byte" zu verwenden.
quelle
In diesem Zusammenhang ist ein Wort die Einheit, die eine Maschine beim Arbeiten mit dem Speicher verwendet. Auf einer 32-Bit-Maschine ist das Wort beispielsweise 32 Bit lang und auf einer 64-Bit-Maschine 64 Bit lang. Die Wortgröße bestimmt den Adressraum.
Bei der Programmierung (C / C ++) wird das Wort normalerweise durch den
int_ptr
Typ dargestellt, der dieselbe Länge wie ein Zeiger hat, wodurch diese Details abstrahiert werden.Einige APIs können Sie jedoch verwirren, z. B. die Win32-API, da sie Typen wie
WORD
(16 Bit) undDWORD
(32 Bit) enthält. Der Grund dafür ist, dass die API ursprünglich auf 16-Bit-Computer abzielte, dann auf 32-Bit-Computer und dann auf 64-Bit-Computer portiert wurde. Zum Speichern eines Zeigers können Sie verwendenINT_PTR
. Weitere Details hier und hier .quelle
Es scheint, dass alle Antworten Hochsprachen und hauptsächlich C / C ++ voraussetzen.
Die Frage ist jedoch mit "Assembly" gekennzeichnet, und in allen mir bekannten Assemblern (für 8-Bit-, 16-Bit-, 32-Bit- und 64-Bit-CPUs) sind die Definitionen viel klarer:
quelle
int<X>_t
unduint<X>_t
(plus mehr), die verwendet werden sollten, wenn Sie eine Variable / einen Parameter mit einer bestimmten Bitgröße wünschen..word
können dies 32 Bit sein (zum Beispiel für Sparc ).Obwohl die Länge eines Wortes variiert, ist die Wortgröße auf allen modernen Maschinen und sogar allen älteren Architekturen, mit denen ich vertraut bin, immer noch ein Vielfaches der Bytegröße. Es gibt also keinen besonderen Nachteil bei der Verwendung von "Byte" über "8 Bits" in Bezug auf die variable Wortgröße.
Darüber hinaus gibt es einige Gründe, Byte (oder Oktett 1 ) über "8 Bits" zu verwenden:
1 Obwohl ich für diese Antwort ein Byte als 8 Bit betrachte, trifft dies nicht allgemein zu: Auf älteren Computern kann ein Byte eine andere Größe haben (z. B. 6 Bit . Oktett bedeutet immer 8 Bit, unabhängig von der Maschine ( Daher wird dieser Begriff häufig bei der Definition von Netzwerkprotokollen verwendet. In der modernen Verwendung wird Byte überwiegend als Synonym für 8 Bit verwendet.
quelle
Unabhängig von der Terminologie in Datenblättern und Compilern besteht ein 'Byte' aus acht Bits. Versuchen wir nicht, Nachfrager und Allgemeines mit den dunkeleren Ausnahmen zu verwechseln, zumal das Wort "Byte" aus dem Ausdruck "By Eight" stammt. Ich habe über dreißig Jahre in der Halbleiter- / Elektronikindustrie gearbeitet und nicht einmal bekannt, dass "Byte" mehr als acht Bits ausdrückt.
quelle
Die Grundeinheit des Computerspeichers ist das Bit. Ein Bit kann einen von zwei Werten enthalten, 0 und 1. Alle anderen Speicher in einem Computer basieren auf Sammlungen von Bits. Bei genügend Bits ist es erstaunlich, wie viele Dinge ein Computer darstellen kann: Zahlen, Buchstaben, Bilder, Filme, Töne, Dokumente und Programme, um nur einige zu nennen. Ein Byte besteht aus 8 Bit und ist auf den meisten Computern der kleinste praktische Speicherblock. Zum Beispiel haben die meisten Computer keine Anweisung, ein bisschen zu verschieben, aber eine, um ein Byte zu verschieben. Ein weniger gebräuchlicher Begriff ist das Wort, bei dem es sich um die native Dateneinheit einer bestimmten Computerarchitektur handelt. Ein Wort besteht aus einem oder mehreren Bytes. Beispielsweise verfügt ein Computer mit 64-Bit-Registern und 64-Bit-Speicheradressierung normalerweise über 64-Bit-Wörter (8 Byte). Ein Computer führt viele Operationen in seiner nativen Wortgröße und nicht in einem Byte gleichzeitig aus. Computerspeicher, wird zusammen mit dem größten Teil des Computerdurchsatzes im Allgemeinen in Bytes und Sammlungen von Bytes gemessen und bearbeitet. Ein Kilobyte oder KB ist 1.024 Bytes pro Megabyte oder MB ist 1.024 2 Bytes pro Gigabyte oder GB ist 1.024 3 Bytes pro Terabyte oder TB ist 1.024 4 Bytes pro Petabyte oder PB ist 1.024 5 Bytes Computer Hersteller runden diese Zahlen häufig ab und sagen, dass ein Megabyte 1 Million Bytes und ein Gigabyte 1 Milliarde Bytes entspricht. Netzwerkmessungen sind eine Ausnahme von dieser allgemeinen Regel. Sie werden in Bits angegeben (da Netzwerke Daten bitweise verschieben). 024 5 Bytes Computerhersteller runden diese Zahlen häufig ab und sagen, dass ein Megabyte 1 Million Bytes und ein Gigabyte 1 Milliarde Bytes entspricht. Netzwerkmessungen sind eine Ausnahme von dieser allgemeinen Regel. Sie werden in Bits angegeben (da Netzwerke Daten bitweise verschieben). 024 5 Bytes Computerhersteller runden diese Zahlen häufig ab und sagen, dass ein Megabyte 1 Million Bytes und ein Gigabyte 1 Milliarde Bytes entspricht. Netzwerkmessungen sind eine Ausnahme von dieser allgemeinen Regel. Sie werden in Bits angegeben (da Netzwerke Daten bitweise verschieben).
quelle
Wenn eine Maschine byteadressierbar ist und ein Wort die kleinste Einheit ist, die im Speicher adressiert werden kann, dann wäre ein Wort vermutlich ein Byte!
quelle
word
definitiv 32 Bit, aber es gibt einenlb
Befehl (Ladebyte), der 8 Bit lädt.Eine Gruppe von 8 Bits wird als Byte bezeichnet (mit der Ausnahme, dass dies bei bestimmten Architekturen nicht der Fall ist :).
Ein Wort ist eine Gruppe von Bits fester Größe, die vom Befehlssatz und / oder der Hardware des Prozessors als Einheit behandelt werden. Das heißt, die Größe eines Allzweckregisters (das im Allgemeinen mehr als ein Byte beträgt) ist ein Wort
Im C wird ein Wort am häufigsten als Ganzzahl bezeichnet =>
int
quelle
octet
wurde definiert, um eine Folge von 8 Bits aufgrund der mit dem Begriff Byte verbundenen Mehrdeutigkeit explizit zu bezeichnen . Aber ich mag den Klangbyte
besser :)byte
besser": Ich vermute sehr, dass Sie damit nicht allein und sicher für ein paar Nischensysteme sind, wobei die "Verwirrung" eines Bytes möglicherweise eine andere Größe als 8-Bit hat ist heutzutage nicht mehr relevant.Die Begriffe BYTE und WORD beziehen sich auf die Größe des Prozessors, auf den verwiesen wird. Die gängigsten Prozessoren sind / waren 8 Bit, 16 Bit, 32 Bit oder 64 Bit. Dies sind die WORD-Längen des Prozessors. Tatsächlich ist die Hälfte eines WORTES ein BYTE, unabhängig von der numerischen Länge. Bereit dafür ist die Hälfte eines BYTE eine NIBBLE.
quelle
Tatsächlich ist das Wort im allgemeinen Sprachgebrauch zum Synonym für 16 Bit geworden, ähnlich wie das Byte mit 8 Bit. Kann etwas verwirrend sein, da die "Wortgröße" auf einer 32-Bit-CPU 32-Bit beträgt, aber wenn man von einem Datenwort spricht, würde man 16-Bit bedeuten. Mikrocontroller mit einer Wortgröße von 32 Bit haben es sich zur Aufgabe gemacht, ihre Anweisungen "longs" zu nennen (angeblich, um die Verwechslung von Wörtern und Doppelwörtern zu vermeiden).
quelle
ldrh
16 Bit und erweitern es auf Null in ein 32-Bit-Register. Oderldrsh
um 16 Bit zu laden und zu erweitern.