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).

\[ a\,\mathsf{op}\,b \Rightarrow a - b\,\mathsf{op}\,0 \]

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\)