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