在C中嵌入汇编程序,编译器为您查找寄存器

bug*_*t77 3 c assembly inline-assembly cpu-registers

将汇编代码嵌入到C/C++程序中时,可以通过使用push指令保存寄存器(或指定编译器的clobber列表支持它)来避免破坏寄存器.

如果你包括汇编内联并希望避免推送和弹出破坏寄存器的开销,有没有办法让gcc为你选择寄存器(例如它知道它们中没有有用的信息).

Ada*_*eld 9

是.您可以指定希望将特定变量(输入或输出)存储在寄存器中,但不必指定寄存器.有关详细说明,请参阅此文档.本质上,内联汇编看起来像这样:

asm("your assembly instructions"
      : output1("=a"),  // I want output1 in the eax register
        output2("=r"),  // output2 can be in any general-purpose register
        output3("=q"),  // output3 can be in eax, ebx, ecx, or edx
        output4("=A")   // output4 can be in eax or edx
      : /* inputs */
      : /* clobbered registers */
   );
Run Code Online (Sandbox Code Playgroud)