Udostępnij za pośrednictwem


__asm

Specyficzne dla firmy Microsoft

Słowo __asm kluczowe wywołuje asemblera wbudowanego i może pojawiać się wszędzie tam, gdzie instrukcja 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.

Uwaga

Obsługa języka Visual C++ dla słowa kluczowego Standard C++ asm jest ograniczona do faktu, że kompilator nie wygeneruje błędu na słowie kluczowym. asm Blok nie będzie jednak generować żadnego znaczącego kodu. Użyj __asm zamiast asm.

Gramatyka

asm-block:
__asminstrukcja ; zestawuZdecydować
__asm {lista } instrukcji zestawu ;Zdecydować

lista-instrukcji zestawu:
wybór instrukcji ;zestawu
zestaw-instrukcja-instrukcja-lista-wyboru ; ;

Uwagi

Jeśli nie są używane bez nawiasów klamrowych, słowo kluczowe oznacza, __asm że pozostała część wiersza jest instrukcją języka zestawu. Jeśli jest używany z nawiasami klamrowymi, oznacza to, że każda linia między nawiasami klamrowymi jest instrukcją języka zestawu. Ze zgodnością z poprzednimi wersjami _asm jest synonimem .__asm

__asm Ponieważ słowo kluczowe jest separatorem instrukcji instrukcji zestawu, można umieścić w tym samym wierszu.

Przed programem Visual Studio 2005 instrukcja

__asm int 3

nie spowodowało wygenerowania kodu natywnego podczas kompilowania za pomocą polecenia /clr; kompilator przetłumaczył instrukcję na instrukcję przerwania CLR.

__asm int 3 teraz powoduje generowanie kodu natywnego dla funkcji. Jeśli chcesz, aby funkcja powodowała punkt przerwania w kodzie i jeśli chcesz, aby ta funkcja została skompilowana w języku MSIL, użyj __debugbreak.

Aby uzyskać zgodność z poprzednimi wersjami, jest synonimem, _asm __asm chyba że określono opcję kompilatora /Za (Wyłącz rozszerzenia języka).

Przykład

Poniższy fragment kodu jest prostym __asm blokiem ujętym w nawiasy klamrowe:

__asm {
   mov al, 2
   mov dx, 0xD007
   out dx, al
}

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

__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al

__asm Ponieważ słowo kluczowe jest separatorem instrukcji instrukcji, można również umieścić instrukcje zestawu 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 styl (otaczający __asm blok w nawiasach klamrowych) ma pewne zalety. Nawiasy klamrowe wyraźnie oddzielają kod zestawu od kodu C lub C++ i unikaj niepotrzebnego powtarzania słowa kluczowego __asm . Nawiasy klamrowe mogą również zapobiegać niejednoznaczności. Jeśli chcesz umieścić instrukcję języka C lub C++ w tym samym wierszu co __asm blok, należy ująć blok w nawiasy klamrowe. Bez nawiasów klamrowych kompilator nie może stwierdzić, gdzie rozpoczyna się kod zestawu, a instrukcje języka C lub C++. 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 przeciwieństwie do nawiasów klamrowych w językach C i C++, nawiasy klamrowe otaczające __asm blok nie mają wpływu na zakres zmiennych. Można również zagnieżdżać bloki; zagnieżdżanie __asm nie wpływa na zakres zmiennych.

END Microsoft Specific

Zobacz też

Słowa kluczowe
Wbudowany asembler