Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Microsoft-specifik
Anmärkning
Inbyggd assemblerkod är endast tillgänglig för x86-målplattformar. För liknande funktioner i x64- eller ARM64-kod använder du inbyggda kompilatorer.
Om du skriver en funktion med infogad sammansättningskod är det enkelt att skicka argument till funktionen och returnera ett värde från den. I följande exempel jämförs en funktion som först har skrivits för en separat assembler och sedan skrivs om för en inline-assembler. Funktionen, som kallas power2, tar emot två parametrar och multiplicerar den första parametern med 2 med kraften i den andra parametern. Som en separat assemblerfil kan funktionen se ut så här:
; 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
Eftersom den är skriven som en separat assemblerfil kräver funktionen separata sammansättnings- och länksteg. C- och C++-funktionsargument skickas vanligtvis på stacken, så den här versionen av funktionen kommer åt argumenten power2 genom deras positioner i stacken. (Direktivet MODEL , som finns i MASM och några andra assemblers, ger dig också åtkomst till stackargument och lokala stackvariabler efter namn.)
Exempel
Det här programmet skriver power2-funktionen med inbäddad assemblerkod.
// 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
}
Den infogade versionen av power2 funktionen refererar till dess argument efter namn och visas i samma källfil som resten av programmet. Den här versionen kräver också färre sammansättningsinstruktioner.
Eftersom den infogade versionen av power2 inte kör en C-instruktion return orsakar den en ofarlig varning om du kompilerar på varningsnivå 2 eller högre. Funktionen returnerar ett värde, men kompilatorn kan inte se att den gör det i avsaknad av en return -instruktion. Du kan använda #pragma warning för att inaktivera genereringen av den här varningen.
Avsluta Microsoft Specifik