J'ai fait des recherches. Un octet fait 8 bits et un mot est la plus petite unité adressable en mémoire. La longueur exacte d'un mot varie. Ce que je ne comprends pas, c'est à quoi ça sert d'avoir un octet? Pourquoi ne pas dire 8 bits?
J'ai posé cette question à un prof et il a dit que la plupart des machines de nos jours sont adressables par octets, mais qu'est-ce que cela ferait un mot?
assembly
memory
hardware
terminology
cpu-architecture
Peter Cordes
la source
la source
Réponses:
Byte : Aujourd'hui, un octet est presque toujours 8 bits. Cependant, cela n'a pas toujours été le cas et il n'y a pas de "norme" ou quelque chose qui dicte cela. Puisque 8 bits est un nombre pratique pour travailler, il est devenu la norme de facto.
Word : la taille naturelle avec laquelle un processeur gère les données (la taille du registre). Les tailles de mot les plus courantes rencontrées aujourd'hui sont 8, 16, 32 et 64 bits, mais d'autres tailles sont possibles. Par exemple, il y avait quelques machines 36 bits , voire des machines 12 bits .
L' octet est la plus petite unité adressable pour une CPU. Si vous voulez définir / effacer des bits uniques, vous devez d'abord récupérer l'octet correspondant de la mémoire, jouer avec les bits, puis réécrire l'octet dans la mémoire.
Le mot, en revanche, est le plus gros morceau de bits avec lequel un processeur peut effectuer un traitement (comme l'addition et la soustraction) à la fois. Cette définition est un peu floue, car certains processeurs peuvent avoir des tailles de mot différentes pour différentes tâches (traitement entier ou virgule flottante par exemple). La taille des mots est ce avec quoi la majorité des opérations fonctionnent.
Il existe également quelques processeurs qui ont une taille de pointeur différente : par exemple, le 8086 est un processeur 16 bits, ce qui signifie que ses registres ont une largeur de 16 bits. Mais ses pointeurs (adresses) ont une largeur de 20 bits et ont été calculés en combinant d'une certaine manière deux registres de 16 bits.
la source
word
vaut 16 bits, même sur les processeurs x86 modernes où la taille de l'opérande par défaut est de 32 bits (dword) et la largeur du registre entier est de 64 bits (qword). Et les registres xmm ont une largeur de 128 bits (movdqa
déplacer un double quad). Le bus mémoire a une largeur d'au moins 64 bits (et les transferts par rafales de 64 octets = une ligne de cache), et les chemins de l'unité d'exécution vers le cache ont une largeur d'au moins 128 bits, ou 256 ou même 512 bits de largeur. Quelle que soit la taille du mot machine natif du x86 moderne, ce n'est pas 16 bits, mais le x86 moderne utilise toujours la terminologie 8086.Mis à part le point technique qu'un octet n'est pas nécessairement 8 bits, les raisons d'avoir un terme sont de nature humaine simple:
économie d'effort (alias paresse) - il est plus facile de dire "octet" plutôt que "huit bits"
tribalisme - des groupes de personnes aiment utiliser le jargon / une langue privée pour les distinguer des autres.
Suis le courant. Vous n'allez pas changer plus de 50 ans de terminologie informatique et de bagage culturel accumulés en vous plaignant à ce sujet.
FWIW - le terme correct à utiliser lorsque vous voulez dire "8 bits indépendants de l'architecture matérielle" est "octet".
la source
OCTET
J'essaye de répondre à cette question du point de vue C ++.
La norme C ++ définit «byte» comme «une unité de données adressable suffisamment grande pour contenir n'importe quel membre du jeu de caractères de base de l'environnement d'exécution.»
Cela signifie que l'octet se compose d'au moins suffisamment de bits adjacents pour accueillir le jeu de caractères de base pour l'implémentation. Autrement dit, le nombre de valeurs possibles doit être égal ou supérieur au nombre de caractères distincts. Aux États-Unis, les jeux de caractères de base sont généralement les jeux ASCII et EBCDIC, dont chacun peut être logé sur 8 bits. Par conséquent, il est garanti qu'un octet aura au moins 8 bits.
En d'autres termes, un octet est la quantité de mémoire requise pour stocker un seul caractère.
Si vous souhaitez vérifier le «nombre de bits» dans votre implémentation C ++, vérifiez le fichier «limits.h». Il devrait avoir une entrée comme ci-dessous.
MOT
Un mot est défini comme un nombre spécifique de bits qui peuvent être traités ensemble (c'est-à-dire en une seule tentative) par la machine / le système. Alternativement, nous pouvons dire que Word définit la quantité de données qui peuvent être transférées entre le CPU et la RAM en une seule opération.
Les registres matériels d'une machine informatique ont la taille d'un mot. La taille Word définit également la plus grande adresse mémoire possible (chaque adresse mémoire pointe vers une mémoire de taille octet).
Remarque - Dans les programmes C ++, les adresses mémoire pointent vers un octet de mémoire et non vers un mot.
la source
Parce que toutes les machines n'ont pas d'octets de 8 bits. Depuis vous avez marqué ce
C
, regarderCHAR_BIT
danslimits.h
.la source
Un mot correspond à la taille des registres dans le processeur. Cela signifie que les instructions du processeur comme, add, mul, etc. sont sur des entrées de la taille d'un mot.
Mais la plupart des architectures modernes ont une mémoire adressable par blocs de 8 bits, il est donc pratique d'utiliser le mot «octet».
la source
Dans ce contexte, un mot est l'unité qu'une machine utilise lorsqu'elle travaille avec la mémoire. Par exemple, sur une machine 32 bits, le mot a une longueur de 32 bits et sur une machine 64 bits, une longueur de 64 bits. La taille du mot détermine l'espace d'adressage.
En programmation (C / C ++), le mot est généralement représenté par le
int_ptr
type, qui a la même longueur qu'un pointeur, de cette façon abstraite ces détails.Cependant, certaines API peuvent vous dérouter, telles que l'API Win32, car elles ont des types tels que
WORD
(16 bits) etDWORD
(32 bits). La raison en est que l'API ciblait initialement les machines 16 bits, puis a été portée sur des machines 32 bits, puis sur des machines 64 bits. Pour stocker un pointeur, vous pouvez utiliserINT_PTR
. Plus de détails ici et ici .la source
Il semble que toutes les réponses supposent des langages de haut niveau et principalement C / C ++.
Mais la question est étiquetée «assemblage» et dans tous les assembleurs que je connais (pour les processeurs 8 bits, 16 bits, 32 bits et 64 bits), les définitions sont beaucoup plus claires:
la source
int<X>_t
etuint<X>_t
(et plus) qui doivent être utilisés si vous voulez une variable / paramètre d'une taille de bits spécifique..word
peut être 32 bits (par exemple pour Sparc ).Même si la longueur d'un mot varie, sur toutes les machines modernes et même sur toutes les architectures plus anciennes que je connais, la taille du mot est toujours un multiple de la taille de l'octet. Il n'y a donc pas d'inconvénient particulier à utiliser "octet" sur "8 bits" par rapport à la taille de mot variable.
Au-delà de cela, voici quelques raisons d'utiliser l'octet (ou l'octet 1 ) sur "8 bits":
1 Bien que je considère qu'un octet est 8 bits pour cette réponse, ce n'est pas universellement vrai: sur des machines plus anciennes, un octet peut avoir une taille différente (par exemple 6 bits . Octet signifie toujours 8 bits, quelle que soit la machine ( donc ce terme est souvent utilisé pour définir les protocoles réseau.) Dans l'usage moderne, l'octet est massivement utilisé comme synonyme de 8 bits.
la source
Quelle que soit la terminologie présente dans les fiches techniques et les compilateurs, un «octet» est de huit bits. N'essayons pas de confondre enquêteurs et généralités avec les exceptions les plus obscures, d'autant plus que le mot «Byte» vient de l'expression «By Eight». J'ai travaillé dans l'industrie des semi-conducteurs / électronique pendant plus de trente ans et pas une seule fois connu «Byte» utilisé pour exprimer quoi que ce soit plus de huit bits.
la source
L'unité de base du stockage informatique est le bit. Un bit peut contenir l'une des deux valeurs, 0 et 1. Tout autre stockage dans un ordinateur est basé sur des collections de bits. Compte tenu de suffisamment de bits, il est étonnant de voir combien de choses un ordinateur peut représenter: des chiffres, des lettres, des images, des films, des sons, des documents et des programmes, pour n'en nommer que quelques-uns. Un octet est de 8 bits, et sur la plupart des ordinateurs, il s'agit du plus petit bloc de stockage pratique. Par exemple, la plupart des ordinateurs n'ont pas d'instructions pour déplacer un peu mais en ont une pour déplacer un octet. Un terme moins courant est le mot, qui est l'unité native de données d'une architecture informatique donnée. Un mot est composé d'un ou plusieurs octets. Par exemple, un ordinateur qui possède des registres 64 bits et un adressage mémoire 64 bits a généralement des mots 64 bits (8 octets). Un ordinateur exécute de nombreuses opérations dans sa taille de mot d'origine plutôt qu'un octet à la fois. Stockage informatique, avec la plupart des débits informatiques, est généralement mesuré et manipulé en octets et en collections d'octets. Un kilo-octet, ou Ko, équivaut à 1024 octets par mégaoctet, ou Mo, équivaut à 1024 2 octets par gigaoctet, ou Go, à 1024 3 octets par téraoctet, ou To, à 1024 4 octets par pétaoctet, ou PB, à 1024 5 octets Ordinateur les fabricants arrondissent souvent ces chiffres et disent qu'un mégaoctet équivaut à 1 million d'octets et qu'un gigaoctet équivaut à 1 milliard d'octets. Les mesures de mise en réseau sont une exception à cette règle générale; ils sont donnés en bits (car les réseaux déplacent les données un peu à la fois) 024 5 octets Les fabricants d'ordinateurs arrondissent souvent ces chiffres et disent qu'un mégaoctet équivaut à 1 million d'octets et qu'un gigaoctet équivaut à 1 milliard d'octets. Les mesures de mise en réseau sont une exception à cette règle générale; ils sont donnés en bits (car les réseaux déplacent les données un peu à la fois) 024 5 octets Les fabricants d'ordinateurs arrondissent souvent ces chiffres et disent qu'un mégaoctet équivaut à 1 million d'octets et qu'un gigaoctet équivaut à 1 milliard d'octets. Les mesures de mise en réseau sont une exception à cette règle générale; ils sont donnés en bits (car les réseaux déplacent les données un peu à la fois)
la source
Si une machine est adressable par octet et qu'un mot est la plus petite unité qui peut être adressée en mémoire, alors je suppose qu'un mot serait un octet!
la source
word
certainement 32 bits, mais il y a unelb
instruction (load byte) qui charge 8 bits.Un groupe de 8 bits est appelé un octet (à l'exception où il ne l'est pas :) pour certaines architectures)
Un mot est un groupe de bits de taille fixe qui sont traités comme une unité par le jeu d'instructions et / ou le matériel du processeur. Cela signifie que la taille d'un registre à usage général (qui est généralement plus d'un octet) est un mot
Dans le C, un mot est le plus souvent appelé un entier =>
int
la source
octet
été défini pour désigner explicitement une séquence de 8 bits en raison de l'ambiguïté associée au terme octet . Mais j'aime le son debyte
mieux :)byte
meilleur": je soupçonne fortement que vous n'êtes pas seul dans ce domaine et sûr pour quelques systèmes de niche, la "confusion" d'un octet pouvant être d'une taille autre que 8 bits n'est plus d'actualité de nos jours.Les termes BYTE et WORD sont relatifs à la taille du processeur auquel il est fait référence. Les processeurs les plus courants sont / étaient 8 bits, 16 bits, 32 bits ou 64 bits. Ce sont les longueurs WORD du processeur. En fait, la moitié d'un MOT est un BYTE, quelle que soit la longueur numérique. Prêt pour cela, la moitié d'un BYTE est un NIBBLE.
la source
En fait, dans l'usage courant, le mot est devenu synonyme de 16 bits, tout comme l'octet a avec 8 bits. Cela peut être un peu déroutant car la "taille du mot" sur un processeur 32 bits est de 32 bits, mais quand on parle d'un mot de données, on voudrait dire 16 bits. Les microcontrôleurs avec une taille de mot de 32 bits ont pris l'habitude d'appeler leurs instructions "longs" (censés essayer d'éviter la confusion mot / double mot).
la source
ldrh
charger 16 bits et l'étendre à zéro dans un registre de 32 bits. Ouldrsh
pour charger et signer 16 bits.