J'ai lu dans ce tutoriel de programmation d'assemblage que 8 bits sont utilisés pour les données et 1 bit pour la parité, qui est ensuite utilisée pour détecter une erreur de parité (provoquée par un défaut matériel ou une perturbation électrique).
Est-ce vrai?
Réponses:
Un octet de données est huit bits. Il peut y avoir plus de bits par octet de données utilisés au niveau du système d'exploitation ou même du matériel pour la vérification des erreurs (bit de parité ou même un schéma de détection d'erreur plus avancé), mais les données sont au nombre de huit. Les bits et les bits de parité sont généralement invisibles pour le logiciel. Un octet a été normalisé pour signifier «huit bits de données». Le texte n’a pas tort de dire qu’il peut y avoir plus de bits dédiés au stockage d’un octet de données que de huit bits de données, mais que ceux-ci ne sont généralement pas considérés comme faisant partie de l’octet en tant que tel, le texte lui-même l'indique.
Vous pouvez le voir dans la section suivante du tutoriel:
4 * 8 = 32, cela peut prendre 36 bits sur le système, mais pour l’intention, ce n’est que 32 bits.
la source
char
dans C (qui est le lien), c'est exactement la plus petite unité de mémoire adressable. Cela s'appelle simplement char , mais le standard C le rend synonyme d' octet .Traditionnellement, un octet peut avoir n'importe quelle taille et n'est que la plus petite unité de mémoire adressable. Ces jours-ci, les octets 8 bits ont été à peu près normalisés pour les logiciels. Comme JustAnotherSoul l’a dit, le matériel peut stocker plus de bits que les 8 bits de données.
Si vous travaillez sur des dispositifs à logique programmable, tels que les FPGA, vous constaterez peut-être que leur mémoire interne est souvent adressable sous forme de fragments de 9 bits. En tant qu'auteur du HDL, vous pouvez utiliser ce 9ème bit pour la vérification des erreurs ou simplement pour stocker des quantités plus importantes. de données par "octet". Lorsque vous achetez des puces de mémoire pour du matériel personnalisé, vous avez généralement le choix entre des unités adressables de 8 ou 9 bits (ou 16/18, 32/36, etc.), puis vous pouvez choisir si vous avez ou non des "octets" de 9 bits. vous faites avec ce 9ème bit si vous choisissez de l'avoir.
la source
Ce texte est extrêmement mal rédigé. Il parle presque certainement de la mémoire RAM ECC (code de correction d'erreur) .
La RAM ECC stockera généralement une valeur de 8 bits d’informations en utilisant 9 bits. Le nombre supplémentaire de bits par octet est utilisé pour stocker les codes de correction d'erreur.
(Dans les deux cas, chaque octet est réparti sur chaque puce. Image reproduite avec l'aimable autorisation de Puget Systems )
Tout cela est complètement invisible pour les utilisateurs du matériel. Dans les deux cas, le logiciel utilisant cette RAM voit 8 bits par octet.
En passant: les codes de correction d'erreur dans la RAM ne sont généralement pas de 1 bit par octet; au lieu de cela, ils sont 8 bits par 8 octets. Cela a le même espace, mais présente quelques avantages supplémentaires. Voir SECDED pour plus d'informations.
la source
De manière générale, la réponse courte est qu'un octet est de 8 bits. Cela simplifie excessivement le problème (parfois même au point d’être inexact), mais c’est la définition que la plupart des gens (y compris un grand nombre de programmeurs) connaissent bien, et la définition de presque tout le monde par défaut (quel que soit le nombre d’octets de taille différente qu’ils nous avons dû travailler avec).
Plus spécifiquement, un octet est la plus petite unité de mémoire adressable pour une architecture donnée et est généralement suffisamment grand pour contenir un seul caractère de texte. Sur la plupart des architectures modernes, un octet est défini sur 8 bits; ISO / IEC 80000-13 spécifie également qu'un octet est de 8 bits, comme le fait le consensus général (ce qui signifie que si vous parlez d'octets de 9 bits, par exemple, vous rencontrerez beaucoup de problèmes à moins que vous déclarez que vous ne voulez pas dire octets normaux).
Cependant, il existe des exceptions à cette règle. Par exemple:
sizeof(char)
, tout en indiquant indirectement qu’ilchar
faut au moins 8 bits, chaque octet doit avoir une adresse unique et qu’il ne doit y avoir aucun espace entre les octets contigus. en mémoire. Cela rend les langues plus portables qu'elles ne le seraient si elles nécessitaient explicitement des octets de 8 bits. [Le nombre de bits dans un octet est spécifié commeCHAR_BIT
suit: "en-tête" de la bibliothèque C (limits.h
en C,climits
en C ++).]Ainsi, dans la plupart des cas, un octet sera généralement de 8 bits. Si ce n'est pas le cas, il s'agit probablement de 9 bits et peut ne pas faire partie d'un mot de 36 bits.
la source
Notez que le terme octet n'est pas bien défini sans contexte. En ce qui concerne les architectures informatiques, vous pouvez supposer qu'un octet est de 8 bits, du moins pour les architectures modernes. Cela était largement normalisé par les langages de programmation tels que C, qui exigeait que les octets aient au moins 8 bits mais ne fournissaient aucune garantie pour des octets plus grands, faisant de 8 bits par octet la seule hypothèse sûre.
Il existe des ordinateurs avec des unités adressables de plus de 8 bits (généralement 16 ou 32), mais ces unités sont généralement appelées mots machine et non pas octets. Par exemple, un DSP avec 32K mots de RAM 32 bits serait annoncé comme ayant 128 Ko ou RAM, pas 32 Ko.
Les choses ne sont pas aussi bien définies en ce qui concerne les normes de communication. L'ASCII est encore largement utilisé et ses octets sont de 7 bits (ce qui convient parfaitement aux octets de 8 bits des ordinateurs). Les émetteurs-récepteurs UART sont toujours produits pour avoir une taille en octets configurable (en général, vous devez choisir entre au moins 6, 7 et 8 bits par octet, mais 5 et 9 ne sont pas inconnus).
la source
Un octet est généralement défini comme la plus petite unité d'espace mémoire adressable individuellement. Cela peut être n'importe quelle taille. Il y a eu des architectures avec des tailles d'octets comprises entre 6 et 9 bits, peut-être même plus grandes. Il existe également des architectures où la seule unité adressable est la taille du bus. Sur ces architectures, on peut dire qu'elles n'ont tout simplement pas d'octet , ou l'octet est la même taille que le mot (dans un cas particulier que je connaisse qui être 32 bits); de toute façon, ce n'est certainement pas 8 bits. De même, il existe des architectures à adressage binaire, sur ces architectures, nous pourrions encore affirmer que les octets n'existent tout simplement pas, ou nous pourrions dire que les octets ont une valeur de 1 bit; de toute façon est une définition raisonnable, mais 8 bits est définitivement faux.
Sur de nombreuses architectures à usage général, un octet contient 8 bits. Cependant, ce n'est pas garanti. Plus vous vous écartez des processeurs traditionnels et / ou généraux, plus vous rencontrerez des octets autres que 8 bits. Cela va si loin que certains logiciels hautement portables rendent même la taille configurable. Par exemple, les anciennes versions de GCC contenaient une macro appelée
BITS_PER_BYTE
(ou quelque chose du genre), qui configurait la taille d'un octet pour une architecture particulière. Je pense que certaines versions plus anciennes de NetBSD pourraient être exécutées sur des architectures autres que 8 bits par octet.Si vous voulez vraiment souligner que vous parlez d'une quantité exacte de 8 bits plutôt que de la plus petite quantité de mémoire adressable, quelle que soit sa taille, vous pouvez utiliser le terme octet , qui est utilisé par exemple dans de nombreux autres centres de contrôle.
la source
CHAR_BIT
(trouvée danslimits.h
), je ne suis pas au courantBITS_PER_BYTE
Lorsque j'ai commencé à programmer en 1960, nous avions des mots de 48 bits avec des octets de 6 bits - ils s'appelaient alors pas ce nom, ils s'appelaient des caractères. Ensuite, j'ai travaillé sur l'ordinateur Golem avec des mots de 75 bits et des octets de 15 bits. Plus tard, la norme était de 6 octets jusqu'à ce que IBM en publie 360, et de nos jours, un octet équivaut généralement à un octet, soit 8 bits de données. Certains matériels avaient des bits supplémentaires pour la détection d'erreur et éventuellement pour la correction d'erreur, mais ils n'étaient pas accessibles au logiciel.
la source
Un octet est 8 bits.
Dans le passé lointain, il y avait différentes définitions d'un mot de mémoire et d'un octet. La suggestion selon laquelle cette ambiguïté est généralisée ou prévalente dans la vie d'aujourd'hui est fausse.
Depuis au moins la fin des années 1970, un octet fait 8 bits. La masse des ordinateurs personnels et des ordinateurs personnels utilise sans équivoque un octet comme valeur 8 bits dans sa documentation, de même que toutes les fiches techniques et la documentation relative aux lecteurs de disquettes, aux lecteurs de disque dur et aux EPROM PROM / EPROM / EEPROM / Flash. / Puces de mémoire SRAM / SDRAM que j'ai lu dans cette période. (Et j'en ai personnellement lu une bonne partie tout au long de cette période.) Ethernet et quelques autres protocoles de communication me paraissent inhabituels quand on parle d'octets.
L'ambiguïté du terme octet est en soi une chose rare et obscure. Très très peu de la population des programmeurs, ingénieurs de conception, ingénieurs de test, vendeurs, ingénieurs de service ou parieurs moyens des 30 dernières années ou plus penseraient que cela signifiait autre chose qu'une valeur de 8 bits, s'ils reconnaissaient ce mot. .
Lorsqu'un octet est géré par le matériel, par exemple lorsqu'il est stocké dans des puces de mémoire ou communiqué par fil, le matériel peut ajouter des données redondantes à l'octet. Cela peut aider par la suite à détecter les erreurs matérielles afin que des données non fiables puissent être reconnues et supprimées (par exemple, parité, somme de contrôle, CRC). Ou cela peut permettre de corriger des erreurs dans les données et de les récupérer (par exemple, ECC). Dans les deux cas, les données redondantes seront supprimées lorsque l'octet aura été récupéré ou reçu pour un traitement ultérieur. L'octet reste la valeur centrale de 8 bits et les données redondantes restent des données redondantes.
la source
Tout d’abord, le didacticiel auquel vous faites référence semble être relativement obsolète et semble viser les versions obsolètes des processeurs x86, sans le préciser. Ainsi, bon nombre des choses que vous lirez ne seront pas comprises par d’autres (par exemple, si vous affirmez Si un mot est composé de 2 octets, les gens ne sauront pas de quoi vous parlez ou ils sauront que vous avez appris à utiliser des processeurs x86 très obsolètes et savent à quoi s'attendre.
Un octet est le nombre de bits que quelqu'un décide. Cela pourrait être 8 bits, 9 bits ou 16 bits, n'importe quoi. En 2016, dans la plupart des cas, un octet sera de huit bits. Pour être sûr, vous pouvez utiliser le terme octet - un octet est toujours, toujours, huit bits.
La vraie confusion crée ici deux questions confuses: 1. Quel est le nombre de bits dans un octet? 2. Si je voulais transférer un octet d'un endroit à un autre, ou si je voulais stocker un octet en utilisant des moyens physiques pratiques, comment le ferais-je? La deuxième question ne vous intéresse généralement pas, sauf si vous travaillez dans une entreprise qui fabrique des modems, des disques durs ou des disques SSD. En pratique, la première question vous intéresse et pour la seconde, vous dites simplement "bon, on s'en occupe".
Le bit de parité mentionné est un mécanisme primitif qui aide à détecter que lorsqu'un octet est stocké en mémoire, puis que l'octet est lu, la mémoire a été modifiée par accident. Ce n'est pas très bon à cela, car il ne trouvera pas que deux bits ont été modifiés, donc un changement risque de ne pas être détecté, et il ne peut pas résoudre le problème car il est impossible de savoir lequel des 8 bits a changé. , ou même si le bit de parité a changé.
Les bits de parité ne sont pratiquement pas utilisés sous cette forme primitive. Les données stockées de manière permanente sont généralement protégées de manière plus complexe, par exemple en ajoutant une somme de contrôle de 32 bits ou plus à un bloc de 1024 octets - ce qui nécessite beaucoup moins d'espace supplémentaire (0,4% dans cet exemple au lieu de 12,5%) et beaucoup plus complexe. moins susceptibles de ne pas savoir quand quelque chose ne va pas.
la source
WORD
, ce qui ... prouve un peu votre propos, car bon nombre des noms de type WinAPI sont obsolètes mais conservés pour des raisons de compatibilité ascendante. xPMalgré les réponses vraiment excellentes données ici, je suis surpris que personne n'ait indiqué que les bits de parité ou les bits de correction d'erreur sont par définition des «métadonnées» et ne font donc pas partie de l'octet lui-même.
Un octet a 8 bits !
la source
Dans l’usage moderne, un octet est composé de 8 bits, point (bien qu’il ait toujours eu d’autres définitions). Par contre, un mot de données est ce que le matériel en question traite comme une unité atomique - il peut s’agir de 8 bits, 9 bits, 10 bits, 12 bits, 16 bits, 20 bits, 24 bits, 32 bits, etc. Au fil des ans, les systèmes ont eu toutes sortes de tailles de mots différentes.
Pour mettre en œuvre un système de mémoire ou un protocole de transmission, il est avantageux d’ajouter une détection / correction d’erreur qui implique des bits supplémentaires. Ils ne font pas pour un octet de 9 bits parce que, comme indiqué ci-dessus, un octet est de 8 bits.
Divers systèmes ajoutent une détection et / ou une correction d'erreur de différentes manières.
L'utilisation typique de la parité consiste à ajouter un bit supplémentaire au mot de transmission afin que le récepteur puisse détecter un seul bit d'erreur.
Un schéma pouvant fournir une correction d'erreur sur un bit implique l'ajout de 4 bits ECC par mot de données de 32 bits. Il se trouve que cela équivaut à être arithmétiquement équivalent à 1 bit par octet, mais cela ne peut pas / ne fonctionne pas ainsi. Un mot de données de 36 bits peut contenir suffisamment d'informations pour récupérer d'une erreur d'un seul bit pour un espace de données de 32 bits.
la source
8 bits. À l’intérieur du processeur et du clavier, les formats 9 et 11 bits sont utilisés. Les données utilisateur sont cependant représentées sur 8 bits. Les touches sur le clavier envoient chante qui est divisé en 11 bits. 1 bit de départ, 1 bit de fin, 1 bit de parité et 8 bits représentant une touche enfoncée.
la source