Jaka jest różnica między słowem a bajtem?

96

Zrobiłem trochę badań. Bajt to 8 bitów, a słowo jest najmniejszą jednostką, którą można zaadresować w pamięci. Dokładna długość słowa jest różna. Czego nie rozumiem, jaki jest sens posiadania bajtu? Dlaczego nie powiedzieć 8 bitów?

Zadałem to pytanie profesorowi, który powiedział, że większość dzisiejszych maszyn jest adresowana bajtowo, ale co by to znaczyło?

Peter Cordes
źródło
13
Najlepiej unikać terminu „słowo” ze względu na jego niejednoznaczność. Lub sprecyzuj, mówiąc 16-bitowe słowo, 32-bitowe słowo, ...
starblue
2
Czy korzystne jest, aby słowo było większe czy mniejsze?
2
@ quest4knoledge większe słowo pozwala na większe wskaźniki (czyli więcej pamięci RAM) i pozwala na szybkie przetwarzanie większych liczb. Może również pozwolić na szybsze wykonywanie niektórych operacji, takich jak memset, poprzez pracę w większych blokach. Jednak procesory z większym słowem wymagają więcej tranzystorów w procesorze i mogą zużywać nieco więcej energii.
VoidStar
@VoidStar i większe słowo oznaczałoby mniejszą przestrzeń adresową, czy jestem zdezorientowany?
1
Odpowiadając na pytanie „jaki jest sens posiadania bajtu” - to już historia. Procesory na początku nie były w stanie obsłużyć niczego większego niż „bajt” (wcześniejsze procesory obsługiwały tylko pliki nybble (4 bity), ale termin ten nigdy się nie przyjął). Pierwszym procesorem tej notatki był Intel 8086/8088. Został zaprojektowany, aby radzić sobie z instrukcjami zbudowanymi wokół „bajtów”, dlatego też nadal odnosimy się do pamięci w kategoriach xBajtów, np. Gigabajtów, ponieważ podstawową jednostką pamięci adresowalnej był bajt. 'K jest odniesieniem do kilobajtów, z których pierwsze komputery miały 16, z możliwością rozbudowy do 64 - woo hoo!
Fred

Odpowiedzi:

175

Bajt : Obecnie bajt jest prawie zawsze 8-bitowy. Jednak nie zawsze tak było i nie ma „standardu” ani czegoś, co to narzuca. Ponieważ 8 bitów to wygodna liczba do pracy, stała się de facto standardem.

Słowo : Naturalny rozmiar, z jakim procesor przetwarza dane (rozmiar rejestru). Obecnie najczęściej spotykane rozmiary słów to 8, 16, 32 i 64 bity, ale możliwe są inne rozmiary. Na przykład było kilka maszyn 36-bitowych , a nawet maszyn 12-bitowych .

Bajt to najmniejsza adresowalna jednostka dla CPU. Jeśli chcesz ustawić / wyczyścić pojedyncze bity, musisz najpierw pobrać odpowiedni bajt z pamięci, pomieszać z bitami, a następnie zapisać bajt z powrotem do pamięci.

W przeciwieństwie do tego słowo jest największym kawałkiem bitów, za pomocą których procesor może przetwarzać (na przykład dodawanie i odejmowanie) naraz. Ta definicja jest nieco niejasna, ponieważ niektóre procesory mogą mieć różne rozmiary słów dla różnych zadań (na przykład przetwarzanie liczb całkowitych i zmiennoprzecinkowych). Większość operacji dotyczy rozmiaru słowa .

Istnieje również kilka procesorów, które mają inny rozmiar wskaźnika : na przykład 8086 jest procesorem 16-bitowym, co oznacza, że ​​jego rejestry mają szerokość 16 bitów. Ale jego wskaźniki (adresy) mają szerokość 20 bitów i zostały obliczone przez połączenie dwóch rejestrów 16-bitowych w określony sposób.

