Introduction à la programmation en assembleur (processeurs 64 bits de la famille 80x86)
1.1.1. Contenu des cases mémoires
Définition

La mémoire d'un ordinateur est découpée en particules élémentaires appelées bits (pour binary units). Chacune de ces particules peut prendre seulement 2 valeurs possibles (la valeur est dite binaire).

La valeur d'une particule élémentaire peut avoir une quantité indénombrable d'interprétations différentes : logique (ex : vrai ou faux), numérique (0 ou 1), couleur (ex : blanc ou noir), géographique (ex : gauche ou droite), etc. Dans la suite de ce cours nous allons utiliser le plus souvent une interprétation numérique entière. Notons qu'une interprétation numérique entière peut être reliée à n'importe quel type d'interprétation.

Le nombre d'interprétations différentes d'un ensemble de bits est infini. Cependant, dans une interprétation donnée, le nombre d'éléments distincts que cet ensemble de bits peut représenter est lui déterminé.

En effet, un ensemble non-ordonné de n bits peut représenter seulement n+1 valeurs différentes.

Exemple

Par exemple si l'on dispose de seulement 2 bits, nous aurons seulement 3 valeurs possibles : 00, 10 et 11 (01 étant équivalent à 10 en l'absence de notion d'ordre).

En revanche, si nous considérons non plus des ensembles de bits, mais des suites de bits, alors la capacité de représentation est considérablement plus importante. C'est ainsi qu'est structurée la mémoire d'un ordinateur : des suites de cases mémoires, qui sont elles-mêmes des suites de bits.

Le nombre de bits qui composent une case mémoire détermine sa capacité de représentation.

Exemple

Pour bien comprendre la relation entre nombre de bits et capacité de représentation, nous pouvons prendre comme exemple la formation des nombres entiers naturels en base décimale : un chiffre décimal peut représenter 10 valeurs différentes et une suite (c-a-d un nombre) de 2 chiffres décimaux peut représenter 100 valeurs différentes. Lorsque nos particules élémentaires peuvent prendre les valeurs entières de 0 à 9, la capacité de représentation d'une suite de x particules se calcule simplement :

  • 1 particule = 10 valeurs possibles (de 0 à 9)

  • 2 particules = 100 valeurs possibles (de 0 à 99)

  • x particules = 10x valeurs possibles (de 0 à 10x-1)

Mais puisque nous sommes ici dans une base binaire, nous avons :

  • 1 particule = 2 valeurs possibles (de 0 à 1)

  • 2 particules = 4 valeurs possibles (nombres binaires 00, 01, 10 et 11)

  • x particules = 2x valeurs possibles (de 0 à 2x-1)

La mémoire étant une suite de bits, la capacité de représentation n'est dépendante que de la taille de la mémoire disponible :

Pour représenter un objet qui peut prendre X valeurs différentes, il nous faudra utiliser nécessairement un nombre Y de bits tel que X ≤ 2Y. Pour représenter Z objets pouvant prendre chacun X valeurs différentes, il nous faudra utiliser nécessairement un nombre Y de bits tel que X ≤ 2YZ, etc.

Nous pouvons voir ici qu'à moins de disposer d'une capacité mémoire infinie, il nous sera impossible de représenter complètement l'espace des nombres entiers, rationnels, réels, complexes, etc.

Remarque

En fait, quel que soit le langage de programmation utilisé, le programmeur devra toujours représenter les ensembles infinis et/ou indénombrables du monde réel par des ensembles finis et dénombrables. Les erreurs de programmation issues d'un oubli de cet axiome sont très fréquentes. Elles peuvent ne se révéler que dans des situations exceptionnelles, mais leurs conséquences peuvent être très importantes.

Pour des raisons de visibilité et pour faciliter la représentation des données, nous utiliserons assez souvent la base hexadécimale (base 16) pour représenter les valeurs. Dans cette base, les chiffres sont (par valeur croissante) : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Le gros avantage de cette base par rapport à la base décimale est que chaque nombre binaire de 4 bits peut être représenté par un seul chiffre hexadécimal.

La valeur d'un nombre peut être calculée comme étant la somme du produit de chaque chiffre par une puissance de la base. Par exemple, la valeur du nombre de 3 chiffres C2C1C0 exprimé en base b , sera C2 * b2 + C1 * b1 + C0 * b0. Chaque chiffre a donc un poids différent dans la somme.

Définition

Par convention, on dira que les chiffres les plus à gauche sont de poids fort et les chiffres les plus à droite sont de poids faible.

Définition

En parlant d'une partie d'un nombre, on parlera de partie haute pour la partie la plus à gauche et de partie basse pour la partie la plus à droite.

Exemple

Par exemple, dans la base hexadécimale, pour un nombre de valeur : F9E8D7C6, nous appellerons partie haute de 8 bits la valeur F9, partie haute de 16 bits la valeur F9E8, partie haute de 24 bits, la valeur F9E8D7, partie basse de 8 bits la valeur C6, partie basse de 16 bits la valeur D7C6 et partie basse de 24 bits la valeur E8D7C6.

Explication

On utilisera ainsi les termes poids fort, poids faible, partie haute, partie basse pour désigner les sous-parties du contenu d'une case mémoire. Les tailles de cases mémoires ou de partie de case mémoire les plus utilisées sont :

1.- L'octet : c'est une case mémoire de 8 bits

2.- Le mot de 16 bits : une suite de 2 octets

3.- Le mot de 24 bits : une suite de 3 octets

4.- Le mot de 32 bits : une suite de 4 octets

5.- Le mot de 64 bits : une suite de 8 octets