C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – __asm {};返回eax的值?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
简单的问题. 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:\tlodsb\n\t"
                       "stosb\n\t"
                       "TESTB %%al,%%al\n\t"
                       "jne 1b"
                     : "=&S" (d0),"=&d" (d1),"=&a" (d2)
                     : "0" (srC),"1" (dest) 
                     : "memory");
return dest;
}

大佬总结

以上是大佬教程为你收集整理的c – __asm {};返回eax的值?全部内容,希望文章能够帮你解决c – __asm {};返回eax的值?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。