如何在 GCC 基本 asm 中使用预处理器宏?

How to use preprocessor macro in GCC basic asm?

我需要在 GCC 中编写 basic asm 代码,它使用头文件中定义的立即数。我知道如何在 extended asm 中执行此操作,但如何在没有任何输入和输出参数的基本 asm 中执行此操作?

您可以使用 stringize 类型 C 预处理器宏将常量值转换为字符串。然后您可以使用该字符串来构造基本的内联汇编语句。一个例子是:

#define STRINGIZE1(x) #x
#define STRINGIZE(x) STRINGIZE1(x)

#define STACK_ADDR 0x1000

int main()
{
    asm ("movl $" STRINGIZE(STACK_ADDR) ", %esp");

    return 0;
}

这个例子应该生成这条汇编指令:

movl [=11=]x1000, %esp

注意:此代码并非可运行的示例。