Retour à l'accueil Contact : etienne"point"sauvage"at"gmail.com Retour à la liste des instructions.

CALL (Near)

Near procedure CALL


appel 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émoniqueOpcodeDescription
CALL rel16offE8 iwAppel proche avec la cible spécifiée par un déplacement relatif de 16 bits.
CALL rel32offE8 idAppel proche avec la cible spécifiée par un déplacement relatif de 32 bits.
CALL reg/mem16FF /2Appel proche avec la cible spécifiée par reg/mem16.
CALL reg/mem32FF /2Appel 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/mem64FF /2Appel proche avec la cible spécifiée par reg/mem64.

Instructions apparentées

CALL (Far), RET (Near), RET (Far)

rFLAGS affectés

IDVIPVIFACVMRFNTIOPLOFDFIFTFSFZFAFPFCF
2120191817161413-1211109876420
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.

Exceptions

ExceptionRéel8086
virtuel
ProtégéCause de l'exception
Pile, #SSXXXUne adresse mémoire a dépassé la limite du segment de pile ou était non canonique.
Protection générale, #GPXXXUne adresse mémoire a dépassé la limite d'un segment de données ou était non canonique.
XXXLe décalage ciblé a fait dépasser la limite du segment de code ou était non canonique.
XUn segment de données NULL a été utilisé pour référencer la mémoire.
Faute de page, #PFXXUne faute de page a résulté de l'exécution de l'instruction.
Vérification d'alignement, #ACXXUne 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