Udostępnij za pośrednictwem


Funkcje pisania za pomocą wbudowanego zestawu

Programu Microsoft

Jeśli piszesz funkcji z kodu zestawu wbudowanego jest łatwo przekazywać argumenty do funkcji i zwracanie wartości z niego.Następujące przykłady porównać najpierw napisane dla osobnych assembler i zapisywane assembler wbudowanej funkcji.Funkcja o nazwie power2, otrzymuje dwa parametry, pomnożenie pierwszy parametr 2 do potęgi drugiego parametru.Napisane dla osobnych assembler, funkcja może wyglądać następująco:

; 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

Ponieważ napisano go assembler oddzielnych, funkcja wymaga kroki oddzielne źródło pliku i montażu i łącza.C i C++ argumenty funkcji są zazwyczaj przesyłane na stosie, więc to wersja power2 funkcja uzyskuje dostęp do jej argumentów przez ich położenia na stosie.(Należy zauważyć, że MODEL dyrektywy, dostępne w MORGÓW i innych montownie umożliwia również dostęp do stosu argumenty i zmienne lokalne stos według nazwy.)

Przykład

Ten program zapisuje power2 funkcji z kodu zestawu wbudowane:

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

Wersja inline power2 funkcji odwołuje się do jej argumentów przez nazwę i pojawia się w tym samym pliku źródłowego w pozostałej części programu.Ta wersja wymaga również mniej instrukcje montażu.

Ponieważ wersja inline power2 nie jest wykonywany c return instrukcji, powoduje nieszkodliwe Ostrzeżenie Jeśli skompilować na poziomie ostrzeżeń, 2 lub wyższy.Funkcja zwraca wartość, ale kompilator nie może stwierdzić, że w przypadku braku return instrukcji.Można użyć Ostrzeżenie # pragma Aby wyłączyć generowanie to ostrzeżenie.

KONIEC Microsoft szczególne

Zobacz też

Informacje

Za pomocą c lub C++ w blokach __asm