__asm
Specifické pro Microsoft
__asmKlíčové slovo vyvolá vložený assembler a může se objevit všude, kde je platný příkaz jazyka C nebo C++. Nemůže být použit sám sebou. Musí následovat instrukce sestavení, skupina instrukcí uzavřených ve složených závorkách nebo, minimálně prázdný pár složených závorek. Termín " __asm Block" zde odkazuje na jakoukoli instrukci nebo skupinu instrukcí, bez ohledu na to, zda jsou v závorkách.
Poznámka
Podpora Visual C++ pro standardní asm klíčová slova jazyka C++ je omezená na skutečnost, že kompilátor negeneruje chybu pro klíčové slovo. Nicméně asm blok nebude generovat žádný smysluplný kód. __asmMísto použijte asm .
Gramatika
ASM – blok:
__asm__asm;;
__asm {__asm {}; instrukcí }
seznam instrukcí pro sestavení:
sestavení – instrukcevýslovný souhlas
sestavení – instrukcesestavení – seznam instrukcí výslovný souhlas
Poznámky
Pokud se používá bez složených závorek, __asm klíčové slovo znamená, že zbytek řádku je příkaz Assembly-Language. Pokud se používá se složenými závorkami, znamená to, že každý řádek mezi složenými závorkami je příkaz Assembly-Language. Kvůli kompatibilitě s předchozími verzemi _asm je synonymum pro __asm .
Vzhledem k tomu __asm , že klíčové slovo je oddělovač příkazů, lze umístit pokyny sestavení na stejný řádek.
před Visual Studio 2005 instrukce
__asm int 3
nezpůsobí generování nativního kódu při kompilování s /CLR; Kompilátor přeložil instrukci na instrukci ukončení CLR.
__asm int 3 Nyní má za následek generování nativního kódu pro funkci. Chcete-li, aby funkce způsobila v kódu bod přerušení, a pokud chcete tuto funkci zkompilovat do jazyka MSIL, použijte __debugbreak.
Kvůli kompatibilitě s předchozími verzemi _asm je synonymum pro, __asm Pokud není zadána možnost kompilátoru _asm .
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 umístit __asm před každou instrukci sestavení:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
Protože __asm klíčové slovo je oddělovač příkazů, 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 generují stejný kód, ale první styl (ohraničující __asm blok v závorkách) obsahuje některé výhody. Složené závorky jasně oddělují kód sestavení z kódu jazyka C nebo C++ a zabraňují nutnosti opakování __asm klíčového slova. Složené závorky můžou také zabránit nejasnostem. Pokud chcete vložit příkaz jazyka C nebo C++ na stejný řádek jako __asm blok, je nutné uzavřít blok do složených závorek. Bez složených závorek nemůže kompilátor sdělit, kde se zastaví kód sestavení a začnou příkazy jazyka C nebo C++. Proto vzhledem k tomu, že text v závorkách má stejný formát jako obyčejný MASM text, 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 ohraničující __asm blok neovlivňují rozsah proměnné. Lze také vnořit __asm bloky; vnořování nemá vliv na rozsah proměnné.
Specifické pro konec Microsoftu