Informations pratiques
Dans les exercices, vous aurez à calculer le résultat d’une opération,
d’interpréter le résultat comme un nombre signé ou non signé et
d’évaluer les flags N, Z, C et V. Ce chapitre vous donne une
manière de procéder pour de telles opérations.
Voici un exemple d’exercice :
Exercice
Pour les opérations suivantes, calculez :
- l’état des flags
N,Z,CetV - le résultat de l’opération si on interprète ce résultat comme un nombre signé
- le résultat de l’opération si on interprète ce résultat comme un nombre non signé
On considère des nombres sur 8 bits.
- \(100 + 100\)
- \(130 - 40\)
- \(60\) + \(200\)
- \(128\) + \(128\)
Exercice 1
Le premier exercice consiste à calculer le résultat de l’opération \(100 + 100\).
Qu’on l’interprète en signé ou en non signé, le nombre \(100\) vaut toujours \(100\).
| Signé | Non Signé | |
|---|---|---|
| Opérande 1 (\(100\)) | \(100\) | \(100\) |
| Opérande 2 (\(100\)) | \(100\) | \(100\) |
| Résultat mathématique de d’addition | \(200\) | \(200\) |
| Résultat effectif | \(-56\) | \(200\) |
Le résultat de l’addition en nombres signés est \(200\), mais ce nombre est plus grand que le plus grand nombre signé sur 8 bits (qui est égal à \(127\)), le résultat effectif est donc \(200 - 256 = -(256-200) = -56\).
- Le résultat effectif de l’interprétation signée est négatit
(\(-56\)), donc le flag
Nest à 1. - Le résultat effectif n’est pas zéro, donc le flag
Zest à 0. - Le résultat effectif de l’interprétation non-signée correspond au
résultat mathématique de l’addition (\(200 = 200\)), donc le flag
Cest à 0 (pas de retenue). - Le résultat effectif de l’interprétation signée ne correspond
pas au résultat mathématique (\(-56 \ne 200\)), donc le flag
Vest à 1.
Le réponse à cet exercice est donc
N=1, Z=0, C=0, V=1, signé = -56, non signé = 200
Exercice 2
Le deuxième exercice consiste à calculer le résultat de l’opération \(130 - 40\).
Commençons par interpréter les deux opérandes comme des nombres signés et non signés:
\(130\) est plus grand que le plus grand nombre signé sur 8 bits (qui est égal à \(127\)), son interprétation est donc négative et sa valeur est \(130 - 256 = -(256 - 130) = -126\).
| Signé | Non Signé | |
|---|---|---|
| Opérande 1 (\(130\)) | \(-126\) | \(130\) |
| Opérande 2 (\(40\)) | \(40\) | \(40\) |
| Résultat mathématique de la soustraction | \(-166\) | \(90\) |
| Résultat effectif | \(90\) | \(90\) |
Le résultat de l’opération en nombres signés est \(-166\), mais ce nombre est plus petit que le plus petit nombre signé sur 8 bits (qui est égal à \(-128\)), le résultat effectif est donc \(-166 + 256 = 90\).
- Le résultat effectif de l’interprétation signée est positif, donc
le flag
Nest à 0. - Le résultat effectif n’est pas zéro, donc le flag
Zest à 0. - Le résultat effectif de l’interprétation non-signée correspond au
résultat mathématique, mais c’est une soustraction, donc le flag
Cest à 1 (pas d’emprunt). - Le résultat effectif de l’interprétation signée ne correspond
pas au résultat mathématique, donc le flag
Vest à 1.
Le réponse à cet exercice est donc
N=0, Z=0, C=1, V=1, signé = 90, non signé = 90
Exercice 3
Calculons maintenant le résultat de l’opération \(60 + 200\).
\(200\) est plus grand que le plus grand nombre signé sur 8 bits, sa valeur est \(200 - 256 = -(256 - 200) = -56\).
| Signé | Non Signé | |
|---|---|---|
| Opérande 1 (\(60\)) | \(60\) | \(60\) |
| Opérande 2 (\(200\)) | \(-56\) | \(200\) |
| Résultat mathématique de l’addition | \(4\) | \(260\) |
| Résultat effectif | \(4\) | \(4\) |
Le résultat de l’opération en nombres non-signés est \(260\), mais ce nombre est plus grand que le plus grand nombre non-signé sur 8 bits (qui est égal à \(255\)), le résultat effectif est donc \(260 - 256 = 4\).
- Le résultat effectif de l’interprétation signée est positif, donc
le flag
Nest à 0. - Le résultat effectif n’est pas zéro, donc le flag
Zest à 0. - Le résultat effectif de l’interprétation non-signée ne correspond
pas au résultat mathématique et c’est une addition, donc le flag
Cest à 1 (retenue). - Le résultat effectif de l’interprétation signée correspond au
résultat mathématique, donc le flag
Vest à 0.
Le réponse à cet exercice est donc
N=0, Z=0, C=1, V=0, signé = 4, non signé = 4
Exercice 4
Calculons maintenant le résultat de l’opération \(128 + 128\).
\(128\) est plus grand que le plus grand nombre signé sur 8 bits, sa valeur est \(128 - 256 = -(256 - 128) = -128\).
| Signé | Non Signé | |
|---|---|---|
| Opérande 1 (\(128\)) | \(-128\) | \(128\) |
| Opérande 2 (\(128\)) | \(-128\) | \(128\) |
| Résultat mathématique de l’addition | \(-256\) | \(256\) |
| Résultat effectif | \(0\) | \(0\) |
Le résultat de l’opération en nombres signés est \(-256\), mais ce nombre est plus petit que le plus petit nombre non-signé sur 8 bits, le résultat effectif est donc \(-256 + 256 = 0\). Le résultat de l’opération en nombres non-signés est \(256\), mais ce nombre est plus grand que le plus grand nombre non-signé sur 8 bits, le résultat effectif est donc \(256 - 256 = 0\).
- Le résultat effectif de l’interprétation signée est positif, donc
le flag
Nest à 0. - Le résultat effectif est égal à zéro, donc le flag
Zest à 1. - Le résultat effectif de l’interprétation non-signée ne correspond
pas au résultat mathématique et c’est une addition, donc le flag
Cest à 1 (retenue). - Le résultat effectif de l’interprétation signée ne correspond
pas au résultat mathématique, donc le flag
Vest à 1.
Le réponse à cet exercice est donc
N=0, Z=1, C=1, V=1, signé = 0, non signé = 0