Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Microsoft-specifikus
A __asm kulcsszó meghívja a beágyazott assemblert, és bárhol megjelenhet, ahol egy C vagy C++ utasítás megengedett. Önmagában nem jelenhet meg. Ezt szerelvényutasításnak, kapcsos zárójelbe foglalt utasítások csoportjának vagy legalább egy üres kapcsos zárójelnek kell követnie. A "__asm blokk" kifejezés itt bármilyen utasításra vagy utasításcsoportra vonatkozik, akár kapcsos zárójelekben, akár nem.
Megjegyzés:
A Standard C++ asm kulcsszó MSVC-támogatása arra a tényre korlátozódik, hogy a fordító nem fog hibát generálni a kulcsszón. A blokkok asm azonban nem hoznak létre értelmes kódot.
__asmhelyett használja asm.
Nyelvtan
asm-block:
__asm
szerelvény-utasítás;választ
__asm {
assembly-instruction-list};választ
assembly-instruction-list:
szerelvény-utasítás;választ
szerelvény-utasítás;szerelvény-utasítás-lista;választható
Megjegyzések
Ha kapcsos zárójelek nélkül használják, a __asm kulcsszó azt jelenti, hogy a sor többi része egy szerelvénynyelvi utasítás. Ha kapcsos zárójelekkel használják, az azt jelenti, hogy a kapcsos zárójelek közötti minden sor egy szerelvénynyelvi utasítás. A korábbi verziókkal _asm való kompatibilitás érdekében a fordítási beállítás /Za megadása nem szinonimája.
Mivel a __asm kulcsszó egy utasításelválasztó, szerelvényutasításokat is elhelyezhet ugyanazon a sorban.
A Visual Studio 2005 előtt az utasítás
__asm int 3
nem eredményezte natív kód generálását a /clr használatával történő fordításkor; A fordító lefordította az utasítást egy CLR-törésutasításra.
__asm int 3 most natív kód generálást eredményez a függvény számára. Ha azt szeretné, hogy egy függvény töréspontot okozzon a kódban, és ha azt szeretné, hogy ez a függvény MSIL-be legyen lefordítva, használja a __debugbreak.
példa
A következő kódrészlet egy egyszerű __asm , zárójelek közé zárt blokk:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
Másik lehetőségként az egyes összeszerelési utasítások elé helyezheti __asm az alábbiakat:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
Mivel a __asm kulcsszó egy utasításelválasztó, szerelvényutasításokat is elhelyezhet ugyanarra a sorra:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
Mindhárom példa ugyanazt a kódot hozza létre, de az első stílusnak (a __asm blokkot zárójelekbe foglalva) van néhány előnye. A kapcsos zárójelek egyértelműen elválasztják a szerelvénykódot a C vagy C++ kódtól, és elkerülik a __asm kulcsszó szükségtelen ismétlődését. A zárójelek megakadályozhatják a kétértelműségeket is. Ha egy C vagy C++ utasítást ugyanabba a sorba szeretne helyezni, mint egy __asm blokk, akkor a blokkot kapcsos zárójelekbe kell helyeznie. A kapcsos zárójelek nélkül a fordító nem tudja megmondani, hogy hol áll le a szerelvénykód, és hol kezdődnek a C vagy C++ utasítások. Végül, mivel a kapcsos zárójelekben lévő szöveg formátuma megegyezik a hagyományos MASM-szövegéval, egyszerűen kivághat és beilleszthet szöveget a meglévő MASM-forrásfájlokból.
A C és C++ nyelvekben használt kapcsos zárójelekkel ellentétben a __asm blokkot körülvevő kapcsos zárójelek nem befolyásolják a változó hatókörét.
__asm blokkokat is beágyazhat; a beágyazás nincs hatással a változó hatókörére.
END Microsoft-specifikus kifejezés