İşlevler, satır içi derleme ile yazma
Microsoft özel
Satır içi derleme kod işleviyle yazarsanız, işlev için bağımsız değişken geçirdiğinizde ve ondan bir değer döndürmek kolay bir işlemdir.Aşağıdaki örnekler, bir işlev için ayrı bir çevirici ilk yazılan ve satır içi assembler için yeniden yazan karşılaştırın.Çağrılan işlev, power2, ikinci parametre gücünü 2 ilk parametre çarpmadan iki parametre alır.Ayrı bir çevirici için yazılmış, işlevi aşağıdaki gibi görünebilir:
; POWER.ASM
; Compute the power of an integer
;
PUBLIC _power2
_TEXT SEGMENT WORD PUBLIC 'CODE'
_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+4] ; Get first argument
mov ecx, [ebp+6] ; Get second argument
shl eax, cl ; EAX = EAX * ( 2 ^ CL )
pop ebp ; Restore EBP
ret ; Return with sum in EAX
_power2 ENDP
_TEXT ENDS
END
Ayrı bir çevirici için yazılan bu yana işlevi ayrı kaynak dosyası ve montaj ve bağlantı adımları gerektirir.C ve C++ fonksiyon bağımsız değişkenleri genellikle yığın üzerinde geçirilen bu nedenle bu sürümü power2 işlevi bağımsız değişkenlerinin yığında konumlarına göre erişir.(Dikkat edin modeli yönergesi, masm ve bazı diğer birleştiriciler da yığını bağımsız değişkenleri ve yerel yığın değişken adıyla erişmenize olanak sağlar.)
Örnek
Bu program Yazar power2 işlevi satır içi derleme kod ile:
// 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
}
Satır içi sürümü power2 işlev adı bağımsız değişkenlerini gösterir ve aynı kaynak dosyayla aynı programın geri kalanı görünür.Bu sürüm, daha az derleme yönergeleri de gerektirir.
Çünkü satır içi sürümü power2 c yürütmez return deyimi, zararsız bir uyarı 2 veya daha yüksek uyarı düzeyinde derlerseniz oluyor.İşlev bir değer döndürür, ancak içinde yokluğunda söyleyemezsiniz derleyici bir return ifadesi.Kullanabileceğiniz # pragma uyarı bu uyarı oluşturmayı devre dışı bırakmak için.
SON Microsoft özel