我正在为操作系统分配编写内联汇编代码。我对内联汇编以及gcc编译器将其转换为机器代码有一些疑问。
编辑:示例代码如下。哪个寄存器是最高绑定的?
unsigned long long top;
asm volatile("mov %0, %%rsp;"
:
:"r"(top)
:"memory");
答案 0 :(得分:1)
编译器具有复杂的寄存器分配策略,该策略用于内联汇编,就像其自身生成的代码一样。它可以为满足约束条件的asm参数使用任何寄存器或其他位置,因此很难预测可能使用的寄存器,并且高度依赖于周围的代码。
编译器通过将其他代码放入其他寄存器或溢出到内存中来确保保留已编译代码所需的其他值。程序员不必担心。