内联汇编错误

发布于 2024-07-19 06:57:22 字数 323 浏览 6 评论 0原文

我正在使用 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。 有任何想法吗?

I am using inline assembly for iphone, I working for device debug mode.

The instruction is as follows:

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

And I am getting an errors:

error : expected ')' before tokedn '('
error: unknown register name 'r' in
'asm'

I am using X-code 3.0 and gcc 4.0. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

给妤﹃绝世温柔 2024-07-26 06:57:22

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

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

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

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

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

顺便说一句,vfpmath 库中有一些 iphone ARM 汇编的好示例。

There should only be three colons, not four.

The arguments following the first colon specify the inputs, then the outputs, then the clobber list.

If you have multiple parameters you can use a comma to separate them rather then colon.

In your example. I assume, that temp is your output and treg5, fac5 are your inputs.
You probably want something like this.

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

Btw, there are some good examples of iphone ARM assembly in the vfpmath library.

终难遇 2024-07-26 06:57:22

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

one correction the instruction is
asm("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp) );

[旋木] 2024-07-26 06:57:22

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

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

请参阅这个堆栈溢出问题了解详细信息。

I believe you should be doing something like this:

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

See this Stack Overflow question for details.

许你一世情深 2024-07-26 06:57:22

我添加了 codewarrior 风格的内联汇编
__asm{
smlatb 温度、treg5、fac5、温度 }
并在 GCC 4.0 语言下的构建选项卡下的项目设置中选择
允许 CodeWarrior 风格的内联汇编选项
还选择了
允许 'asm' 'inline' 'typeof' 选项,代码终于工作了

I added codewarrior style inline assembly
__asm{
smlatb Temp, treg5, fac5 ,Temp }
and in prject settings under build tab under GCC 4.0 language I selected
the option Allow CodeWarrior-Style Inline Assembly
also selected
allow 'asm' 'inline' 'typeof' options and the code worked finally

长安忆 2024-07-26 06:57:22

您的 :(冒号)过多。 它们用作分隔符。 因此,您应该使用一种方法将汇编代码与输出变量分开,另一种方法将输出变量与输入变量分开。 它类似于 asm(“程序集”:<输出>:<输入>:[额外属性])。 查找 GCC 的“内联汇编”,您会看到一些示例。

You have got too many : (colons). They are used as separators. So, you should have one to separate the assembly code with the output variable, and one to separate the output variable from the input variables. It's something like asm ("assembly" : <output> : <inputs> : [extra attributes]). Look up 'inline assembly' for GCC and you will see some examples.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文