Assembleur 80x86 | IRET |
---|---|
INTEL 8086+, x86-64 | Interrupt Return |
Syntaxe
IRET |
Description
Cette instruction permet d'effectuer un retour précédemment provoquer par une interruption. Par conséquent, l'instruction IRET renvoie le contrôle de programme d'un gestionnaire d'exceptions ou d'interruptions à un programme ou à une procédure interrompu par une exception, une interruption externe ou une interruption générée par le logiciel. Ces instructions sont également utilisées pour effectuer un retour à partir d'une tâche imbriquée. (Une tâche imbriquée est créée lorsqu'une instruction CALL est utilisée pour lancer un changement de tâche ou lorsqu'une interruption ou une exception entraîne un changement de tâche vers un gestionnaire d'interruption ou d'exception.)
Remarques
- IRET vs IRETD : Les instructions IRET et IRETD sont des mnémoniques pour le même opcode. Le mnémonique IRETD (double retour d'interruption) est destiné à être utilisé lors du retour d'une interruption lorsque la taille de l'opérande 32 bits est utilisée; Cependant, la plupart des assembleurs utilisent le code mnémonique IRET de manière interchangeable pour les 2 tailles d'opérandes.
- Mode réel : En mode d'adressage réel, l'instruction IRET préforme un retour long au programme ou à la procédure interrompu. Au cours de cette opération, le microprocesseur extrait le pointeur d'instruction de retour, le sélecteur de segment de code retour et l'image des drapeaux EFLAGS de la pile vers les registres EIP, CS et EFLAGS, respectivement, puis reprend l'exécution du programme ou de la procédure interrompu.
- Mode protégé : En mode protégé, l'action de l'instruction IRET dépend des paramètres des drapeaux NT (tâche imbriquée) et des ordinateurs virtuels dans le registre EFLAGS, ainsi que du drapeau d'ordinateur virtuel dans l'image EFLAGS entreposée dans la pile actuelle. En fonction du réglage de ces drapeaux, le microprocesseur effectue les types suivants de retours d'interruption : Retourne du mode virtuel-8086, revenir en mode virtuel-8086, retour de niveau intra-privilège, retour de niveau inter-privilège, retour de la tâche imbriquée (commutation de tâche). Si le drapeau NT (registre EFLAGS) est effacé, l'instruction IRET effectue un retour éloigné de la procédure d'interruption, sans basculement de tâche. Le segment de code renvoyé doit avoir autant ou moins de privilèges que la routine de traitement des interruptions (comme indiqué par le champ RPL du sélecteur de segment de code sorti de la pile).
- Comme avec un retour d'interruption en mode adresse réelle, l'instruction IRET extrait le pointeur d'instruction de retour, le sélecteur de segment de code de retour et l'image EFLAGS de la pile vers les registres EIP, CS et EFLAGS, respectivement, puis reprend l'exécution du programme ou procédure interrompu. Si le retour est à un autre niveau de privilège, l'instruction IRET extrait également le pointeur de pile et SS de la pile avant de reprendre l'exécution du programme. Si le retour est en mode virtuel-8086, le microprocesseur extrait également les registres de segments de données de la pile.
- Si le drapeau NT est défini, l'instruction IRET effectue une commutation de tâche (retour) à partir d'une tâche imbriquée (une tâche appelée avec une instruction CALL, une interruption ou une exception) en retour à la tâche appelante ou interrompue. L'état mis à jour de la tâche exécutant l'instruction IRET est sauvegardé dans son TSS. Si la tâche est ré-entrée ultérieurement, le code suivant l'instruction IRET est exécuté.
- Si le drapeau NT est défini et que le microprocesseur est en mode IA-32e, l'instruction IRET provoque une exception de protection générale.
- Si des interruptions non masquables (NMI) sont bloquées, l'exécution de l'instruction IRET débloque les NMI. Ce déblocage se produit même si l'instruction provoque une faute. Dans ce cas, les NMI sont démasqués avant que le gestionnaire d'exceptions ne soit appelé.
- Ordre d'instructions : L'instruction IRET est une instruction de sérialisation.
- Mode Long : En mode 64 bits, la taille de fonctionnement par défaut de l'instruction est de 32 bits. L'utilisation du préfixe REX.W favorise le fonctionnement à 64 bits (IRETQ).
Algorithme
MODULE IRET IP est retiré de la pile SP ← SP + 2 CS est retiré de la pile SP ← SP + 2 Les drapeaux sont retiré de la pile SP ← SP + 2 |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
IRET | CFh | Cette instruction permet d'effectuer un retour précédemment provoquer par une interruption. |
Voir également
Instruction assembleur 80x86 - Instruction INT
Instruction assembleur 80x86 - Instruction INTO
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 814
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 405
AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions, Edition Advanced Micro Devices, Revision 3.14, September 2007, Publication No. 24594, page 129.
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 600 à 610.