PPTX

publicité
1
CHAPITRE 5
Les nombres entiers
2
Les entiers
• Les données de types entiers correspondent à l’ensemble
infini des nombres signés ℤ = … , −2, −1, 0, 1, 2, …
• Impossible de représenter un ensemble infini dans un
ordinateur comprenant un nombre fini d’espaces
• Les entiers (int) représentent un sous-ensemble
−𝑚, … , −1, 0, 1, … , 𝑛
• « m » est la valeur du plus petit entier négatif
• « n » est la valeur du plus grand entier positif
• Dépends du nombre de bits disponibles
3
Les entiers signés
• Représentation possible sur 𝑙 bits
• 1 bit pour le signe
• 𝑙 − 1 bits pour la valeur absolue du nombre entier
𝑙=3
+= 0; −= 1
2 représentations
pour le 0
000
+0
001
+1
010
+2
011
+3
100
-0
101
-1
110
-2
111
-3
4
Les entiers signés
• On doit prendre en compte la facilité avec laquelle les
opérations mathématiques peuvent être implémentées.
+
1
1
0
0
0
1
1
1
1
−2 + 1 = −3!
000
+0
001
+1
010
+2
011
+3
100
-0
101
-1
110
-2
111
-3
5
Les entiers signés
• On peut régler le problème en examinant le bit de signe
• Si les 2 opérandes sont de signe contraire
• Soustraire à la plus grande valeur absolue la plus petite
• Le signe du résultat est celui de la plus grande valeur (prise en absolue)
2 + −3 =
−1 + 2
3 -
2
000
+0
001
+1
=
1
010
+2
=
-1
011
+3
=
2 -
100
-0
=
1
101
-1
110
-2
111
-3
Ce n’est pas très pratique!
1
6
Complément à 2
• On peut représenter un nombre en utilisant l’arithmétique
modulo 2𝑙 , où 𝑙 indique le nombre de bits employés.
• 𝑥 = 𝑥 + 2𝑙
• −𝑥 = −𝑥 + 2𝑙 → −𝑥 = 2𝑙 − 𝑥
Nombre2
Valeur
−𝑥 = 2𝑙 − 𝑥
Nombre2
Valeur
0000
+0
16 − 1 = 15
1111
-1
𝑙=4
0001
+1
16 − 2 = 14
1110
-2
𝑚 = 2𝑙−1
0010
+2
16 − 3 = 13
1101
-3
0011
+3
16 − 4 = 12
1100
-4
0100
+4
16 − 5 = 11
1011
-5
0101
+5
16 − 6 = 10
1010
-6
0110
+6
16 − 7 = 9
1001
-7
0111
+7
16 − 8 = 8
1000
-8
𝑛=
2𝑙−1
−1
7
Complément à 2
• Implication pour l’addition
5 + (−6)
0101
+ 1010
1111
(-1)
−5 + 6
1011
+ 0110
1 0001
1
8
Complément à 2
• Inverse d’un nombre
• Inverser chaque bit et ajouter 1 au résultat
5 −5
5 en binaire :
0101
Inverse les bits :
1010
Ajoute 1 :
1011
9
Complément à 2
• Toute valeur signée hexadécimale
• Est positive si débute par [0-7]
• Est négative si débute par [8-F]
• La complémentarité à 2 fonctionne pour n’importe quelle
base
10
Instructions arithmétiques
• Toutes les instructions peuvent prendre comme 2e opérande
• Un registre
• Une valeur représentée sur 13 bits (−4096 ≤ 𝑥 ≤ 4095)
• Lorsque l’instruction se termine par cc, le registre des codes
conditions est mis à jour
• Si le résultat est zéro, le bit Z est mis à 1
• Si le résultat est négatif, le bit N est mis à 1
• Nous reviendrons sur les bits V et C plus tard!
11
Instructions arithmétiques
• Addition
add
rs1, {rs2 | imm13 }, rd
addc
rs1, {rs2 | imm13 }, rd
addccc
rs1, {rs2 | imm13 }, rd
inc
{imm13,} rs1
inccc
{imm13,} rs1
• Soustraction
sub
rs1, {rs2 | imm13 }, rd
subc
rs1, {rs2 | imm13 }, rd
subccc
rs1, {rs2 | imm13 }, rd
dec
{imm13,} rs1
deccc
{imm13,} rs1
12
Instructions arithmétiques
• Multiplication
mulx
rs1, {rs2 | imm13 }, rd
udivx
rs1, {rs2 | imm13 }, rd
sdivx
rs1, {rs2 | imm13 }, rd
neg
rs1
neg
rs1, rs2
• Division
• Négation
13
Débordement de capacité (v)
• Le résultat de l’opération ne tient pas sur 𝑙 bits
• Il se produit un débordement dans une addition si les
opérandes ont le même signe, mais que le résultat est de
signe contraire
𝑙=4
+
0111
7
0110
6
1101
-3?
• Il ne peut y avoir de débordement si les opérandes sont de
signes contraires!
14
Débordement de capacité
• Il se produit un débordement dans une soustraction si les
opérandes ont des signes différents et que le résultat est de
signe contraire au premier opérande
• Une soustraction revient à faire une addition avec le
complément à deux du second opérande
𝑙=4
-
0111
7
1101
-3
1101
-3
0111
7
1010
-6?
0110
6?
• Il ne peut y avoir de débordement si les opérandes sont de
mêmes signes!
15
Débordement de capacité
• Il peut se produire plus souvent des débordements avec une
multiplication (suite d’addition)
• mulx ne positionne pas les codes de condition
• Pour éviter les débordements, on suppose que les
opérandes tiennent sur 𝑙/2 bits
•
−2𝑙
2−1
× −2𝑙
2−1
=2
𝑙 2−1 + 𝑙 2−1
= 2𝑙−2 < 2𝑙−1 − 1
• On doit quelques fois vérifier si les valeurs tiennent sur 𝑙/2
16
Débordement de capacité
• Pour la division, il n’y a généralement pas de débordement
si tous les opérandes et le résultat tiennent sur 𝑙 bits
• Il y a une exception
• La division signée (sdivx) du plus petit entier négatif par −1
• Le processeur n’indique pas de débordement
• Le résultat est le plus petit entier négatif!
17
Report (c)
• Le report n’a de sens que
• Pour les additions et les soustractions sur 2𝑙 bits
• Pour des instructions s’opérant sur 𝑙 bits
• On calcule donc les résultats sur 𝑙 + 1 bits
• Si le résultat du bit le plus significatif
• Pour une addition, est à 1, il y a report
• Pour une soustraction, est à 0, il y a report
• Il n’y a jamais de report pour une multiplication ou une
division
18
Report
• Exemple avec un mot de 4 bits, addition de double-mot
C
0000
11110
27
0001
1011
+45
+0010
+1101
72
0011
1000
Instructions SPARC
• addcc
• addccc
• bvs
00111000
56!
01001000
72
0011
+1
0100
19
Report
• Exemple avec un mot de 4 bits, soustraction de double-mot
C
0000
10000
87
0101
0111
-41
-0010
-1001
46
0011
11110
Emprunt
Instructions SPARC
• subcc
• subccc
• bvs
00111110
62!
00101110
46
0011
-1
0010
20
Report
• Exemple avec un mot de 4 bits, soustraction (par l’addition
de l’inverse)
C
1010
01110
87
0101
0111
+(-41)
+1101
+0111
46
10010
01110
00101110
Le report est à 0!
46!
21
Report
• Sur le SPARC, addccc ne fonctionne pas pour des
opérandes de 64 bits
• L’addition s’effectue en 4 étapes
1. Effectuer l’addition des mots les moins significatifs, avec C et V;
2. Effectuer l’addition du mot le plus significatif du 2e opérande et de
C, avec C et V;
3. Effectuer l’addition du résultat et du mot le moins significatif, avec C
et V;
4. Vérifier s’il y a eu débordement
22
Report
𝑉2 𝐶2
+
𝑉1 𝐶1
𝑜𝑝1,2
𝑜𝑝1,1
𝑜𝑝2,2
𝑜𝑝2,1
𝑜𝑝1,2 + 𝑜𝑝2,2
𝑜𝑝1,1 + 𝑜𝑝2,1
𝑉3 𝐶3
=
𝐶𝐹𝑖𝑛𝑎𝑙 = 𝐶2 ∨ 𝐶3
𝑉𝐹𝑖𝑛𝑎𝑙 = 𝑉2 ⊕ 𝑉3
23
Multiplication non signée
• S’il n’existe pas d’instruction de multiplication, il faut la
simuler
• La façon intuitive, simple, inefficace
• Faire la sommation du multiplicande un certain nombre de fois
3 × 5 = 3 + 3 + 3 + 3 + 3 = 15
• Avec un décalage vers la gauche
• En binaire, multiplication par une puissance de 2!
24
Multiplication non signée
• 000001102 × 000001002 = 000110002 = 6 × 4 = 24!
• 13 × 11 = 13 × 23 + 21 + 20
• 1310 = 000011012
01101000
1101 × 1000
+ 00011010
1101 × 0010
+ 00001101
1101 × 0001
= 10001111
143
25
Multiplication non signée
• Revient à faire la multiplication de façon usuelle
• 13 × 11 = 143
1 1 0 1
×
1 0 1 1
1 1 0 1
1 1 0 1
0 0 0 0
+
1 1 0 1
= 1 0 0 0 1 1 1 1
26
Multiplication non signée
• 13 × 11 = 143
• 13 est le multiplicande, 11 le multiplicateur
• L’algorithme est donc
• Initialiser le mot le plus significatif du produit à 0
• Initialiser le mot le moins significatif du produit avec le multiplicateur
Produit :
0000
1011
27
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
1. Si le bit le moins significatif du mot le moins significatif du produit vaut 1,
ajouter le multiplicande au mot le plus significatif du produit, sinon ajouter
0
• Conserver le bit C de cette addition
Produit :
0000
1011
1101
Produit 2 :
1101
1011
C=0
28
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
2. Décaler le mot le plus significatif du produit d’une position vers la droite.
• Conserver la valeur du bit perdu
• La valeur du bit C précédent est insérée à gauche.
Produit :
1101
1011
C=0
Produit 2 :
0110
1011
B=1
29
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
3. Décaler le mot le moins significatif du produit d’une position vers la droite.
• Introduire à gauche le bit perdu de l’étape précédente.
Produit :
0110
1011
Produit 2 :
0110
1101
B=1
30
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
1. Si le bit le moins significatif du mot le moins significatif du produit vaut 1,
ajouter le multiplicande au mot le plus significatif du produit, sinon ajouter
0
• Conserver le bit C de cette addition
Produit :
0110
1101
1101
Produit 2 :
0011
1101
C=1
31
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
2. Décaler le mot le plus significatif du produit d’une position vers la droite.
• Conserver la valeur du bit perdu
• La valeur du bit C précédent est insérée à gauche.
Produit :
0011
1101
C=1
Produit 2 :
1001
1101
B=1
32
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
3. Décaler le mot le moins significatif du produit d’une position vers la droite.
• Introduire à gauche le bit perdu de l’étape précédente.
Produit :
1001
1101
Produit 2 :
1001
1110
B=1
33
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
1. Si le bit le moins significatif du mot le moins significatif du produit vaut 1,
ajouter le multiplicande au mot le plus significatif du produit, sinon ajouter
0
• Conserver le bit C de cette addition
Produit :
1001
1110
0000
Produit 2 :
1001
1110
C=0
34
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
2. Décaler le mot le plus significatif du produit d’une position vers la droite.
• Conserver la valeur du bit perdu
• La valeur du bit C précédent est insérée à gauche.
Produit :
1001
1110
C=0
Produit 2 :
0100
1110
B=1
35
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
3. Décaler le mot le moins significatif du produit d’une position vers la droite.
• Introduire à gauche le bit perdu de l’étape précédente.
Produit :
0100
1110
Produit 2 :
0100
1111
B=1
36
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
1. Si le bit le moins significatif du mot le moins significatif du produit vaut 1,
ajouter le multiplicande au mot le plus significatif du produit, sinon ajouter
0
• Conserver le bit C de cette addition
Produit :
0100
1111
1101
Produit 2 :
0001
1111
C=1
37
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
2. Décaler le mot le plus significatif du produit d’une position vers la droite.
• Conserver la valeur du bit perdu
• La valeur du bit C précédent est insérée à gauche.
Produit :
0001
1111
C=1
Produit 2 :
1000
1111
B=1
38
Multiplication non signée
• L’algorithme est donc
• Répéter n fois (n = nombre de bits, ici 4)
3. Décaler le mot le moins significatif du produit d’une position vers la droite.
• Introduire à gauche le bit perdu de l’étape précédente.
Produit :
1000
1111
Produit 2 :
1000
1111
On obtient 143!
B=1
39
Multiplication signée
• On peut faire la multiplication de deux entiers signés en
utilisant l’algorithme précédent, modifié
• On considère le multiplicateur comme un entier positif
• Dans la dernière itération, l’addition de la 1re étape est remplacée par une
soustraction
• Pour être conforme avec la représentation complément à 2
• Le bit de report (c) est remplacé par l’expression 𝑛 ⊕ 𝑣
• Permet d’étendre le bit de signe dans le cas où le multiplicande est un
entier négatif!
40
Division non signée
• Similaire à l’algorithme de la multiplication
• L’ordre des étapes est inversé
• On décale à gauche au lieu de décaler à droite
• Au lieu d’une addition, on fait une soustraction
41
Division non signée
• L’algorithme final est
• Initialiser le quotient avec le dividende
• Initialiser le reste à 0
• Répéter n fois (n = nombre de bits)
1. Décaler d’une position vers la gauche la valeur du quotient.
• Le bit perdu est conservé pour l’étape suivante
2. Décaler d’une position vers la gauche la valeur du reste
• Le bit le moins significatif est remplacé par la valeur du bit perdu précédent
3. Soustraire le diviseur du reste
4. Si le résultat de la soustraction est négatif, mettre le bit le moins
significatif du quotient à 0 et additionner le diviseur au reste, sinon mettre
le bit le moins significatif du quotient à 1.
42
Division signée
• On utilise l’algorithme précédent, en tenant compte du signe
des opérandes et en effectuant les opérations avec les
valeurs absolues des opérandes
• Si les opérandes sont du même signe, le quotient est positif
• Si les opérandes sont de signe contraire, le quotient est négatif
• Le calcul du reste est sujet à controverse
𝑛÷𝑚= 𝑛 𝑚
17 ÷ 5 = 3 et − 17 ÷ 5 = −4
17 𝑚𝑜𝑑𝑢𝑙𝑜 5 = 2 et − 17 𝑚𝑜𝑑𝑢𝑙𝑜 5 = 3
Téléchargement