如何在 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
注意:此代码并非可运行的示例。
我需要在 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
注意:此代码并非可运行的示例。