VC++ 内联汇编函数调用方式

#include "stdafx.h" int g_nC=10; void UseParameter() { int a = 5,b=6,c; __asm { xor edx,edx ;edx=0 add edx,a ;edx +=a add edx,b ;edx +=b add edx,g_nC ;使用全局变量 mov c,edx ;c=edx } printf("UseParameter : %d/n",c); } __stdcall int stdcall_sub(int a,int b) { return a-b; } void UseStdCall() { int nRet=0; __asm { mov eax,6 mov ebx,5 push ebx push eax call stdcall_sub mov nRet,eax } printf("UseStdCall : %d/n",nRet); } __cdecl int cdecl_sub(int a,int b) { return a-b; } void UseCdecl() { int nRet=0; __asm { mov eax,6 mov ebx,5 push ebx push eax call cdecl_sub add esp,8 ;调用者维护栈平衡 mov nRet,eax } printf("UseCdecl : %d/n",nRet); } int main(int argc, char* argv[]) { UseParameter(); UseStdCall(); UseCdecl(); return 0; } //使用naked关键字,编译器将会以纯汇编编码函数 void __declspec(naked) MyNakedFunction() { // Naked functions must provide their own prolog. __asm { PUSH EBP MOV ESP, EBP SUB ESP, __LOCAL_SIZE } //... // And we must provide epilog. __asm { POP EBP RET } }

你可能感兴趣的:(VC++,内联汇编)