Omówienie wbudowanego asemblera

Specyficzne dla firmy Microsoft

Wbudowany asembler umożliwia osadzanie instrukcji języka zestawów w programach źródłowych C i C++ bez dodatkowych kroków zestawów i linków. Wbudowany asembler jest wbudowany w kompilator — nie potrzebujesz oddzielnego asemblera, takiego jak Microsoft Macro Assembler (MASM).

Ponieważ asembler wbudowany nie wymaga oddzielnych kroków zestawów i łączy, jest wygodniejszy niż oddzielny asemblera. Wbudowany kod zestawu może używać dowolnej zmiennej C lub C++ lub nazwy funkcji, która jest w zakresie, dlatego łatwo jest zintegrować go z kodem C i C++ programu. Ponieważ kod zestawu może być mieszany z instrukcjami C i C++, może wykonywać zadania, które są kłopotliwe lub niemożliwe tylko w języku C lub C++.

Słowo kluczowe __asm wywołuje asemblera wbudowanego i może pojawić się wszędzie tam, gdzie instrukcja języka C lub C++ jest legalna. Nie może się pojawić samodzielnie. Należy wykonać instrukcję zestawu, grupę instrukcji ujętych w nawiasy klamrowe lub co najmniej pustą parę nawiasów klamrowych. Termin "__asm blok" w tym miejscu odnosi się do dowolnej instrukcji lub grupy instrukcji, niezależnie od tego, czy w nawiasach klamrowych.

Poniższy kod to prosty __asm blok ujęty w nawiasy klamrowe. (Kod jest niestandardową sekwencją prologu funkcji).

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

Alternatywnie można umieścić __asm przed każdą instrukcją zestawu:

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

__asm Ponieważ słowo kluczowe jest separatorem instrukcji instrukcji, można również umieścić instrukcje zestawu w tym samym wierszu:

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

END Microsoft Specific

Zobacz też

Wbudowany asembler