1

希望有人可以帮助我解决这个问题。我从来没有学过 ASM,所以我不能用这个片段做任何事情。但是我需要它来处理它,它对我来说工作得很好(是我之前用于 VC++ 编程的代码片段的一部分,现在我在 Xcode 4.5 上),所以我不知道它到底是如何工作的。

我读过一些帖子,我必须设置引号。但是哪里?

    asm(
    fld newVal
    fabs
    fcom oldMax
    fstsw ax
    sahf
    jna else_
    fstp oldMax; // |newVal| > oldMax; pop to oldMax
    jmp endif_
else_:
    ffree st(0)
endif_:
     );

我在每一行,开头和结尾都尝试了引号。不要工作。

4

1 回答 1

2

asm是 Visual Studio 语法,GCC 和 Clang__asm__用于汇编语言。您的代码似乎也采用 Intel 语法,GCC 通常使用稍微不同的语法,称为 AT&T。您可以在GCC ASM 如何找到更多信息。

这样的事情将是一个很好的起点:

__asm__(
"fld %0\n"
"fabs\n"
"fcom %1\n"
"fstsw %%ax\n"
"sahf\n"
"jna 1f\n"
"fstp %1 ; |newVal| > oldMax; pop to oldMax\n"
"jmp 2f\n"
"1:\n"
"ffree %%st0\n"
"2:\n"
 : "=r"(newVal)
 : "r"(oldMax)
 : "%st0"
 );
于 2012-12-09T00:40:23.137 回答