Introduction à la programmation en assembleur (processeurs 64 bits de la famille 80x86)
11.4 Principales instructions de calcul
Syntaxe
  • fld, fst

    L'instruction fld (float load) permet d'empiler un nombre flottant dans la pile des registres. La lettre qui suit indique la taille de l'opérande : flds pour empiler un nombre flottant de 32 bits, fldl pour empiler un nombre flottant de 64 bits et fldt pour empiler un flottant de 80 bits. Lorqu'une valeur est empilée, elle est automatiquement convertie en nombre flottant de 80 bits. L'opérande qui suit la mnémonique fld, c'est à dire la valeur à empiler peut être soit un registre st(i) soit un emplacement en mémoire. fild et fist (avec « i » pour integer ) sont utilisés pour les conversions virgule flottante/entiers.

    L'instruction fst (float store) copie la valeur contenue dans le sommet de la pile, st(0) à l'emplacement donné en opérande. fstp réalise la même opération en dépilant le sommet de la pile.

Syntaxe
  • fadd, fsub, fmul, fdiv

    Ces instructions réalisent respectivement l'addition, la soustraction, la multiplication et la division de deux opérandes dont une au moins est un emplacement de la pile de registre, l'autre opérande étant soit un registre de la pile, soit un emplacement en mémoire. Lorsqu'une seule opérande est spécifiée, l'opération est réalisée entre l'opérande et le sommet de la pile st(0). Le suffixe « p » peut être ajouté pour permettre un post-dépilement des registres. Le suffixe « r » peut être ajouté aux mnémoniques fsub et fdiv afin d'inverser l'ordre des opérandes. Le résultat d'une opération est toujours empilé et se retrouve donc toujours dans %st(0).

    Ici aussi, les suffixes « s », « l » ou « t » peuvent être ajoutés pour spécifier la taille des nombres flottants.

Par exemple : « fdivrps diviseur » va prendre 32 bits à l'adresse symbolique « diviseur », convertir ce nombre flottant sur 80 bits, diviser cette valeur par le sommet de la pile, remplacer le sommet de la pile par le résultat de la division et enfin dépiler la pile de registres.

Syntaxe
  • fiadd, fisub, fimul, fidiv

  • Ces instructions sont à utiliser lorsque l'emplacement mémoire contient un entier. Il sera converti en nombre flottant de 80 bits avant l'opération.