Vue d'ensemble de l'assembleur inline
Section spécifique à Microsoft
L'assembleur inline vous permet d'incorporer des instructions en langage assembleur dans vos programmes sources C et C++ sans code assembleur ni étapes de liaison supplémentaires. L'assembleur inline est intégré au compilateur. Vous n'avez pas besoin d'assembleur distinct tel que MASM (Microsoft Macro Assembler).
Étant donné que l'assembleur inline n'a pas besoin de code assembleur ni d'étapes de liaison distinctes, il est plus pratique qu'un assembleur distinct. Le code assembleur inline peut utiliser tout nom de fonction ou variable C ou C++ qui est dans la portée. Il est par conséquent facile de l'intégrer au code C et C++ de votre programme. En outre, le code assembleur pouvant être combiné avec des instructions C et C++, il peut exécuter des tâches lourdes ou impossibles en C ou C++ seul.
Le mot clé __asm appelle l’assembleur inline et peut apparaître partout où une instruction C ou C++ est légale. Il ne peut pas apparaître de lui-même. Il doit être suivi par une instruction assembleur, un groupe d'instructions entre accolades ou, au minimum, par une paire d'accolades vide. Le terme « bloc __asm
» fait ici référence à une instruction ou un groupe d'instructions, que ce dernier soit ou non entouré d'accolades.
Le code suivant est un bloc __asm
simple entre accolades. (Le code est une séquence de prologue de fonction personnalisée.)
// asm_overview.cpp
// processor: x86
void __declspec(naked) main()
{
// Naked functions must provide their own prolog...
__asm {
push ebp
mov ebp, esp
sub esp, __LOCAL_SIZE
}
// ... and epilog
__asm {
pop ebp
ret
}
}
Vous pouvez aussi placer __asm
devant chaque instruction assembleur :
__asm push ebp
__asm mov ebp, esp
__asm sub esp, __LOCAL_SIZE
Dans la mesure où le mot clé __asm
est un séparateur d'instruction, vous pouvez également placer des instructions assembleur sur la même ligne :
__asm push ebp __asm mov ebp, esp __asm sub esp, __LOCAL_SIZE
FIN de la section spécifique à Microsoft