内嵌汇编测试代码(By G-Spider): #include <stdio.h> int _stdcall RGBATORGB(char *dest, char *src, unsigned int len); int fun1(); int g_1 = 10; int main() { char *Src="abcdefghijklmnoabcdefghijklmnoabcdefghijklmnoabcdefghijklmno"; char Dst[64]={0}; unsigned int len,lenrgb; len = strlen(Src); lenrgb=RGBATORGB(Dst,Src,len); printf("RGB_LEN =%d/nRGB_BYTE=%s/n",lenrgb,Dst); printf("String_LEN =%d/n",fun1()); return 0; } //================================================================== int __declspec(naked) _stdcall RGBATORGB(char *dest, char *src, unsigned int len) { _asm { push ebp mov ebp,esp push esi push edi mov edi,[ebp+8] ;//dest mov esi,[ebp+12] ;//src mov ecx,[ebp+16] ;//len ;=================== shr ecx,2 test ecx,ecx jz A01 cld A00: movsd dec edi loop A00 ;=================== mov BYTE ptr [edi],0 ;//清理最后一个无用字节 A01: mov eax,edi sub eax,[ebp+8] ;//RGB有效字节数,作为返回值 pop edi pop esi leave ret 12 } } /* 低地址: ........ ........ 局部变量内存区 局部变量2 局部变量1 ebp-> 调用函数的栈基址EBP 调用函数的栈基址 返回地址 入口参数1 入口参数2 ......... ......... ......... 入口参数n */ int fun1() { int iLen = strlen("helloworld!"); __asm { ;//pushad ;//mov ebx, g_1 mov eax, [ebp-4] ;//eax作为返回值 iLen ;//popad } }