DarkDust
źródło
9
Doskonała odpowiedź. Spierałbym się tylko, że „ [t] on słowo dla kontrastu jest największym kawałkiem bitów, z którymi procesor może przetwarzać… na raz ”. W rzeczywistości jest to najbardziej powszechny fragment bitów itp. Wiele architektur, które ewoluowały w czasie, ma rozmiar słowa, który nie jest najszerszy, ale często są ograniczone w tym, co mogą zrobić ze swoimi najszerszymi wartościami.
Ross Patterson
12
Aby uzyskać dodatkowy kredyt, „nibble” to powszechny termin na pół bajta. Powstał we wczesnej erze procesorów mikrokomputerów ( np . Intel 8080) i zawsze był rozumiany jako 4 bity, ponieważ do tego czasu bajt ustabilizował się do 8 bitów.
Ross Patterson
7
Obecnie standardem jest 8-bitowy bajt; patrz IEC 80000-13: 2008.
user2431763
1
@DebanjanDhar: Tak, nie są ze sobą spokrewnieni. Jedyną zależnością jest to, że strona jest (AFAIK) zawsze wielokrotnością rozmiaru słowa.
DarkDust
4
x86 (jak zwykle) komplikuje sprawę: w terminologii Intela a wordwynosi 16 bitów, nawet na nowoczesnych procesorach x86, gdzie domyślny rozmiar argumentu to 32 bity (dword), a całkowita szerokość rejestru to 64 bity (qword). A rejestry xmm mają szerokość 128 bitów ( movdqaprzesuń podwójny poczwórny). Magistrala pamięci ma co najmniej 64 bity szerokości (i transfery w seriach po 64 bajty = linia pamięci podręcznej), a ścieżki jednostki wykonawczej do pamięci podręcznej mają szerokość co najmniej 128 bitów lub 256 lub nawet 512 bitów. Niezależnie od natywnego rozmiaru słowa maszynowego współczesnego x86, nie jest to 16 bitów, ale współczesne x86 nadal używa terminologii 8086.
Peter Cordes,
16

Czego nie rozumiem, jaki jest sens posiadania bajtu? Dlaczego nie powiedzieć 8 bitów?

Pomijając kwestię techniczną, że bajt niekoniecznie jest 8 bitami, powodem posiadania terminu jest prosta ludzka natura:

  • oszczędność wysiłku (inaczej lenistwo) - łatwiej jest powiedzieć „bajt” niż „osiem bitów”

  • plemienność - grupy ludzi lubią używać żargonu / prywatnego języka, aby odróżnić ich od innych.

Po prostu idź z falą. Narzekając na nie, nie zmienisz ponad 50 lat nagromadzonej terminologii IT i bagażu kulturowego.


FWIW - poprawnym terminem używanym w przypadku „8 bitów niezależnych od architektury sprzętowej” jest „oktet”.

Stephen C.
źródło
myślałem, że oktet jest po prostu francuskim tłumaczeniem bajtu, dziękuję;)
Abdelouahab Pp
8

BAJT

Próbuję odpowiedzieć na to pytanie z perspektywy C ++.

Standard C ++ definiuje „bajt” jako „adresowalną jednostkę danych wystarczająco dużą, aby pomieścić dowolny element członkowski podstawowego zestawu znaków środowiska wykonawczego”.

Oznacza to, że bajt składa się z co najmniej wystarczającej liczby sąsiednich bitów, aby pomieścić podstawowy zestaw znaków dla implementacji. Oznacza to, że liczba możliwych wartości musi być równa lub większa niż liczba różnych znaków. W Stanach Zjednoczonych podstawowymi zestawami znaków są zwykle zestawy ASCII i EBCDIC, z których każdy może pomieścić 8 bitów. W związku z tym jest zagwarantowane, że bajt będzie miał co najmniej 8 bitów.

Innymi słowy, bajt to ilość pamięci potrzebna do przechowywania pojedynczego znaku.

