我已经发布 TI 28xx DSP 论坛的这个问题 但还没有听到回应,想也许这里有人知道。


我知道如何用汇编语言编写函数,以便它们可以用 C 语言调用;如果 C 可调用名称是 foo() 那么汇编函数被命名为 _foo().

如果我想使用 C++ 并优化汇编中的类方法怎么办?我怎么做?我认为唯一的主要问题是:

  • 命名
  • 访问“this”指针
  • 通过某种方式知道偏移量来访问类成员

如果我不想担心最后两个,那么也许我会编写一个静态成员函数并执行以下操作:

class MyClass
{
  int x;
  static int _doSomething(int u); // implement this in assembly
public:
  inline void doSomething() { x = _doSomething(x); } 
  // lightweight C++ wrapper to handle the class member / "this" pointer stuff
};
有帮助吗?

解决方案

this 使用平台上的标准调用约定,将指针作为附加参数传递给函数。在我熟悉的所有平台上,它都作为第一个参数传递,但我没有进行大量 C++ 编码,因此我不确定标准是否保证这一点。您始终可以在您的平台上反汇编一些 C++ 代码来确认。

C++ 符号命名比 C 中的符号命名要痛苦得多,并且因编译器而异。我想您可以通过反汇编编译的函数定义来找出要使用的正确符号名称,只需确保:该函数是正确类的成员,并且具有正确数量和类型的参数。

除非你真的需要在原位重现 C++ 函数,否则我可能只会创建一个标准 C 函数并执行通常的操作 extern "C" { ... } 围绕其声明。

其他提示

您的编译器有内联汇编语法吗?如果有的话,它可能是最简单的选择,您可以让编译器处理函数命名和调用语法部分。

另外,Stephen 建议将 C++ 方法编写为“简单”C 函数调用的内联包装器,这也是一个不错的建议。(您可能想让它只是一个普通函数,而不是您帖子中的静态成员函数,以获得一个简单的 C 接口。)

我会找到编译器相关标志并在 C++ 函数中编写程序集。通常有多种方法可以从汇编部分引用局部变量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top