大佬教程收集整理的这篇文章主要介绍了c – 为什么简单的内联汇编功能在GCC中不能正常工作?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我很肯定这个问题与英特尔风格的装配无关.
int Convert(double value) { _asm { fld value push eax fistp dword ptr [esp] pop eax } // The returned value is insane }
这些也是内联汇编功能吗?因为GCC使用completely different语法进行内联汇编程序.您可以使语法看起来更熟悉,请参阅wikipedia.
1 int Convert(double value) 2 { 3 int result; 4 __asm__ __volatile__ ( 5 "fist %0\n\t" 6 : "=m" (result) 7 : "t" (value) 8 ); 9 return result; 10 }
我是怎么做的. = m指定我们想要一个内存操作数来存储结果(我们不希望寄存器作为拳头不能用于那些). t指定值在堆栈顶部传递,这也确保了我们的正确清理.
编辑:
另一件要尝试的事情,假设gcc与xcode允许与msvc相同的内联汇编程序,是:
int Convert(double value) { int result; _asm { fld value push eax fistp dword ptr [esp] pop eax mov [result],eax } return result; }
这也应该关闭你可能会得到的关于丢失返回值的警告.可能只是因为允许您通过编写eax而不是msvc来从汇编程序块返回值更严格.
以上是大佬教程为你收集整理的c – 为什么简单的内联汇编功能在GCC中不能正常工作?全部内容,希望文章能够帮你解决c – 为什么简单的内联汇编功能在GCC中不能正常工作?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。