Delen via


Inline Assembler-overzicht

Microsoft-specifieke

Met de inlineassemblyer kunt u instructies in de assemblytaal insluiten in uw C- en C++-bronprogramma's zonder extra assembly- en koppelingsstappen. De inline assembler is ingebouwd in de compiler — u hebt geen aparte assembler zoals de Microsoft Macro Assembler (MASM) nodig.

Omdat voor de inlineassemblage geen afzonderlijke assembly- en koppelingsstappen nodig zijn, is het handiger dan een afzonderlijke assembly. Inline-assemblycode kan elke C- of C++-variabele of functienaam gebruiken die binnen het bereik valt, zodat u deze eenvoudig kunt integreren met de C- en C++-code van uw programma. En omdat de assemblycode kan worden gecombineerd met C- en C++-instructies, kan het taken uitvoeren die lastig of onmogelijk zijn in C of C++ alleen.

Het __asm trefwoord roept de inlineassembler aan en kan voorkomen waar een C- of C++-instructie geldig is. Het kan niet op zichzelf verschijnen. Het moet worden gevolgd door een montage-instructie, een groep instructies tussen accolades, of op zijn minst een leeg paar accolades. De term '__asm blok' verwijst hier naar een instructie of groep instructies, ongeacht of deze al dan niet in accolades staat.

De volgende code is een eenvoudig __asm blok tussen accolades. (De code is een aangepaste functieprologreeks.)

// 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
    }
}

U kunt ook voor elke assembly-instructie plaatsen __asm :

__asm push ebp
__asm mov  ebp, esp
__asm sub  esp, __LOCAL_SIZE

Omdat het __asm trefwoord een scheidingsteken voor instructies is, kunt u ook assembly-instructies op dezelfde regel plaatsen:

__asm push ebp   __asm mov  ebp, esp   __asm sub  esp, __LOCAL_SIZE

Microsoft-specifieke beëindigen

Zie ook

Inline-assembler