__asm
Specyficzne dla firmy Microsoft
Słowo kluczowe __asm wywoła asembler wbudowany i może pojawić się wszędzie tam, gdzie instrukcja C lub C++ jest legalna.Nie może występować samodzielnie.Po tym musi następować instrukcja zestawu, grupa instrukcji ujęta w nawiasy klamrowe, lub, co najmniej, para pustych nawiasów klamrowych.Termin "__asm blok" odnosi się tutaj do każdej instrukcji lub grupy instrukcji, w nawiasach lub bez.
[!UWAGA]
Obsługa Visual C++ dla Standard C++ asm słowo kluczowe jest ograniczone faktem, że kompilator nie wygeneruje błędu na słowie kluczowym.Jednakże blok asm nie wygeneruje istotnego kodu.Zamiast elementu asm użyj elementu __asm.
Składnia:
__asm assembly-instruction [ ; ]
__asm { assembly-instruction-list } [ ; ]
Gramatyka
__asm assembly-instruction ;opt
__asm { assembly-instruction-list };opt
lista nstrukcji montażu:
assembly-instruction;optassembly-instruction;assembly-instruction-list;opt
Gdy używana bez nawiasów klamrowych, słowo kluczowe __asm oznacza, że pozostała część wiersza jest instrukcją języka asemblera.Używana z nawiasami klamrowymi oznacza, że każdy wiersz między nawiasami jest instrukcją języka asemblera.W celu zachowania zgodności z poprzednimi wersjami _asm jest synonimem dla __asm.
Ponieważ słowo kluczowe __asm jest separatorem instrukcji, instrukcje zestawu można umieścić w tym samym wierszu.
Przed Visual C++ 2005, instrukcja
__asm int 3
nie był przyczyną generowania kodu macierzystego przy kompilowaniu /clr; Kompilator przetłumaczył instrukcje do instrukcji przerwy CLR.
__asm int 3 teraz powoduje generowanie kodu macierzystego dla funkcji.Jeśli chcesz, aby funkcja wywoływała przerwę w kodzie i jeśli chcesz, aby tę funkcję skompilować do MSIL, zobacz __debugbreak.
Przykład
Poniższy fragment kodu jest prostym blokiem __asm zawartym w nawiasach:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
Alternatywnie, można umieścić __asm przed każdą instrukcję montażu:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
Ponieważ słowo kluczowe __asm jest separatorem instrukcji, instrukcje zestawu można także umieścić w tym samym wierszu:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
Wszystkie trzy przykłady generują ten sam kod, ale pierwszy stylu (załączanie __asm bloku w nawiasach klamrowych) ma kilka zalet.Nawiasy klamrowe wyraźnie oddzielają kodu zestawu od kodu C lub C++ i pozwalają uniknąć powtórzenia niepotrzebnego __asm słowa kluczowego.Nawiasy klamrowe mogą również zapobiec niejasności.Jeśli chcesz umieścić instrukcję C lub C++ na tym samym wierszu co blok __asm, blok należy ująć w nawiasy klamrowe.Bez nawiasów klamrowych, kompilator nie może rozpoznać czy kod zestawu zatrzymuje się i instrukcje C i C++ rozpoczynają się.Na koniec, ponieważ tekst w nawiasach klamrowych ma taki sam format, jak zwykły tekst MASM, można łatwo wycinać i wklejać tekst z istniejących plików źródłowych MASM.
W odróżnieniu od nawiasów klamrowych w C i C++, nawiasy klamrowe obejmujące blok __asm nie mają wpływu na zakres zmiennej.Możesz również umieścić bloki __asm w gnieździe, umieszczanie w gnieździe nie ma wpływu na zakres zmiennej.
KONIEC informacji specyficznych dla firmy Microsoft