c++ - 如何在 C++ 中进行内联汇编 (Visual Studio 2010)

标签 c++ visual-studio-2010 visual-c++ inline-assembly micro-optimization

我正在编写一个性能关键、数字运算的 C++ 项目,其中 70% 的时间用于 200 行核心模块。

我想使用内联汇编优化核心,但我对此完全陌生。不过,我知道一些 x86 汇编语言,包括 GCC 和 NASM 使用的语言。

我所知道的:

我必须将汇编程序指令放在 _asm{} 我希望它们所在的位置。

问题:

  • 我不知道从哪里开始。当我的内联汇编发挥作用时,哪个寄存器中有什么?

最佳答案

您可以通过名称访问变量并将它们复制到寄存器中。 这是来自 MSDN 的示例:

int power2( int num, int power )
{
   __asm
   {
      mov eax, num    ; Get first argument
      mov ecx, power  ; Get second argument
      shl eax, cl     ; EAX = EAX * ( 2 to the power of CL )
   }
   // Return with result in EAX
}

Using C or C++ in ASM blocks您可能也很感兴趣。

关于c++ - 如何在 C++ 中进行内联汇编 (Visual Studio 2010),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839710/

相关文章:

c++ - OpenCV CUDA 函数缺失 - 命名空间 "cv:cuda"没有成员 "resize"

debugging - 如何在VC++ 6中调试 "debug assertion failure"

c++ - 寻找,相对或绝对位置?

c++ - 带有 new 运算符的类中的静态成员变量

c++ - 我可以使用什么 STL 函数来替换 "while (var != nullptr)"循环?

.net - 当 Visual Studio 编译已经启动时,我可以停止它吗?

c++ - 为什么我转发到单独命名空间中的 std::make_pair 不明确?

c++ - 如何在多个 .cpp 文件中使用全局变量?

c# - 另一个进程正在使用数据库...但是什么进程?

c++ - "1.$"是什么意思?