Jeśli chcesz sprawdzić „liczbę bitów” w swojej implementacji C ++, sprawdź plik „limits.h”. Powinien mieć wpis jak poniżej.

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

SŁOWO

Słowo definiuje się jako określoną liczbę bitów, które mogą być przetwarzane razem (tj. W jednej próbie) przez maszynę / system. Alternatywnie możemy powiedzieć, że Word definiuje ilość danych, które można przesłać między procesorem a pamięcią RAM w ramach jednej operacji.

Rejestry sprzętowe w komputerze mają wielkość słowa. Rozmiar słowa definiuje również największy możliwy adres pamięci (każdy adres pamięci wskazuje na pamięć o rozmiarze bajtu).

Uwaga - w programach C ++ adresy pamięci wskazują bajt pamięci, a nie słowo.

Vaibhav Patle
źródło
6

Dlaczego nie powiedzieć 8 bitów?

Ponieważ nie wszystkie maszyny mają 8-bitowe bajty. Ponieważ określili to C, patrzeć CHAR_BITw limits.h.

cnicutar
źródło
6

Słowo to rozmiar rejestrów w procesorze. Oznacza to, że instrukcje procesora, takie jak, add, mul itp., Są na wejściach o rozmiarze słowa.

Jednak większość nowoczesnych architektur ma pamięć adresowalną w 8-bitowych fragmentach, więc wygodnie jest użyć słowa „bajt”.

VoidStar
źródło
Czyli w pewnym sensie termin „bajt” jest używany tylko dla wygody?
Tak, „bajt” był szczególnie wygodny, gdy wymyślono ten termin. Jak wiele konwencji, kiedy już się wprowadzają, trwają. Nie jestem pewien, czy terminologia oparta na bajtach naprawdę sprawia, że ​​komputery są już łatwiejsze do zrozumienia w szerszym kontekście, ale jest to dominująca konwencja i nie chce się zmieniać w najbliższym czasie.
VoidStar
Bajt to termin używany dla jednostki, która została użyta jako znak w tekście. Historycznie istniały bajty o rozmiarach od 6 do 9 bitów.
starblue
@starblue, jak to możliwe, że postać zajmuje mniej miejsca niż słowo?
1
@ quest4knoledge: ponieważ pamięć jest przechowywana w mniejszych fragmentach tych słów. Słowo ma 32 bity (lub 64 bity na nowszych komputerach). W algorytmie, który przetwarza pojedyncze znaki 1 na 1, zajmują całe słowo tylko wtedy, gdy są wewnątrz procesora, a po umieszczeniu z powrotem w pamięci RAM są ściślej upakowane.
VoidStar
5

W tym kontekście słowo jest jednostką używaną przez maszynę podczas pracy z pamięcią. Na przykład na komputerze 32-bitowym słowo ma długość 32 bity, a na komputerze 64-bitowym 64 bity. Rozmiar słowa określa przestrzeń adresową.

W programowaniu (C / C ++) słowo jest zwykle reprezentowane przez int_ptrtyp, który ma taką samą długość jak wskaźnik, w ten sposób abstrakcyjnie te szczegóły.

Niektóre interfejsy API mogą jednak wprowadzać w błąd, takie jak interfejs API Win32, ponieważ ma typy, takie jak WORD(16 bitów) i DWORD(32 bity). Powodem jest to, że początkowo interfejs API był przeznaczony dla maszyn 16-bitowych, a następnie został przeniesiony na komputery 32-bitowe, a następnie na maszyny 64-bitowe. Aby zapisać wskaźnik, możesz użyć INT_PTR. Więcej szczegółów tutaj i tutaj .

npclaudiu
źródło
5

Wydaje się, że wszystkie odpowiedzi dotyczą języków wysokiego poziomu, a głównie C / C ++.

