Généralités

Il est parfois nécessaire pour un programmeur de décrire en termes de bits la structure d'une ressource matérielle de la machine. Un exemple typique est la programmation système qui nécessite de manipuler des registres particuliers de la machine. Par exemple, dans le manuel du MC 68030 de Motorola, le registre d'état est ainsi décrit :
-
bit 0 : carry ;
-
bit 1 : overflow ;
-
bit 2 : zéro ;
-
bit 3 : négatif ;
-
bit 4 : extension ;
-
bits 5-7 : inutilisés ;
-
bits 8-10 : masque des interruptions ;
-
bit 11 : inutilisé ;
-
bits 12-13 : niveau de privilège ;
-
bits 14-15 : état des traces.

Il existe dans le langage C un moyen de réaliser de telles descriptions, à l'aide du concept de structure. En effet, dans une déclaration de structure, il est possible de faire suivre la définition d'un membre par une indication du nombre de bits que doit avoir ce membre. Dans ce cas, le langage C appelle ça un champ de bits.

Le registre d'état du MC 68030 peut se décrire ainsi :

struct sr
   {
   unsigned int trace : 2;
   unsigned int priv : 2;
   unsigned int : 1;            /*   inutilisé   */
   unsigned int masque : 3;
   unsigned int : 3;            /*   inutilisé   */
   unsigned int extend : 1;
   unsigned int negative : 1;
   unsigned int zero : 1;
   unsigned int overflow : 1;
   unsigned int carry : 1;
   };
On voit que le langage C accepte que l'on ne donne pas de nom aux champs de bits qui ne sont pas utilisés.

Matthieu Moy 2017-02-08