410 likes | 520 Views
Opérations sur les données. Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3. Contenu du cours. Unité Arithmétique et Logique (UAL/ ALU ) Opérations arithmétiques Opérations binaires Unité Flottante ( FPU ) Opérations de transfert
E N D
Opérations sur les données Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3 Département Informatique
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 Département Informatique
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 Département Informatique
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 Département Informatique
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 : • neg d : d -d Département Informatique
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 Département Informatique
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) Département Informatique
0 C 7 6 5 4 3 2 1 0 0 7 6 5 4 3 2 1 0 C 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 Département Informatique
0 C 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 C 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 Département Informatique
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 Département Informatique
C 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 C UAL : Opérations binaires • Rotations : • rol : • ror : Département Informatique
C 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 C UAL : Opérations binaires (2) • Rotations à travers la retenue : • rcl : • rcr : Département Informatique
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 Département Informatique
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 Département Informatique
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 Département Informatique
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) Département Informatique
FPU : Données recevables Lors des échanges avec le processeur : Département Informatique
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 produiteexemple : division par 0 Département Informatique
FPU : Instructions Environ 90 instructions ≠ : • Transfert de données • Lecture/écriture/échange • Opérations arithmétiques • +,-,*,/,exp,log,√, mod, abs • Opérations trigonométriques • sin,cos,tan,atan • Opérations de contrôle • init, nop, save/restore + registres spéciaux Département Informatique
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 Département Informatique
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 Département Informatique
FPU : Opérations de transfert • Empiler une valeur : • fld : un réel • fild : un entier • fbld : un BCD • Dépiler une valeur • fstp : un réel • fistp : un entier • fbstp : un BCD Département Informatique
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) Département Informatique
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 Département Informatique
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 Département Informatique
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 ST(0) 3.14159 ST(0) 4.14159 faddp ST(1) 1.0 ST(1) 18.0 ST(2) 18.0 ST(2) ????? Département Informatique
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 Département Informatique
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) Département Informatique
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) Département Informatique
FPU : Arithmétique (5) • fabs : valeur absolue • fabs : st abs(st) • fchs : opposé • fchs : st -st • fsqrt : racine carrée • fsqrt : st √(st) • fprem1 : modulo • fprem1 : st st % st1 (reste de la division) • frndint : partie entière • frndint : st [st] Département Informatique
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 Département Informatique
FPU : Comparaisons • fcom : compare et modifie les flags FPU • 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) Département Informatique
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 Département Informatique
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 Département Informatique
FPU : Comparaisons (4) • ftst : compare à 0 • ftst : compare st(0) à 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 Département Informatique
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 Département Informatique
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) Département Informatique
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) Département Informatique
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) Département Informatique
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 Département Informatique
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 ! Département Informatique