Sdílet prostřednictvím


Funkce psaní s vloženou sestavení

Konkrétní společnosti Microsoft

Psaní kódu sestavení vložené funkce je snadno předat argumenty funkce a vrátit hodnotu.Následující příklady porovnání funkce nejprve pro samostatné assembler zapsán a pak pro inline assembler přepsána.Volaná funkce power2, přijímá dva parametry, které se vynásobí první parametr 2 výkonu druhý parametr.Vytvořené pro samostatné assembler, funkce může vypadat například takto:

; 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

Od zápisu pro samostatné assembler, funkce vyžaduje samostatné zdrojový soubor a sestavení a propojení kroky.C a C++ argumenty funkce jsou obvykle předávány v zásobníku, tak tuto verzi power2 funkce přistupuje argumenty podle jejich pozice v zásobníku.(Všimněte si, že modelu směrnice k dispozici v jazyk MASM a některé montéři také umožňuje získat přístup k zásobníku místní proměnné a argumenty zásobníku podle názvu.)

Příklad

Tento program zapisuje power2 funkce vloženého kódu sestavení:

// 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
}

Verze vložené power2 funkce odkazuje na argumenty podle názvu a zobrazí se v souboru stejné zdroje jako zbytek programu.Tato verze také vyžaduje méně pokyny pro sestavení.

Protože vložený verzi power2 neprovede c return prohlášení, způsobí neškodné upozornění Pokud kompilace na úrovni upozornění 2 nebo vyšší.Funkce vrací hodnotu, ale kompilátor nemůže zjistit, zda neexistují return prohlášení.Můžete použít upozornění # pragma zakázání generování tohoto upozornění.

Konec konkrétní společnosti Microsoft

Viz také

Referenční dokumentace

Pomocí __asm bloky c nebo C++