Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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