Dela via


Översikt över infogad assembler

Microsoft-specifik

Med inline-assemblern kan du bädda in assemblerinstruktioner i dina C- och C++-källprogram utan behov av extra sammanställning och länkning. Den inbäddade assemblern är inbyggd i kompilatorn – du behöver ingen separat assembler, till exempel Microsoft Macro Assembler (MASM).

Eftersom den inbyggda assemblern inte kräver separata assembler- och länkarsteg är det mer bekvämt än en separat assembler. Infogad sammansättningskod kan använda valfri C- eller C++-variabel eller funktionsnamn som finns i omfånget, så det är enkelt att integrera den med programmets C- och C++-kod. Och eftersom sammansättningskoden kan blandas med C- och C++-instruktioner kan den utföra uppgifter som är besvärliga eller omöjliga enbart i C eller C++.

Nyckelordet __asm anropar inline assemblern och kan förekomma där en C- eller C++-sats är tillåten. Det kan inte visas på egen hand. Den ska följas av en sammansättningsinstruktion, en grupp instruktioner som omges av klammerparenteser, eller åtminstone ett tomt par klammerparenteser. Termen "__asm block" här refererar till instruktioner eller grupper med instruktioner, oavsett om de finns i klammerparenteser eller inte.

Följande kod är ett enkelt __asm block omgivet av klammerparenteser. (Koden är en anpassad funktionsprologsekvens.)

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

Du kan också placera __asm framför varje monteringsinstruktion:

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

Eftersom nyckelordet __asm är en instruktionsavgränsare kan du också placera sammansättningsinstruktioner på samma rad:

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

Avsluta Microsoft Specifik

Se även

Inlinjeassembler