Comparaison
Le mécanisme des flags que nous avons vu nous permettent de comparer deux nombres et d’implémenter les opérations suivantes :
- Egal :
==
- Différent :
!=
- Plus petit que :
<
- Plus petit ou égal :
<=
- Plus grand que :
>
- Plus grand ou égal :
>=
Pour comparer deux nombres, le microprocesseur effectue simplement une soustraction.
Il ignore le résultat et ne considère que les flags (N
, Z
, C
, V
).
Pour l’égalité “\(a = b\)”, on calcule \(a - b\) et on regarde le flag Z
(zéro).
Si le flag Z
est à 1, alors \(a - b = 0\), donc \(a = b\).
Si le flag Z
est à 0, alors \(a \neq b\).
Pour tester l’égalité, nous n’avons pas besoin de faire de différence entre les nombres signés et non signés.
Pour savoir si \(a < b\), on calcule \(a - b\). Si le résultat est négatif, ça veut dire que \(a\) est bien plus petit que \(b\). Si par contre le résultat est positif (ou zéro), c’est que \(a\) est plus grand ou égal à \(b\).
Nous devons considérer les nombres signées et les nombres non signées de
manière différentes. Pour des nombres non signés, nous ne pouvons
pas vraiment dire que le résultat est “négatif” ou “positif”, mais nous
pouvons savoir si il y a un un dépassement de capacité avec le flag C
.
Si C
est à 0, c’est qu’il y a eu un underflow et ça veut donc
dire que \(a < b\).
Pour les nombres signés, nous considérons les flags N
et V
.
Si le résultat de la soustraction est négatif (\(N = 1\)),
et qu’il n’y a pas eu de dépassement de capacité (\(V = 0\)),
alors nous pouvons dire que \(a < b\). De même, si le résultat est positif
(\(N = 0\)) mais qu’il y a eu un dépassement de capacité (\(V = 1\)),
ca veut dire que le résultat devrait plutôt être négatif et donc
aussi que \(a < b\).
Le tableau ci-dessous résume comment sont évaluées les différentes comparaisons avec des nombres non signés et des nombres signés :
Comparaison | Pour \(A\) et \(B\) non signés | Pour \(A\) et \(B\) signés |
---|---|---|
\(A = B\) | \(Z\) | \(Z\) |
\(A \neq B\) | \(\overline{Z}\) | \(\overline{Z}\) |
\(A < B\) | \(\overline{C}\) | \(N \oplus V\) |
\(A \leq B\) | \(\overline{C} \lor Z\) | \((N \oplus V) \lor Z\) |
\(A > B\) | \(C \land \overline{Z}\) | \((N = V) \land \overline{Z}\) |
\(A \geq B\) | \(C\) | \(N = V\) |