c – __asm {};返回eax的值?

c – __asm {};返回eax的值?,第1张

概述简单的问题. C中的函数asm用于在代码中进行内联汇编.但它又回归了什么?它是传统的eax,如果没有,它会返回什么? __asm__本身不返回值. C标准没有定义__asm__应该如何处理返回值,因此编译器之间的行为可能不同.您声明Visual Studio示例有效,但Visual Studio使用__asm. __asm__至少由GCC使用. 视觉工作室 要在C程序中获得结果,应将返回值放在汇编 简单的问题. 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的值?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存