希望有人可以帮助我解决这个问题。 我从来没有学过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_:
);
我在开始和结束的每一行都试过引号。不要工作。
答案 0 :(得分:2)
asm
是Visual Studio语法,GCC和Clang使用__asm__
作为汇编语言。您的代码似乎也采用Intel语法,GCC通常使用稍微不同的语法AT& T.您可以在GCC ASM how to找到更多信息。
这样的事情将是一个开始的好地方:
__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"
);