Udostępnij za pośrednictwem


__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;opt

    assembly-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

Zobacz też

Informacje

Słowa kluczowe języka C++

Asembler wbudowany