Le forçage à zéro consiste à mettre à zéro un ou plusieurs bits d'un mot binaire tout en conservant la valeur des autres.
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 :
0
dans le masque => le bit sera forcé à zéro ;1
dans le masque => le bit initial est conservé.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 = reg & 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é :
reg &= 0xF0;
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);
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);
Quel opérateur faut-il utiliser pour réaliser un forçage à zéro ?
Dans un forçage à zéro, les bits du masque qui sont à 1
permettent de ...
Dans un forçage à zéro, les bits du masque qui sont à 0
permettent de ...
Que vaut reg
après ces instructions ?
reg = 0xAA;
reg &= 0x0F;