__asm
Microsoft'a Özgü
__asm
anahtar sözcüğü satır içi derleyiciyi çağırır ve C veya C++ deyiminin yasal olduğu her yerde görüntülenebilir. Tek başına görünemez. Bir derleme yönergesi, ayraç içine alınmış bir yönerge grubu veya en azından boş bir küme ayracı çifti tarafından izlenmelidir. Buradaki "__asm
blok" terimi, küme ayraçları içinde olsun veya olmasın tüm yönerge veya yönerge grubunu ifade eder.
Not
Standart C++ anahtar sözcüğü için Visual C++ asm
desteği, derleyicinin anahtar sözcük üzerinde hata oluşturmamasıyla sınırlıdır. Ancak, bir asm
blok anlamlı bir kod oluşturmaz. yerine asm
kullanın__asm
.
Dilbilgisi
asm-block:
__asm
derleme yönergesi ;
Tercih
__asm {
assembly-instruction-list }
;
Tercih
assembly-instruction-list:
bütünleştirilmiş kod yönergesi ;
tercihi
assembly-instruction assembly-instruction-list;
opt ;
Açıklamalar
Ayraç olmadan kullanılırsa anahtar sözcük, __asm
satırın geri kalanının bir derleme dili deyimi olduğu anlamına gelir. Ayraçlarla birlikte kullanıldığında, ayraçlar arasındaki her satırın bir derleme dili deyimi olduğu anlamına gelir. Önceki sürümlerle uyumluluk için, _asm
için __asm
bir eş anlamlıdır.
__asm
Anahtar sözcük bir deyim ayırıcısı olduğundan, derleme yönergelerini aynı satıra yerleştirebilirsiniz.
Visual Studio 2005'in öncesinde yönerge
__asm int 3
/clr ile derlendiğinde yerel kodun oluşturulmasına neden olmadı; derleyici yönergeyi bir CLR kesme yönergesine çevirdi.
__asm int 3
şimdi işlevi için yerel kod oluşturma işlemine neden olur. Bir işlevin kodunuzda kesme noktasına neden olmasını ve bu işlevin MSIL'de derlenmiş olmasını istiyorsanız __debugbreak kullanın.
Derleyici seçeneği /Za (Dil uzantılarını devre dışı bırak) belirtilmediği sürece, _asm
önceki sürümlerle uyumluluk için __asm
bir eş anlamlıdır.
Örnek
Aşağıdaki kod parçası, küme ayraçları içine alınmış basit __asm
bir bloktır:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
Alternatif olarak, her derleme yönergesinin önüne koyabilirsiniz __asm
:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
__asm
Anahtar sözcük bir deyim ayırıcısı olduğundan, derleme yönergelerini de aynı satıra yerleştirebilirsiniz:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
Üç örnek de aynı kodu oluşturur, ancak ilk stilin __asm
(bloğu küme ayraçları içine alan) bazı avantajları vardır. Ayraçlar, derleme kodunu C veya C++ kodundan net bir şekilde ayırır ve anahtar sözcüğün __asm
gereksiz bir şekilde yinelenmesinden kaçınılır. Ayraçlar belirsizlikleri de önleyebilir. Blokla aynı satıra __asm
bir C veya C++ deyimi koymak istiyorsanız, bloğu ayraç içine almanız gerekir. Küme ayraçları olmadan, derleyici derleme kodunun nerede durup C veya C++ deyimlerinin nerede başlayacağını söyleyemez. Son olarak, küme ayraçlarındaki metin normal MASM metniyle aynı biçime sahip olduğundan, var olan MASM kaynak dosyalarındaki metni kolayca kesebilir ve yapıştırabilirsiniz.
C ve C++ içindeki ayraçlardan farklı olarak, bir __asm
bloğu kapsayan ayraçlar değişken kapsamını etkilemez. Ayrıca blokları iç içe __asm
yerleştirebilirsiniz; iç içe yerleştirme değişken kapsamını etkilemez.
END Microsoft'a Özgü