Ale pytanie jest oznaczone jako „assembler” i we wszystkich asemblerach, które znam (dla procesorów 8-, 16-, 32- i 64-bitowych) definicje są znacznie bardziej jasne:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")
johnfound
źródło
3
Nie, te rozmiary są ważne tylko na komputerze 16-bitowym. Prawdopodobnie jesteś przyzwyczajony do programowania Windows, które nadal używa tych makr, ponieważ jest to dziedzictwo po 16-bitowych dniach, a MS nie zadał sobie trudu, aby to poprawić.
DarkDust
2
BTW, ponieważ rozmiar słowa (a tak naprawdę nawet bajtu) może się różnić, ISO-C ma typy int<X>_ti uint<X>_t(plus więcej), które powinny być używane, jeśli chcesz mieć zmienną / parametr o określonym rozmiarze bitowym.
DarkDust,
@DarkDust mówimy tutaj o języku asemblera. Normy C nie mają zastosowania. Swoją drogą, programuję w assemblerze od 1980 roku i były w użyciu te same nazwy. (no może poza qword)
johnfound
Jednak znalazłem wyjątek: w GNU as .wordmoże to być 32 bity (na przykład dla Sparc ).
DarkDust,
Przepraszamy, AS nie jest asemblerem. Jest to brzydki, kaleki, nieszczęśliwy mutant, stworzony w jedynym celu, jakim jest bycie zapleczem dla kompilatorów HLL.
johnfound
3

Dokładna długość słowa jest różna. Czego nie rozumiem, jaki jest sens posiadania bajtu? Dlaczego nie powiedzieć 8 bitów?

Mimo że długość słowa jest różna, na wszystkich nowoczesnych maszynach, a nawet we wszystkich starszych architekturach, które znam, rozmiar słowa jest nadal wielokrotnością rozmiaru bajtu. Nie ma więc żadnego szczególnego wady używania „bajtu” na „8 bitach” w stosunku do zmiennej wielkości słowa.

Poza tym, oto kilka powodów, dla których warto używać bajtu (lub oktetu 1 ) na „8 bitach”:

  1. Większe jednostki są po prostu wygodne, aby uniknąć bardzo dużych lub bardzo małych liczb: równie dobrze możesz zapytać „po co mówić 3 nanosekundy, skoro można powiedzieć 0,000000003 sekundy” lub „po co mówić 1 kilogram, skoro można powiedzieć 1000 gramów” itd.
  2. Poza wygodą, jednostka bajtu jest w pewnym sensie tak fundamentalna, jak 1 bit, ponieważ wiele operacji zwykle nie działa na poziomie bajtów, ale na poziomie bajtów: adresowanie pamięci, przydzielanie dynamicznej pamięci, odczyt z pliku lub gniazda itp.
  3. Nawet gdyby przyjąć „8 bitów” jako typ jednostki, więc można by powiedzieć „dwa 8-bitowe” zamiast „dwóch bajtów”, często byłoby bardzo mylące, gdyby nowa jednostka zaczynała się od liczby. Na przykład, jeśli ktoś powiedziałby „sto 8-bitów”, można to łatwo zinterpretować jako 108 bitów zamiast 100 bitów.

