0

我正在为 iphone 使用内联汇编,我在设备调试模式下工作。

指令如下:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp) );

我收到一个错误:

错误:tokedn '(' 之前的预期 ')' 错误:'asm' 中的未知寄存器名称 'r'

我正在使用 X-code 3.0 和 gcc 4.0。有任何想法吗?

4

5 回答 5

1

应该只有三个冒号,而不是四个。

第一个冒号后面的参数指定输入,然后是输出,然后是clobber 列表。

如果您有多个参数,您可以使用逗号而不是冒号来分隔它们。

在你的例子中。我假设 temp 是您的输出,而 treg5, fac5 是您的输入。你可能想要这样的东西。

__asm__("smlatb %0, %1, %2, %0 \n\t"
        : "=r"(Temp) 
        : "0"(Temp), "r"(treg5), "r"(fac5)
        :);

顺便说一句, vfpmath库中有一些很好的 iphone ARM 程序集示例。

于 2010-03-27T20:54:59.533 回答
0

你有太多:(冒号)。它们用作分隔符。因此,您应该有一个将汇编代码与输出变量分开,一个将输出变量与输入变量分开。有点像asm ("assembly" : <output> : <inputs> : [extra attributes])。查找 GCC 的“内联汇编”,您将看到一些示例。

于 2009-05-06T06:18:33.937 回答
0

我相信你应该做这样的事情:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp));

有关详细信息,请参阅此 Stack Overflow 问题

于 2009-05-04T17:44:30.200 回答
0

我添加了 codewarrior 风格的内联汇编 __asm{
smlatb Temp, treg5, fac5 ,Temp } 并在 GCC 4.0 语言下的 build 选项卡下的项目设置中我选择了选项 Allow CodeWarrior-Style Inline Assembly 也选择了 allow 'asm' 'inline' 'typeof'选项和代码终于工作了

于 2009-05-05T13:01:36.907 回答
0

一个更正指令是 asm ("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r “(温度));

于 2009-05-04T17:14:01.613 回答