gpt4 book ai didi

c++ - 如何在 VS C++ 中使用 IA32 指令 'fabs'?

转载 作者:行者123 更新时间:2023-11-30 02:50:56 25 4
gpt4 key购买 nike

这是我第一次尝试使用汇编,我只是想使用英特尔架构指令 FABS。 (引用第 399 页的 this document)。

这只是为了清除符号位。

我对汇编的了解很少涉及源和目标,但我没有看到任何关于此指令的符号的引用。

下面是我使用它的尝试之一(使用 Visual Studio 2012,C++):

double myabs(double x){
__asm(fabs(x));
return x;
}

此特定尝试给出错误 C2400:“操作码”中的内联汇编程序语法错误;找到 '('


请注意,我想使用汇编指令,对可用的其他/“更好”选项不感兴趣。

最佳答案

几个要点:首先 - 您使用的是 gcc 风格的内联汇编,您可以使用 MS 风格 -

__asm{ ... }

第二 - 指令不是函数,所以括号也是错误的。

最后但也是最重要的 - fabs 不接受参数,它只在 FP 堆栈的顶部工作。您需要首先在那里显式加载您的变量。试试这个:

__asm {
fld x
fabs
fstp x
}

无论如何,使用旧的 x87 指令可能不是一件好事,它可能效率很低 - 您应该考虑切换到 SSE 解决方案,请参阅 - How to absolute 2 double or 4 floats using SSE instruction set? (Up to SSE4)

关于c++ - 如何在 VS C++ 中使用 IA32 指令 'fabs'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com