c – __asm {};返回eax的值?
发布时间:2020-12-16 10:02:32 所属栏目:百科 来源:网络整理
导读:简单的问题. C中的函数asm用于在代码中进行内联汇编.但它又回归了什么?它是传统的eax,如果没有,它会返回什么? 解决方法 __asm__本身不返回值. C标准没有定义__asm__应该如何处理返回值,因此编译器之间的行为可能不同.您声明Visual Studio示例有效,但Visual
简单的问题. C中的函数asm用于在代码中进行内联汇编.但它又回归了什么?它是传统的eax,如果没有,它会返回什么?
解决方法
__asm__本身不返回值. C标准没有定义__asm__应该如何处理返回值,因此编译器之间的行为可能不同.您声明Visual Studio示例有效,但Visual Studio使用__asm. __asm__至少由GCC使用.
视觉工作室 要在C程序中获得结果,应将返回值放在汇编代码中的eax中,然后从函数返回.调用者将接收eax的内容作为返回值. Visual Studio 2015 documentation: 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 } GCC GCC inline assembly HOWTO不包含类似的示例.这可能意味着您不能像在Visual Studio中那样使用隐式返回.但是,HOWTO显示您可以将结果存储到程序集块内的C变量,并在程序集块结束后返回该变量的值. 一个字符串复制函数的例子,返回dest的值: static inline char * strcpy(char * dest,const char *src) { int d0,d1,d2; __asm__ __volatile__( "1:tlodsbnt" "stosbnt" "testb %%al,%%alnt" "jne 1b" : "=&S" (d0),"=&D" (d1),"=&a" (d2) : "0" (src),"1" (dest) : "memory"); return dest; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |