Fondamentalement, chaque ordinateur moderne est une machine à pousser les bits. Habituellement, il pousse des bits dans des grappes de données, appelées octets, mots, dwords ou qwords.
Un octet est composé de 8 bits, un mot 2 octets (ou 16 bits), un mot dword 2 (ou 32 bits) et un qword 2 mots (ou 64 bits). Ce ne sont pas les seuls moyens d'organiser les bits. Des manipulations sur 128 bits et 256 bits se produisent également, souvent dans les instructions SIMD.
Les instructions d'assemblage fonctionnent sur les registres et les adresses de mémoire fonctionnent généralement sous l'une des formes ci-dessus.
Les ALU (unités logiques arithmétiques) fonctionnent sur des paquets de bits comme s'ils représentaient des entiers (généralement le format Complément de Deux), et les FPU comme s'ils étaient des valeurs à virgule flottante (généralement de style IEEE 754 float
et double
). Les autres parties agiront comme s'il s'agissait de données groupées de certains formats, caractères, entrées de table, instructions CPU ou adresses.
Sur un ordinateur 64 bits typique, des paquets de 8 octets (64 bits) sont des adresses. Nous affichons ces adresses de manière conventionnelle au format hexadécimal (comme 0xabcd1234cdef5678
), mais ce n'est qu'un moyen simple pour les humains de lire les modèles de bits. Chaque octet (8 bits) est écrit en deux caractères hexadécimaux (de manière équivalente, chaque caractère hexadécimal - 0 à F - représente 4 bits).
Ce qui se passe réellement (pour un certain niveau de fait), c'est qu'il y a des bits, généralement stockés dans un registre ou stockés dans des emplacements adjacents dans une banque de mémoire, et nous essayons simplement de les décrire à un autre humain.
Suivre un pointeur consiste à demander au contrôleur mémoire de nous donner quelques données à cet endroit. Vous demandez généralement au contrôleur de mémoire un certain nombre d'octets à un certain emplacement (enfin, implicitement une plage d'emplacements, généralement contigus), et il est fourni via divers mécanismes dans lesquels je n'entrerai pas.
Le code spécifie généralement une destination pour les données à extraire - un registre, une autre adresse mémoire, etc. - et généralement c'est une mauvaise idée de charger des données à virgule flottante dans un registre en attendant un entier, ou vice versa.
Le type de données en C / C ++ est quelque chose dont le compilateur garde la trace et il change le code généré. Habituellement, il n'y a rien d'intrinsèque dans les données qui les rend réellement de n'importe quel type. Juste une collection de bits (arrangés en octets) qui sont manipulés de manière entière (ou flottante ou de type adresse) par le code.
Il y a des exceptions à cela. Il existe des architectures où certaines choses sont un type différent de bits. L'exemple le plus courant est les pages d'exécution protégées - alors que les instructions indiquant au CPU ce qu'il faut faire sont des bits, au moment de l'exécution, les pages (mémoire) contenant le code à exécuter sont marquées spécialement, ne peuvent pas être modifiées et vous ne pouvez pas exécuter les pages qui ne sont pas marquées comme pages d'exécution.
Il existe également des données en lecture seule (parfois stockées dans la ROM qui ne peuvent pas être écrites physiquement!), Des problèmes d'alignement (certains processeurs ne peuvent pas charger les double
s à partir de la mémoire à moins qu'ils ne soient alignés de manière particulière, ou des instructions SIMD qui nécessitent un certain alignement), et des myriades de autres bizarreries d'architecture.
Même le niveau de détail ci-dessus est un mensonge. Les ordinateurs ne poussent pas «vraiment» les bits, ils poussent vraiment les tensions et le courant. Ces tensions et courants ne font parfois pas ce qu'ils sont "censés" faire au niveau de l'abstraction des bits. Les puces sont conçues pour détecter la plupart de ces erreurs et les corriger sans que l'abstraction de niveau supérieur n'en soit consciente.
Même c'est un mensonge.
Chaque niveau d'abstraction masque celui ci-dessous et vous permet de penser à résoudre des problèmes sans avoir à garder à l'esprit les diagrammes de Feynman pour les imprimer "Hello World"
.
Donc, à un niveau d'honnêteté suffisant, les ordinateurs poussent les bits, et ces bits ont un sens par la façon dont ils sont utilisés.