Section courante

A propos

Section administrative du site

Assembleur 80x86

RETN

INTEL 8088+ Return Near

Syntaxe

RETN
RETN immédiat

Paramètres

Nom Description
immédiat Ce paramètre permet d'indiquer une valeur immédiatement correspondant à une addition a effectuer dans la pile, afin de retirer des valeurs empilés par l'instruction PUSH par exemple.

Description

Cette instruction permet de quitter une procédure. Ainsi, elle indique au microprocesseur qu'il doit désempiler la valeur du pointeur d'instructions contenu dans la pile et la copie dans le registre IP. Ensuite, l'exécution du code se poursuit à l'instruction suivant l'instruction «CALL».

Algorithme

SI opérande de taille = 32 bits ALORS
   SI les 12 octets du haut de la pile sont en dehors de la limite de la pile ALORS
      EXCEPTION #SS(0)
   FIN SI
   EIP ← Pop()
SINON
   SI les 6 octets du haut de la pile sont en dehors de la limite de la pile ALORS
      EXCEPTION #SS(0)
   FIN SI
   tempEIP ← Pop()
   tempEIP ← tempEIP ∩ 0000FFFFh
   SI tempEIP n'est pas dans limite du segment de code ALORS
      EXCEPTION #GP(0)
   FIN SI
   EIP ← tempEIP
FIN SI
SI instruction a une opérande immédiate ALORS
   SI taille de l'adresse de la pile = 32 bits ALORS
      ESP ← ESP + SRC
   SINON
      SP ← SP + SRC
   FIN SI
FIN SI

Mnémonique

Instruction Opcode Description
RETN C3h Retour d'un appel de procédure court.
RETN imm16 C2h iw Retour d'un appel de procédure court et spécifie le nombre d'octets à retirer de la pile.

Exceptions

Message Mode réel Virtuel 8086 Mode protégé Description
#SS(Pile) X X X Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique
#GP(Protection général) X X X Une adresse mémoire dépasse la limite du segment de données ou n'est pas canonique
#PF(Faute de page)   X X Une faute de page résultat de l'exécution de l'instruction
#AC(Vérifie l'alignement)   X X Un désalignement de la référence mémoire est effectué quand une vérification d'alignement est activé

Exemple

Voici un exemple en Turbo Pascal montrant l'utilisation de cette instruction :

  1. Program RetNCallSamples;
  2.  
  3. Var _AX:Word;
  4.  
  5. BEGIN
  6.  ASM
  7.   CALL @SetValue
  8.   JMP @End
  9.   MOV AX,0002h
  10. @SetValue:
  11.   MOV AX,0001h
  12.   CALL @Next
  13.   CALL @Next
  14.   CALL @Next
  15.   RETN
  16. @Next:
  17.   INC AX
  18.   RETN
  19. @End:
  20.   MOV _AX,AX
  21.  END;
  22.  WriteLn('AX = ',_AX);
  23. END.

on obtiendra le résultat suivant :

AX = 4

Voir également

Instruction assembleur 80x86 - Instruction CALL
Instruction assembleur 80x86 - Instruction RET
Langage de programmation - Structure de données - Structures récursives linéaires - Pile

Dernière mise à jour : Lundi, le 1 septembre 2014