Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft'a Özgü
Not
Satır içi derleme yalnızca x86 hedefleri için kullanılabilir. x64 veya ARM64 kodundaki benzer işlevler için derleyici iç işlevlerini kullanın.
Satır içi derleme koduyla bir işlev yazarsanız, bağımsız değişkenleri işleve geçirmek ve işlevden bir değer döndürmek kolaydır. Aşağıdaki örneklerde, önce ayrı bir derleyici için yazılmış bir işlev karşılaştırılır ve ardından satır içi derleyici için yeniden yazılır. adlı power2işlev, ilk parametreyi ikinci parametrenin gücüyle 2 ile çarparak iki parametre alır. Ayrı bir assembler dosyası olarak işlev şu şekilde görünebilir:
; power2.asm
; x86 code for C interop
; Command line: ml /c /Cx /W3 /WX power2.asm
.686P
.XMM
.MODEL flat
PUBLIC _power2
; int power2(int num, int power);
; computes num x 2^power
_TEXT SEGMENT
_power2 PROC
push ebp ; save EBP
mov ebp, esp ; Move ESP into EBP so we can refer
; to arguments on the stack
mov eax, [ebp+8] ; load first argument
mov ecx, [ebp+12] ; load second argument
shl eax, cl ; compute result in EAX
pop ebp ; restore EBP
ret
_power2 ENDP
_TEXT ENDS
END
Ayrı bir assembler dosyası olarak yazılmasından dolayı işlev ayrı derleme ve bağlantı adımları gerektirir. C ve C++ işlev bağımsız değişkenleri genellikle yığına geçirilir, bu nedenle işlevin power2 bu sürümü yığındaki konumlarıyla bağımsız değişkenlerine erişir.
MODEL(MASM'de ve diğer bazı derleyicilerde bulunan yönergesi, yığın bağımsız değişkenlerine ve yerel yığın değişkenlerine ada göre erişmenizi de sağlar.)
Örnek
Bu program, işlevi satır içi derleme koduyla yazar power2 :
// Power2_inline_asm.c
// compile with: /EHsc
// processor: x86
#include <stdio.h>
int power2( int num, int power );
int main( void )
{
printf_s( "3 times 2 to the power of 5 is %d\n", \
power2( 3, 5) );
}
int power2( int num, int power )
{
__asm
{
mov eax, num ; Get first argument
mov ecx, power ; Get second argument
shl eax, cl ; EAX = EAX * ( 2 to the power of CL )
}
// Return with result in EAX
}
İşlevin power2 satır içi sürümü bağımsız değişkenlerini ada göre ifade eder ve programın geri kalanıyla aynı kaynak dosyada görünür. Bu sürüm için daha az derleme yönergesi de gerekir.
satır içi sürümü power2 bir C return deyimi yürütmediğinden, uyarı düzeyi 2 veya daha yüksek bir derleme yaparsanız zararsız bir uyarıya neden olur. İşlev bir değer döndürür, ancak derleyici bir return deyimi olmadığında değerini anlayamaz. Bu uyarının oluşturulmasını devre dışı bırakmak için kullanabilirsiniz #pragma warning .
END Microsoft'a Özgü