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?
assembly
memory
hardware
terminology
cpu-architecture
Peter Cordes
źródło
źródło
Odpowiedzi:
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.
źródło
word
wynosi 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 (movdqa
przesuń 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.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”.
źródło
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.
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.
źródło
Ponieważ nie wszystkie maszyny mają 8-bitowe bajty. Ponieważ określili to
C
, patrzećCHAR_BIT
wlimits.h
.źródło
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”.
źródło
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_ptr
typ, 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) iDWORD
(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 .źródło
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:
źródło
int<X>_t
iuint<X>_t
(plus więcej), które powinny być używane, jeśli chcesz mieć zmienną / parametr o określonym rozmiarze bitowym..word
może to być 32 bity (na przykład dla Sparc ).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 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.
źródło
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.
źródło
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)
źródło
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!
źródło
word
zdecydowanie oznacza 32 bity, ale istnieje instrukcjalb
(załaduj bajt), która ładuje 8 bitów.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
źródło
octet
został zdefiniowany, aby wyraźnie oznaczać sekwencję 8 bitów z powodu niejednoznaczności związanej z terminem bajt . Ale podoba mi się tobyte
lepiej :)byte
lepiej”: 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.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.
źródło
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).
źródło
ldrh
ładować 16 bitów i rozszerzać je do wartości zerowej do rejestru 32-bitowego. Lubldrsh
załadować i rozszerzyć 16-bitowy znak.