인라인 어셈블리 함수를 작성합니다.
Microsoft 전용
인라인 어셈블리 코드를 사용 하는 함수를 작성 하는 경우 인수를 함수에 전달 하 고 값을 반환 하는 것이 더 쉽습니다.다음 예제에서는 먼저 별도 어셈블러에 대 한 기록 및 인라인 어셈블러에 대 한 다음 다시 작성 하는 함수를 비교 합니다.호출 하는 함수를 power2, 2의 두 번째 매개 변수에서 첫 번째 매개 변수를 곱하면 두 매개 변수를 받습니다.별도 어셈블러에 대 한 기록, 함수가 다음과 같을 수 있습니다.
; 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
별도 어셈블러에 대 한 작성 된 것 이므로 함수는 별도 소스 파일 및 어셈블리와 연결 단계가 필요 합니다.C 및 C++ 함수의 인수는 스택에 전달 됩니다 일반적으로 따라서이 버전의 power2 함수 인수는 스택의 해당 위치에 액세스 하는.(이때의 모델 지시문을 MASM 및 일부 다른 assemblers 사용할 수 또한 스택의 인수 및 로컬 스택 변수 이름을 사용 하 여 액세스할 수 있습니다.)
예제
이 프로그램이 기록의 power2 인라인 어셈블리 코드에 함수:
// 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
}
인라인 버전의 power2 함수 인수를 이름으로 참조 하 고 나머지 프로그램 같은 소스 파일에 표시 됩니다.이 버전은 또한 적은 어셈블리 명령이 필요합니다.
때문에 인라인 버전의 power2 는 C를 실행 하지 않습니다 return 문을 인해 치명적 경고 경고 수준 2 또는 높은 컴파일하는 경우입니다.이 함수는 값을 반환 하지 않지만 컴파일러 없을 경우에는 알 수 없습니다는 return 문입니다.사용할 수 있는 # pragma warning 사용 하지 않으려면이 경고를 생성 합니다.
Microsoft 특정 끝