Opérations sur les données Laurent JEANPIERRE IUT de CAEN – Campus 3
Unité Arithmétique et Logique (UAL/ALU) - Opérations arithmétiques
- Opérations binaires
Unité Flottante (FPU) - Opérations de transfert
- Opérations arithmétiques
- Opérations de comparaison
- Opérations de trigonométrie
L’UAL : Introduction Unité Arithmétique et Logique (ALU) Se charge des calculs Utilise les registres - Généraux : EAX,EBX,ECX,EDX,ESI,EDI
- Pointeurs : ESP, EBP
Existe en 2 exemplaires - Depuis le 80486
- Permet les calculs en parallèle
Contenu du cours Unité Arithmétique et Logique (UAL/ALU) - Opérations arithmétiques
- Opérations binaires
Unité Flottante (FPU) - Opérations de transfert
- Opérations arithmétiques
- Opérations de comparaison
- Opérations de trigonométrie
UAL : Arithmétique Additions : - add s,d : d d + s
- adc s,d : d d + s + C (bit de retenue)
- inc d : d d + 1
Soustractions : - sub s,d : d d – s
- sbb s,d : d d – s – C (bit de retenue)
- dec d : d d – 1
Negation :
UAL : Arithmétique (2) Multiplications non signées : - mulb v : AX AL * v
- mulw v : EAX AX * v
- mull v : EDX:EAX EAX * v
Multiplications signées : - imulb v : AX AL * v
- imulw v : EAX AX * v
- imull v : EDX:EAX EAX * v
UAL : Arithmétique (3) Divisions non signées : - divb v : AL AX / v, AH = Reste
- divw v : AX EAX / v, DX = Reste
- divl v : EAX EDX:EAX / v, EDX = Reste
Divisions signées : - idivb v : AL AX / v, AH = Reste
- idivw v : AX EAX / v, DX = Reste
- idivl v : EAX EDX:EAX / v, EDX = Reste
Attention : Diviser par 0 déclenche l’interruption logicielle n° 0 (division /0)
UAL : Arithmétique (4) Décalages non signés : - shl v,1 : v v * 2
- shl v,$n : v v * 2n, n sur 8 bits
- shl v, %CL : v v * 2CL
- shr v,1 : v v / 2
- shr v,$n : v v / 2n, n sur 8 bits
- shr v, %CL : v v / 2CL
UAL : Arithmétique (5) Décalages signés : - sal v,1 : v v * 2
- sal v,$n : v v * 2n, n sur 8 bits
- sal v, %CL : v v * 2CL
- sar v,1 : v v / 2
- sar v,$n : v v / 2n, n sur 8 bits
- sar v, %CL : v v / 2CL
Contenu du cours Unité Arithmétique et Logique (UAL/ALU) - Opérations arithmétiques
- Opérations binaires
Unité Flottante (FPU) - Opérations de transfert
- Opérations arithmétiques
- Opérations de comparaison
- Opérations de trigonométrie
UAL : Opérations binaires
UAL : Opérations binaires (2) Rotations à travers la retenue :
UAL : Opérations binaires (3) Opérations bit à bit - and s,d : d d ET s
- andb $0b00001000,%al # isole le bit 3 de AL
- or s,d : d d OU s
- orw $0x0F00,%bx # positionne les bits 8-11
- xor s,d : d d OU_EXCLUSIF s
- xorb $0b1111, %al # inverse les bits 0-3
- not d : d NON d
- notl %ecx # inverse chaque bit de ECX
Contenu du cours Unité Arithmétique et Logique (UAL/ALU) - Opérations arithmétiques
- Opérations binaires
Unité Flottante (FPU) - Opérations de transfert
- Opérations arithmétiques
- Opérations de comparaison
- Opérations de trigonométrie
L’unité flottante : introduction Unité de calcul flottant (FPU) Accélère les calculs en virgule flottante Dispose de : - Ses propres instructions
- Ses propres registres
- Sa propre ligne d’interruption (matérielle)
- Son propre séquenceur (exécution // processeur)
Existe en deux exemplaires - Depuis le Pentium Pro
- Calculs parallèles
FPU : Registres 8 registres de travail - st ou st(0), st(1)..st(7)
- Sur 80 bits, avec 64 bits de mantisse
- Organisés en pile : dernière valeur lue = st
Registre d’état (16 bits) Registre de contrôle (16 bits) Registres à usage interne - Tag Word (16 bits)
- Instruction/Operand Pointer (2x 48 bits)
FPU : Données recevables Lors des échanges avec le processeur :
FPU : Réels spéciaux Normalement 1 réel = - Signe : 1 bit
- Exposant : 15 bits, biaisé (+32767)
- Mantisse normalisée : 64 bits (1,xxxx…xxxx)
Zero = 0/1 0…0 0…0 : +0 ou -0 Infini = 0/1 1…1 10…0 : +∞ ou -∞ NaN = 0/1 1…1 *…* - Mantisse ≠ 10…0
- Not a Number : une erreur s’est produite exemple : division par 0
Environ 90 instructions ≠ : Transfert de données Opérations arithmétiques - +,-,*,/,exp,log,√, mod, abs
Opérations trigonométriques Opérations de contrôle - init, nop, save/restore + registres spéciaux
FPU : instructions (2) Format des instructions : - Lettre « f »
- Mnémonique FPU
- Taille d’opération (sauf entre registres)
Tailles d’opérations : - S : flottant 32 bits / entier 16 bits
- L : flottant 64 bits / entier 32 bits
- T : flottant 80 bits
- Q : entier 64 bits
Contenu du cours Unité Arithmétique et Logique (UAL/ALU) - Opérations arithmétiques
- Opérations binaires
Unité Flottante (FPU) - Opérations de transfert
- Opérations arithmétiques
- Opérations de comparaison
- Opérations de trigonométrie
FPU : Opérations de transfert Empiler une valeur : Dépiler une valeur - fstp : un réel
- fistp : un entier
- fbstp : un BCD
FPU : Opérations de transfert (2) Lire une valeur (sans dépiler) - fst : un réel
- fist : un entier
Échanger deux registres - fxch : échange st(1) et st(0)
- fxch st(i) : échange st(i) et st(0)
FPU : Opérations de transfert (3) Empiler une constante : - fldz : +0
- fld1 : +1
- fldpi : +π
- fldl2t : +log2 10
- fldl2e : +log2 e
- fldlg2 : +log10 2
- fldle2 : +ln 2
Contenu du cours Unité Arithmétique et Logique (UAL/ALU) - Opérations arithmétiques
- Opérations binaires
Unité Flottante (FPU) - Opérations de transfert
- Opérations arithmétiques
- Opérations de comparaison
- Opérations de trigonométrie
FPU : Arithmétique fadd : addition - faddl v1 : st st + v1 (double, 64 bits)
- fadds v1,st(1) : st(1) st(1) + v1 (float, 32b)
- fadd st,st(2) : st st + st(2)
faddp : addition + dépile
FPU : Arithmétique (2) fiadd : addition avec un entier - faddl v1 : st st + v1 (32 bits)
- faddq v1,st(1) : st(1) st(1) + v1 (64 bits)
fsub(p), fsubr(p) : soustraction - fsub v1 : st st – v1
- fsub st,st(1) : st(1) st(1) – st
- fsubr st,st(1) : st(1) st – st(1)
- fsubp : remplace st,st(1) par st-st(1)
- fsubrp : remplace st,st(1) par st(1)-st
FPU : Arithmétique (3) fisub, fisubr : soustraction avec un entier - fisubs v1 : st st – v1 (16 bits)
- fisubrl v1 : st(1) v1 (32 bits) – st(1)
fmul, fmulp, fimul : multiplication - fmul st(1),st(2) : st(2) st(2) * st(1)
- fmult v1 : st st * v1 (réel 80 bits)
- fmulp : remplace st,st(1) par st*st(1)
- fimulq v2,st(3) : st(3) st(3) * v2 (entier 64b)
FPU : Arithmétique (4) fdiv, fdivp, fidiv : division - fdiv st(1),st(2) : st(2) st(2) / st(1)
- fdivl v1 : st st / v1 (réel 64 bits)
- fdivp : remplace st,st(1) par st/st(1)
- fidivl v2,st(3) : st(3) st(3) / v2 (entier 32b)
fdivr, fdivrp, fidivr : division inversée - fdivr st(1),st(2) : st(2) st(1) / st(2)
- fdivrl v1 : st v1 (réel 64 bits) / st
- fdivrp : remplace st,st(1) par st(1)/st(0)
- fidivrs v2,st(3) : st(3) v2(entier 16b) / st(3)
FPU : Arithmétique (5) fabs : valeur absolue fchs : opposé fsqrt : racine carrée fprem1 : modulo frndint : partie entière
Contenu du cours Unité Arithmétique et Logique (UAL/ALU) - Opérations arithmétiques
- Opérations binaires
Unité Flottante (FPU) - Opérations de transfert
- Opérations arithmétiques
- Opérations de comparaison
- Note sur la précision des calculs
FPU : Comparaisons - fcom : compare st et st(1)
- fcoml v1 : compare st et v1 (double)
- fcom st(3) : compare st et st(3)
fcomp : fcom + dépile - fcomp : compare st et st(1) + dépile st
- fcomlp v1 : compare st et v1 (double) + dépile st
- fcomp st(3) : compare st et st(3) + dépile st
fcompp : fcom + dépile 2 fois - fcompp : compare st et st(1) + dépile st et st(1)
FPU : Comparaisons (2) fcomi : compare et modifie les flags CPU - fcomi : compare st et st(1)
- fcomi st(3) : compare st et st(3)
fcomip : fcomi + dépile - fcomip : compare st et st(1) + dépile st
- fcomip st(3) : compare st et st(3) + dépile st
FPU : Comparaisons (3) ficom : compare avec un entier et modifie les flags FPU - ficoml v1 : compare st et v1 (double)
- ficoms v2 : compare st et v2 (float)
ficomp : ficom + dépile - ficompl v1 : compare st et v1 (double) + dépile st
- ficomps v2 : compare st et v2 (float) + dépile st
FPU : Comparaisons (4) ftst : compare à 0 D’autres instructions existent… - Principalement sur la gestion des NaNs / ∞
- Ce n’est pas le but de ce cours…
Note finale : - Les flags FPU sont compatibles avec les flags CPU
- fstsw %ax : range l’état du FPU dans AX
- sahf : copie AH (flags FPU) dans EFLAGS
Contenu du cours Unité Arithmétique et Logique (UAL/ALU) - Opérations arithmétiques
- Opérations binaires
Unité Flottante (FPU) - Opérations de transfert
- Opérations arithmétiques
- Opérations de comparaison
- Opérations de trigonométrie
FPU : Trigonométrie fsin : remplace st par sin(st) fcos : remplace st par cos(st) fsincos : remplace st par sin(st) et empile cos(st) - fldl alpha
- fsincos
- st(0)=cos(alpha)
- st(1)=sin(alpha)
FPU : Trigonométrie (2) fptan : remplace st par tan(st) et empile 1 - fldl alpha
- fptan
- st=1.0 et st(1)=tan(alpha)
fpatan : calcule atan(st(1)/st) - fldl y
- fldl x
- fpatan
- st=angle (x,y)
FPU : calculs avancés fyl2x : remplace st,st(1) par st(1)*log2(st) - fldl abc
- fldl xyz
- fyl2x
- st(0) = abc * log2(xyz)
fyl2x1 : idem avec st(1)*log2(1+st) f2xm1 : remplace st avec (2st - 1)
FPU : calculs avancés (2) fscale : multiplie par une puissance de 2 - fldl abc
- fldl xyz
- fscale
- st(0) = xyz * 2[abc]
- st(1) = abc
Conclusion Un processeur CISC sait faire beaucoup trop de choses… inutiles ou presque. Rappel : - 20% des opérations
- Utilisées dans 80% des cas
Il ne faut pas savoir toutes les instructions par cœur… … mais savoir les retrouver quand on en a besoin !
Do'stlaringiz bilan baham: |