将编译后的内联汇编嵌入回 C++

Embed compiled inline assembly back into C++

假设我做了一个C++程序并编译了它。现在你有了它的汇编代码。 那么,如果我使用asm()中的汇编代码,会得到完全相同的结果吗? 如果是,我们可以用它做什么?

大多数编译器通常都有一个选项可以生成完整的汇编列表,但是仅仅将生成的汇编代码插入 asm(" ") 是没有用的。

汇编列表的使用一般是为了理解编译器是如何工作的,以便在C/C++中编写代码,使得生成的汇编代码将是 1. 及时高效。 2. 节省内存。

在使用高级编译器优化的情况下,在时间或内存方面,生成的代码通常是 3. 与原始 C/C++ 代码的逻辑略有不同 4.可能包含错误。 完整列表有助于理解原始 C/C++ 代码与生成的汇编代码之间的联系。

  1. 在代码和数据的内存量有限的处理器中,在生成的汇编列表中查看内存代码和数据分配的大小可能很重要。
  2. 在实现通常要求对数据地址进行特定对齐的算法(例如 FFT)的情况下,确保这些对齐也得到满足可能很重要。

总而言之,汇编列表有助于在 C/C++ 中工作并保持(尽可能)高效的时间和内存,这些资源在嵌入式环境中可能会受到限制。

以后可以对汇编列表进行汇编以生成目标代码,这通常由编译器直接完成。