1 Chociaż uznam bajt za 8 bitów dla tej odpowiedzi, nie jest to uniwersalna prawda: na starszych komputerach bajt może mieć inny rozmiar (np. 6 bitów . Oktet zawsze oznacza 8 bitów, niezależnie od maszyny ( więc ten termin jest często używany przy definiowaniu protokołów sieciowych.) We współczesnym zastosowaniu bajt jest przeważnie używany jako synonim 8 bitów.

BeeOnRope
źródło
2

Niezależnie od terminologii występującej w arkuszach danych i kompilatorach, „Bajt” to osiem bitów. Nie próbujmy mylić poszukiwaczy i ogólników z bardziej niejasnymi wyjątkami, zwłaszcza że słowo „bajt” pochodzi od wyrażenia „na osiem”. Pracuję w branży półprzewodników / elektroniki od ponad trzydziestu lat i ani razu nie byłem znany jako „Byte”, używany do wyrażania czegoś więcej niż osiem bitów.

Brendan
źródło
Niezwykłe tak (wiemy, że. Przykład: The texas instruments c54x Google texas instruments c54x byte. Ti.com/lit/ug/spru393/spru393.pdf "Instrukcje 'C55x mają zmienne długości bajtów w zakresie od 8 bitów do 48 bitów „. stackoverflow.com/questions/2098149/...
barlop
1
W ogóle nie pochodzi stamtąd. Termin ten został ukuty przez W. Buchholtza w IBM pod koniec lat pięćdziesiątych. Źródło: bobbemer.com/BYTE.HTM . Według Boba Bemera pisownia „bajt” została wybrana zamiast „bite”, aby uniknąć pomyłki (z „bitem”) z powodu literówek. On by wiedział. On tam był!
Stephen C
(Tylko 30 lat? Jesteś zwykłym lichwiarzem. Nauczyłem się programować w systemach, w których naturalny rozmiar „bajtu” nie wynosił 8 bitów :-))
Stephen C
1

Źródła: https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

Podstawową jednostką pamięci komputera jest bit. Bit może zawierać jedną z dwóch wartości, 0 i 1. Cała inna pamięć w komputerze jest oparta na kolekcjach bitów. Biorąc pod uwagę wystarczającą liczbę bitów, zdumiewające jest, ile rzeczy może reprezentować komputer: liczby, litery, obrazy, filmy, dźwięki, dokumenty i programy, żeby wymienić tylko kilka. Bajt to 8 bitów i na większości komputerów jest to najmniejsza wygodna porcja pamięci. Na przykład większość komputerów nie ma instrukcji, aby trochę przesunąć, ale ma jedną, aby przenieść bajt. Mniej popularnym terminem jest słowo, które jest rodzimą jednostką danych danej architektury komputera. Słowo składa się z jednego lub więcej bajtów. Na przykład komputer z 64-bitowymi rejestrami i 64-bitowym adresowaniem pamięci zazwyczaj ma 64-bitowe (8-bajtowe) słowa. Komputer wykonuje jednocześnie wiele operacji w swoim rodzimym rozmiarze słowa, a nie w bajcie. Przechowywanie komputerów, wraz z przepustowością większości komputerów jest zazwyczaj mierzona i przetwarzana w bajtach i kolekcjach bajtów. Kilobajt, czyli KB, to 1024 bajty na megabajt lub MB, to 1024 2 bajty na gigabajt, czyli GB, to 1024 3 bajty na terabajt, czyli TB, to 1024 4 bajty na petabajt, czyli PB, to 1024 5 bajtów Komputer producenci często zaokrąglają te liczby i mówią, że megabajt to 1 milion bajtów, a gigabajt to 1 miliard bajtów. Pomiary sieciowe są wyjątkiem od tej ogólnej zasady; są podawane w bitach (ponieważ sieci przesyłają dane po kawałku na raz) 024 5 bajtów Producenci komputerów często zaokrąglają te liczby i mówią, że megabajt to 1 milion bajtów, a gigabajt to 1 miliard bajtów. Pomiary sieciowe są wyjątkiem od tej ogólnej zasady; są podawane w bitach (ponieważ sieci przesyłają dane po kawałku na raz) 024 5 bajtów Producenci komputerów często zaokrąglają te liczby i mówią, że megabajt to 1 milion bajtów, a gigabajt to 1 miliard bajtów. Pomiary sieciowe są wyjątkiem od tej ogólnej zasady; są podawane w bitach (ponieważ sieci przesyłają dane po kawałku na raz)

LiLi
źródło
-1

Jeśli maszyna jest adresowalna bajtowo, a słowo jest najmniejszą jednostką, którą można zaadresować w pamięci, myślę, że słowo byłoby bajtem!

K-ballo
źródło
Tak. Minimalna adresowalna jednostka pamięci w TMS320C54xx (jednym z procesorów DSP firmy Texas Instruments) ma długość 16 bitów, co jest jednocześnie najmniejszym rozmiarem rejestrów ogólnego przeznaczenia. Kompilator TI C definiuje na nim char = short = int = 16 bitów.
Alexey Frunze
Nie, większość maszyn RISC ma 32-bitowe słowa, ale może adresować pojedyncze bajty. Na przykład w MIPS word zdecydowanie oznacza 32 bity, ale istnieje instrukcja lb(załaduj bajt), która ładuje 8 bitów.
Peter Cordes,
-1

Grupa 8 bitów nazywana jest bajtem (z wyjątkiem sytuacji, gdy tak nie jest :) dla niektórych architektur)

