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