La escritura ejecuta el ensamblado en línea
Específicos de Microsoft
Si escribe una función con código de ensamblado en línea, es fácil pasar argumentos a la función y devolver un valor de.Los ejemplos siguientes se compara una función primero escrita para un ensamblador independiente y después reescrita para el ensamblador en línea.La función, denominada power2, recibe dos parámetros, multiplicando el primer parámetro por 2 a la potencia del segundo parámetro.Escriba para el ensamblador independiente, la función podría ser así:
; 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
Puesto que ha escrito para un ensamblador independiente, la función requiere pasos de un archivo de código fuente independiente y ensamblado y de vínculo.Los argumentos de la función de c y C++ se pasan normalmente en la pila, por lo que esta versión de acceso de la función de power2 sus argumentos por sus posiciones en la pila.(Observe que la directiva de Modelo , las disponibles en MASM y otros ensambladores, también permite obtener acceso a los argumentos de la pila y a variables locales de la pila por nombre.)
Ejemplo
Este programa escribe la función de power2 con código de ensamblado en línea:
// 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
}
La versión en línea de la función de power2 hace referencia a sus argumentos por nombre y aparece en el mismo archivo de código fuente que el resto del programa.esta versión también requiere menos instrucciones de ensamblado.
Dado que la versión en línea de power2 no ejecuta la instrucción de C++. return , provoca una advertencia inofensiva si compila en el nivel de advertencia 2 o más alto.La función devuelve un valor, pero el compilador no puede indicar que en ausencia de una instrucción de return .Puede utilizar #pragma warning deshabilitar la generación de esta advertencia.
Específico de Microsoft de FINAL