Opérations sur les données


Download 445 b.
Sana19.01.2018
Hajmi445 b.
#24874


Opérations sur les données


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’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 :

    • neg d : d  -d


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

  • Rotations :

    • rol :
    • ror :


UAL : Opérations binaires (2)

  • Rotations à travers la retenue :

    • rcl :
    • rcr :


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


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


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 :

    • fld : un réel
    • fild : un entier
    • fbld : un BCD
  • 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

    • fabs : st  abs(st)
  • fchs : opposé

    • fchs : st  -st
  • fsqrt : racine carrée

    • fsqrt : st  √(st)
  • fprem1 : modulo

  • frndint : partie entière

    • frndint : st  [st]


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 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)


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

    • 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


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 !



Download 445 b.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling