Aracılığıyla paylaş


İş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

Ayrıca bkz.

Başvuru

c veya C++ __asm bloklar halinde kullanma