bug*_*t77 3 c assembly inline-assembly cpu-registers
将汇编代码嵌入到C/C++程序中时,可以通过使用push指令保存寄存器(或指定编译器的clobber列表支持它)来避免破坏寄存器.
如果你包括汇编内联并希望避免推送和弹出破坏寄存器的开销,有没有办法让gcc为你选择寄存器(例如它知道它们中没有有用的信息).
是.您可以指定希望将特定变量(输入或输出)存储在寄存器中,但不必指定寄存器.有关详细说明,请参阅此文档.本质上,内联汇编看起来像这样:
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)