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