__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:
__asm
assembly-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