Title: Op
1Opérations sur les données
- Laurent JEANPIERRE ltjeanpl_at_iutc3.unicaen.frgt
- Daprès le cours de Pascal FOUGERAY
- IUT de CAEN Campus 3
2Contenu 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
3LUAL 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
4Contenu 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
5UAL 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
6UAL Arithmétique (2)
- Multiplications non signées
- mulb v AX ? AL v
- mulw v EAX ? AX v
- mull v EDXEAX ? EAX v
- Multiplications signées
- imulb v AX ? AL v
- imulw v EAX ? AX v
- imull v EDXEAX ? EAX v
7UAL Arithmétique (3)
- Divisions non signées
- divb v AL ? AX / v, AH Reste
- divw v AX ? EAX / v, DX Reste
- divl v EAX ? EDXEAX / v, EDX Reste
- Divisions signées
- idivb v AL ? AX / v, AH Reste
- idivw v AX ? EAX / v, DX Reste
- idivl v EAX ? EDXEAX / v, EDX Reste
- Attention Diviser par 0 déclenche
linterruption logicielle n 0 (division /0)
8UAL 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
9UAL 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
10Contenu 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
11UAL Opérations binaires
12UAL Opérations binaires (2)
- Rotations à travers la retenue
- rcl
- rcr
13UAL 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
14Contenu 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
15Lunité 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 dinterruption (matérielle)
- Son propre séquenceur (exécution // processeur)
- Existe en deux exemplaires
- Depuis le Pentium Pro
- ? Calculs parallèles
16FPU 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)
17FPU Données recevables
- Lors des échanges avec le processeur
Donnée Bits Possibilités
Entier word 16 -32768 à 32767
Entier court 32 -2.109 à 2.109
Entier long 64 -9.1018 à 9.1018
Réel court 32 8,43.10-37 à 3,37.1038
Réel long 64 4,19.10-307 à 1,67.10308
Réel temporaire 80 3,4.10-4392 à 1,2.104932
BCD 80 999 999 999 999 999 999
18FPU Réels spéciaux
- Normalement 1 réel
- Signe 1 bit
- Exposant 15 bits, biaisé (32767)
- Mantisse normalisée 64 bits (1,xxxxxxxx)
- Zero 0/1 00 00 0 ou -0
- Infini 0/1 11 100 8 ou -8
- NaN 0/1 11
- Mantisse ? 100
- Not a Number une erreur sest produiteexemple
division par 0
19FPU Instructions
- Environ 90 instructions ?
- Transfert de données
- Lecture/écriture/échange
- Opérations arithmétiques
- ,-,,/,exp,log,v, mod, abs
- Opérations trigonométriques
- sin,cos,tan,atan
- Opérations de contrôle
- init, nop, save/restore registres spéciaux
20FPU instructions (2)
- Format des instructions
- Lettre f
- Mnémonique FPU
- Taille dopération (sauf entre registres)
- Tailles dopérations
- S flottant 32 bits / entier 16 bits
- L flottant 64 bits / entier 32 bits
- T flottant 80 bits
- Q entier 64 bits
21Contenu 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
22FPU 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
23FPU 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)
24FPU Opérations de transfert (3)
- Empiler une constante
- fldz 0
- fld1 1
- fldpi p
- fldl2t log2 10
- fldl2e log2 e
- fldlg2 log10 2
- fldle2 ln 2
25Contenu 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
26FPU 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) ?????
27FPU 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
28FPU 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 stst(1)
- fimulq v2,st(3) st(3) ? st(3) v2 (entier 64b)
29FPU 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)
30FPU Arithmétique (5)
- fabs valeur absolue
- fabs st ? abs(st)
- fchs opposé
- fchs st ? -st
- fsqrt racine carrée
- fsqrt st ? v(st)
- fprem1 modulo
- fprem1 st ? st st1 (reste de la division)
- frndint partie entière
- frndint st ? st
31Contenu 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
32FPU 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)
33FPU 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
34FPU 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
35FPU Comparaisons (4)
- ftst compare à 0
- ftst compare st(0) à 0
- Dautres instructions existent
- Principalement sur la gestion des NaNs / 8
- Ce nest 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
36Contenu 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
37FPU 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)
38FPU Trigonométrie (2)
- fptan remplace st par tan(st) et empile 1
- fldl alpha
- fptan
- ? st1.0 et st(1)tan(alpha)
- fpatan calcule atan(st(1)/st)
- fldl y
- fldl x
- fpatan
- ? stangle (x,y)
39FPU 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(1st)
- f2xm1 remplace st avec (2st - 1)
40FPU calculs avancés (2)
- fscale multiplie par une puissance de 2
- fldl abc
- fldl xyz
- fscale
- ? st(0) xyz 2abc
- ? st(1) abc
41Conclusion
- 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 !