słowo jest stałe wielkości grupa bitów, które są traktowane jako jednostki przez zestaw instrukcji i / lub sprzętu procesora. Oznacza to, że rozmiar rejestru ogólnego przeznaczenia (który zazwyczaj jest większy niż bajt) jest słowem

W języku C słowo jest najczęściej nazywane liczbą całkowitą =>int

tolitius
źródło
7
Grupa 8 bitów nazywana jest oktetem.
cnicutar
2
poprawne: Termin octetzostał zdefiniowany, aby wyraźnie oznaczać sekwencję 8 bitów z powodu niejednoznaczności związanej z terminem bajt . Ale podoba mi się to bytelepiej :)
tolitius
2
@tolitius: +1 dla „Ale jak dźwięk bytelepiej”: ja mocno podejrzewam, że nie jesteś sam w tym i bezpieczne dla kilku systemów niszowych, do „zamieszania” w bajt ewentualnie bycie rozmiar inny niż 8-bitowe nie ma już znaczenia w dzisiejszych czasach.
Joachim Sauer
-1

Terminy BYTE i WORD zależą od rozmiaru procesora, do którego się odnosi. Najpopularniejszymi procesorami są / były 8-bitowe, 16-bitowe, 32-bitowe lub 64-bitowe. To są długości procesora WORD. Właściwie połowa SŁOWA to BYTE, bez względu na długość liczbową. Gotowy na to, połowa BYTE to NIBBLE.

Chris Calley
źródło
Nie, w procesorach ze słowami 32-bitowymi i bajtami 8-bitowymi (np. MIPS lub ARM) pół słowa to 2 bajty.
Peter Cordes,
-3

W rzeczywistości w powszechnym użyciu słowo stało się synonimem 16 bitów, podobnie jak bajt ma 8 bitów. Może to być trochę zagmatwane, ponieważ „rozmiar słowa” na 32-bitowym procesorze wynosi 32 bity, ale mówiąc o słowie danych, miałoby to oznaczać 16 bitów. Mikrokontrolery z 32-bitowym rozmiarem słowa zaczęły nazywać swoje instrukcje „longs” (podobno w celu uniknięcia pomyłki ze słowem / podwójnym słowem).

Brian Knoblauch
źródło
1
To całkowicie zależy od typu procesora. Jak zauważyłeś, na komputerach 32-bitowych innych niż IA32, „słowo” ma zazwyczaj 32 bity.
Ross Patterson
2
@RossPatterson To całkowicie zależy od tego, czy tworzysz oprogramowanie, czy jesz obiad.
Inżynier
ARM / MIPS / inne popularne architektury RISC mają 32-bitowe słowa. Jest to szerokość rejestru (w 32-bitowej wersji tych ISA) i szerokość instrukcji. 16 bitów to pół-słowo, dlatego instrukcje ARM lubiąldrh ładować 16 bitów i rozszerzać je do wartości zerowej do rejestru 32-bitowego. Lub ldrshzaładować i rozszerzyć 16-bitowy znak.
Peter Cordes,