Le forçage à un consiste à mettre un ou plusieurs bits d'un mot binaire à un tout en conservant la valeur des autres.
Le forçage à un se réalise grâce à un OU 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 initial est conservé ;1
dans le masque => le bit est forcé à un.Supposons que l'on souhaite forcer à un les 4 bits de poids faibles d'un mot de 8 bits. Le masque sera :
$$ masque = (0000~1111)_2 = (0F)_{16} $$
$$ \begin{array}[t]{r} b_7 & b_6 & b_5 & b_4 & \, & b_3 & b_2 & b_1 & b_0 & <= & mot \: initial \\ + \quad 0 & 0 & 0 & 0 & \, & 1 & 1 & 1 & 1 & <= & masque \\ \hline b_7 & b_6 & b_5 & b_4 & \, & 1 & 1 & 1 & 1 & <= & 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 | 0x0F;
Complétez le programme ci-dessous afin de forcer à un le bit de poids faible de la variable reg
:
// | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
unsigned char reg = 0xA2;
printf ("Avant : ");
affBin(reg);
// Forçage à un 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 à un les 5 bits de poids fort de la variable reg
:
// | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
unsigned char reg = 0xA2;
printf ("Avant : ");
affBin(reg);
// Forçage à un des 5 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 à un ?
Dans un forçage à un, les bits du masque qui sont à 1
permettent de ...
Dans un forçage à un, les bits du masque qui sont à 0
permettent de ...
Que vaut reg
après ces instructions ?
reg = 0xAA;
reg |= 0x0F;