Vous êtes sur la page 1sur 1

Carry et Overflow

L’unité arithmétique et logique fait, entre autres, des additions et des soustractions sur des entiers.

A
R
B

OVF
CY
L’ALU ne sait pas si on travaille en entiers signés ou pas, elle effectue les opérations binaires et affecte CY et OVF en fonction
du résultat.
Si on travaille en entiers non signés, seule CY a de l’intérêt, elle indique que l’opération donne un résultat trop grand par
rapport au nombre de bits de l’ALU.

1111 0000 Dans le cas d’une soustraction, la retenue


- 0001 (borrow) est mise à 1 si l’opérande déduite est la
+ 0001
plus grande des deux.
CY = 1 0000 CY = 1 1111

Si on travaille en entiers signés, seule OVF a de l’intérêt, elle indique que la somme de 2 nombres de même signe donne un
résultat de signe opposé.
Remarques :
1. La soustraction d’un nombre > 0 revient à l’addition d’un nombre < 0 et inversement.
2. L’addition de 2 nombres de signes opposés n’affecte jamais OVF.

0011 +3 1000 -8 1111 -1

+ 0111 +7 + 1000 -8 + 0111 +7

OVF = 1 1010 -6 OVF = 1 0000 0 OVF = 0 0110 6

Calcul de OVF (1ère méthode)


On dresse la table de vérité de OVF en fonction des bits de signes des opérandes et du résultat :
An-1 Bn-1 Rn-1 OVF
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
OVF = An-1.Bn-1.Rn-1 + An-1.Bn-1.Rn-1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0

Calcul de OVF (2ème méthode)


On fait intervenir l’avant dernière retenue et la dernière : OVF = CYn-1 + CYn

1 1 0 0
11 -1 01 +1 11 -1 10 -2

+ 01 +1 + 01 +1 + 10 -2 + 01 +1

1 00 0 0 10 -2 1 01 1 0 11 -1

OVF = 0 OVF = 1 OVF = 1 OVF = 0

Vous aimerez peut-être aussi