Retour à l'accueil | Contact : etienne"point"sauvage"at"gmail.com | Retour à la liste des instructions. |
CALL (Near) | Near procedure CALLappel de procédure proche |
Pousse le décalage de la prochaine instruction sur la pile et dérive vers l'adresse cible, qui contient la première instruction de la procédure appelée. L'opérande définissant la cible peut être un registre, un emplacement mémoire ou une étiquette. Une procédure à laquelle on accède par un CALL proche est localisée dans le même segment de code que l'instruction CALL.
Si la cible du CALL est spécifiée par un registre ou un emplacement mémoire, alors un rIP de 16, 32 ou 64 bits est lu à partir de l'opérande, selon la taille de l'opérande. Un rIP de 16 ou 32 bits est complété par des zéro jusqu'à 64 bits.
Si la cible du CALL est spécifiée par un déplacement, ce déplacement signé est ajouté au rIP (de l'instruction suivante) et le résultat est tronqué à 16, 32 ou 64 bits selon la taille de l'opérande. Le déplacemebt signé est sur 16 ou 32 bits, selon la taille de l'opérande.
Dans tous les cas, le rIP de l'instruction après le CALL est poussé sur la pile et la taille de cette poussée (16, 32 ou 64 bits) épend de la taille de l'opérande de l'instruction CALL.
Pour des appels proches en mode 64 bits, la taille par défaut de l'opérande est de 64 bits. L'opcode E8 effectue RIP = RIP + déplacement signé de 32 bits et l'opcode FF /2 effectue RIP = décalage de 64 bits donné par un registre ou un emplacement mémoire. Aucun préfixe n'est disponible pour coder un opérande sur 32 bits en mode 64 bits.
A la fin de la procédure appelée, on utilise RET pour rendre le contrôle à l'instruction suivant le CALL correspondant. Quand RET est exécuté, le rIP est tiré de la pile, ce qui rend le contrôle à l'instruction après le CALL.
Consultez CALL (Far) pour les informations concernant les appels distants - appels à des procédures localisées en dehors du segment de code courant. Pour plus d'information à propos des instructions de controle de flux, consultez "Transferts de contrôle" dans le volume 1 et "Vérifications des privilèges de transfert de contrôle" dans le volume 2.
Mnémonique | Opcode | Description |
CALL rel16off | E8 iw | Appel proche avec la cible spécifiée par un déplacement relatif de 16 bits. |
CALL rel32off | E8 id | Appel proche avec la cible spécifiée par un déplacement relatif de 32 bits. |
CALL reg/mem16 | FF /2 | Appel proche avec la cible spécifiée par reg/mem16. |
CALL reg/mem32 | FF /2 | Appel proche avec la cible spécifiée par reg/mem32. (Il n'y a pas de préfixe pour coder ceci en mode 64 bits.) |
CALL reg/mem64 | FF /2 | Appel proche avec la cible spécifiée par reg/mem64. |
CALL (Far), RET (Near), RET (Far)
ID | VIP | VIF | AC | VM | RF | NT | IOPL | OF | DF | IF | TF | SF | ZF | AF | PF | CF |
21 | 20 | 19 | 18 | 17 | 16 | 14 | 13-12 | 11 | 10 | 9 | 8 | 7 | 6 | 4 | 2 | 0 |
Note : les bits 31-22, 15, 5, 3 et 1 sont réservés. Un drapeau mis à 1 ou nettoyé à 0 est M (modifié). Les drapeaux non affectés sont blancs. Les drapeaux non définis sont U. |
Exception | Réel | 8086 virtuel | Protégé | Cause de l'exception |
Pile, #SS | X | X | X | Une adresse mémoire a dépassé la limite du segment de pile ou était non canonique. |
Protection générale, #GP | X | X | X | Une adresse mémoire a dépassé la limite d'un segment de données ou était non canonique. | X | X | X | Le décalage ciblé a fait dépasser la limite du segment de code ou était non canonique. | X | Un segment de données NULL a été utilisé pour référencer la mémoire. |
Faute de page, #PF | X | X | Une faute de page a résulté de l'exécution de l'instruction. | |
Vérification d'alignement, #AC | X | X | Une référence mémoire non alignée a été faite pendant que la vérification d'alignement était active. |
Source : AMD x86-64 Architecture PROGRAMMER'S MANUAL Volume 3 General-Purpose and System Instructions, 24594 Rev. 3.02 August 2002.
Retour à l'accueil | Contact : etienne"point"sauvage"at"gmail.com | Retour à la liste des instructions |