Cours 7.2. Forçage à zéro

Le forçage à zéro consiste à mettre à zéro un ou plusieurs bits d'un mot binaire tout en conservant la valeur des autres.

Masquage binaire, forçage à zéro

Fonctionnement

Le forçage à zéro se réalise grâce à un ET logique bit à bit entre le registre à forcer et un masque. Les bits du masque sont définis tels que :

Supposons que l'on souhaite forcer à zéro les 4 bits de poids faibles d'un mot de 8 bits. Le masque sera :

$$ masque = (1111~0000)_2 = (F0)_{16} $$

$$ \begin{array}[t]{r} b_7 & b_6 & b_5 & b_4 & \, & b_3 & b_2 & b_1 & b_0 & <= & mot \: initial \\ \& \quad 1 & 1 & 1 & 1 & \, & 0 & 0 & 0 & 0 & <= & masque \\ \hline b_7 & b_6 & b_5 & b_4 & \, & 0 & 0 & 0 & 0 & <= & résultat \end{array} $$

Ce principe s'appuie sur les relations suivantes de l'algèbre de Boole :

Le masque de cet exemple peut être appliqué à la variable reg grâce à l'instruction suivante :

resultat = donnee & 0xF0;

Si la donnée initiale est écrasée par le masquage, l'instruction peut être synthétisée grâce à un opérateur d'affection combiné :

donnée &= 0xF0;

Exercice 1

Complétez le programme ci-dessous afin de forcer à zéro le bit de poids faible de la variable reg :

// | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
unsigned char reg = 0xA3;
printf ("Avant  : ");
affBin(reg);

// Forçage à zéro du bit de poids faible
// COMPLETEZ ICI

// Affiche le résultat
printf ("Après  : ");
affBin(reg); 

Exercice 2

Complétez le programme ci-dessous afin de forcer à zéro les 3 bits de poids fort de la variable reg :

// | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
unsigned char reg = 0xA3;
printf ("Avant  : ");
affBin(reg);

// Forçage à zéro des 3 bits de poids forts
// COMPLETEZ ICI

// Affiche le résultat
printf ("Après  : ");
affBin(reg); 

Quiz

Quel opérateur faut-il utiliser pour réaliser un forçage à zéro ?

Vérifier Bravo ! Un forçage à zéro se fait avec un ET logigue bit à bit. Essaie encore ...

Dans un forçage à zéro, les bits du masque qui sont à 1 permettent de ...

Vérifier Bravo ! Les bits à un du masque permettent de conserver les bits initiaux, car en logique booléenne : \( x · 1 = x \). Essaie encore ...

Dans un forçage à zéro, les bits du masque qui sont à 0 permettent de ...

Vérifier Bravo ! Les bits à zéro du masque forcent à zéro, car en logique booléenne : \( x · 0 = 0 \). Essaie encore ...

Que vaut reg après ces instructions ?

reg = 0xAA;
reg &= 0x0F;
Vérifier Bravo ! Le masque force à zéro les 4 bits de poids fort. Essaie encore ...

Voir aussi


Dernière mise à jour : 12/10/2021