Sdílet prostřednictvím


__asm

Specifické pro Microsoft

Klíčové slovo __asm vyvolá vložený nástroj pro sestavení a může objevit všude, kde lze použít příkaz jazyka C nebo C++.Nemůže být použit samostatně.Musí následovat instrukce sestavení, skupina pokynů uzavřená v závorkách, nebo přinejmenším prázdný pár závorek.Pojem „__asm block“ se zde vztahuje na jakoukoli instrukci nebo skupinu instrukcí ve složených závorkách nebo mimo ně.

[!POZNÁMKA]

Podpora Visual C++ pro klíčové slovo asm standardu C++ je omezena na skutečnost, že kompilátor nevygeneruje chybu pro klíčové slovo.Nicméně blok asm nevygeneruje jakýkoli smysluplný kód.Použijte __asm namísto asm.

Syntax:

__asm assembly-instruction [ ; ]

__asm { assembly-instruction-list } [ ; ]

Gramatika

  • __asm assembly-instruction ;opt

    __asm { assembly-instruction-list };opt

  • seznam instrukcí sestavení:
    assembly-instruction;opt

    assembly-instruction;assembly-instruction-list;opt

Je-li použito bez závorek, klíčové slovo __asm slovo znamená, že zbytek řádku je příkaz symbolického jazyka.Pokud používáno se závorkami, znamená to, že každý řádek mezi závorkami je příkaz symbolického jazyka.Z důvodu kompatibility s předchozími verzemi je _asm synonymum pro __asm.

Protože klíčové slovo __asm představuje oddělovač výrazů, můžete umístit pokyny k sestavení na stejném řádku.

Před Visual C++ 2005, instrukce

__asm int 3

nezpůsobila generování nativního kódu při kompilaci s /clr; kompilátor přeložil pokyn k instrukci CLR break.

__asm int 3 nyní způsobí generování nativního kódu pro funkci.Chcete-li, aby funkce způsobila přerušení v kódu a pokud chcete tuto funkci zkompilovat pro jazyk MSIL, použijte funkci __debugbreak.

Příklad

Následující fragment kódu je jednoduchý blok __asm uzavřeny ve složených závorkách:

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

Alternativně můžete umístit __asm před každou instrukci sestavení:

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

Protože klíčové slovo __asm představuje oddělovač výrazů, můžete také umístit pokyny sestavení na stejný řádek:

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

Všechny tři příklady vygenerují stejný kód, ale první styl (ohraničující blok __asm složenými závorkami) má několik výhod.Složené závorky jasně oddělují kód sestavení od kódu jazyka C nebo C++ a umožňují vyhnout se zbytečnému opakování klíčového slova __asm.Složené závorky také zabraňují nejasnostem.Pokud chcete použít příkaz C nebo C++ na stejném řádku jako blok __asm, blok je nutné uzavřít do složených závorek.Bez závorek kompilátor nemůže určit, kde zastaví sestavení kódu a zahájí příkazy jazyka C nebo C++.Protože text v závorce má stejný formát jako obyčejný text MASM, můžete snadno vyjmout a vložit text z existujících zdrojových souborů MASM.

Na rozdíl od složených závorek v C a C++, složené závorky uzavírající blok __asm nemají vliv na rozsah proměnné.Lze také vnořit bloky __asm; vnoření nemá vliv na rozsah proměnné.

Specificka produktu Microsoft END

Viz také

Referenční dokumentace

Klíčová slova jazyka C++

Vložený assembler