内联汇编错误

时间:2009-05-04 17:12:51

标签: iphone xcode assembly arm

我正在使用iphone的内联汇编,我正在设备调试模式。

说明如下:

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

我收到了错误:

  

错误:预期')'tokedn'(''   错误:未知的寄存器名称'r'   'ASM'

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

5 个答案:

答案 0 :(得分:1)

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

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

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

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

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

顺便说一下,vfpmath库中有一些很好的iphone ARM组件示例。

答案 1 :(得分:0)

指令的一次修正 asm (“smlatb%0,%1,%2,%3 \ n \ t”:“= r”(临时):“r”(treg5):“r”(fac5): “r”(临时));

答案 2 :(得分:0)

我相信你应该这样做:

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

有关详细信息,请参阅this Stack Overflow question

答案 3 :(得分:0)

我添加了codewarrior样式的内联汇编             __asm {
                smlatb Temp,treg5,fac5,Temp} 在我选择的GCC 4.0语言下的构建选项卡下的项目设置中 选项允许CodeWarrior样式内联汇编 也选择了 允许'asm''内联''typeof'选项,代码最终工作

答案 4 :(得分:0)

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