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

时间:2018-11-28 16:14:03

标签: gcc inline-assembly

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

1 个答案:

答案 0 :(得分:2)

您可以使用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 $0x1000, %esp

注意:此代码并非示例。