Sdílet prostřednictvím


__asm

Specifické pro Microsoft

Klíčové __asm slovo vyvolá vložený assembler a může se objevit všude, kde je prohlášení jazyka C nebo C++ legální. Nemůže se zobrazit sám. Musí následovat instrukce sestavení, skupina instrukcí uzavřených ve složených závorkách nebo minimálně prázdná dvojice složených závorek. Termín "__asm blok" zde odkazuje na jakoukoli instrukci nebo skupinu instrukcí, ať už ve složených závorkách nebo ne.

Poznámka:

Podpora jazyka Visual C++ pro klíčové slovo Standard C++ asm je omezena na skutečnost, že kompilátor negeneruje chybu u klíčového slova. asm Blok ale negeneruje žádný smysluplný kód. Používejte __asm místo asm.

Gramatika

asm-block:
__asmassembly-instruction ;volit
__asm {assembly-instruction-list } ;volit

assembly-instruction-list:
assembly-instruction ;opt
assembly-instruction assembly-instruction-list; opt ;

Poznámky

Pokud se používá bez závorek, __asm klíčové slovo znamená, že zbytek řádku je příkazem jazyka sestavení. Pokud se používá se složenými závorkami, znamená to, že každý řádek mezi složenými závorkami je příkazem jazyka sestavení. Z důvodu kompatibility s předchozími verzemi _asm je synonymem pro __asm.

__asm Vzhledem k tomu, že klíčové slovo je oddělovač příkazů, můžete umístit instrukce sestavení na stejný řádek.

Před sadou Visual Studio 2005 se pokyny

__asm int 3

nezpůsobila generování nativního kódu při kompilaci pomocí /clr. Kompilátor přeložil instrukce na přerušení clR.

__asm int 3 výsledkem je generování nativního kódu pro funkci. Pokud chcete, aby funkce způsobila v kódu zarážku a pokud chcete tuto funkci zkompilovat do knihovny MSIL, použijte __debugbreak.

Z důvodu kompatibility s předchozími verzemi je synonymem, _asm pokud __asm není zadána možnost kompilátoru /Za (Zakázat jazyková rozšíření).

Příklad

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

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

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

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

__asm Vzhledem k tomu, že klíčové slovo je oddělovač příkazů, můžete také umístit instrukce sestavení na stejný řádek:

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

Všechny tři příklady generují stejný kód, ale první styl (uzavření bloku do __asm složených závorek) má určité výhody. Složené závorky jasně oddělují kód sestavení od kódu jazyka C nebo C++ a vyhněte se zbytečnému opakování klíčového __asm slova. Složené závorky můžou také bránit nejednoznačnostem. Pokud chcete vložit příkaz C nebo C++ na stejný řádek jako __asm blok, musíte ho uzavřít do složených závorek. Bez závorek nemůže kompilátor zjistit, kde kód sestavení zastaví a začínat příkazy jazyka C nebo C++. A konečně, protože text ve složených závorkách má stejný formát jako běžný 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 jazyce C a C++ nemají složené závorky ohraničující __asm blok vliv na obor proměnných. Můžete také vnořit __asm bloky, vnoření nemá vliv na obor proměnných.

END Microsoft Specific

Viz také

Klíčová slova
Vkládaný assembler