Megosztás:


__asm

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

Lásd még

Kulcsszavak
Beágyazott összeszerelő