可以在内联asm中使用宏吗?

时间:2012-05-08 09:11:57

标签: assembly linux-kernel x86 kernel

代码如下:

\#define CS 0x18

asm ("pushl CS"
    );

或某事作为输入参数:

asm("pushl %0 \n\t"

     :"m"(CS) \

    )

可以在上面的内联asm代码中使用宏CS吗?

2 个答案:

答案 0 :(得分:2)

CS可用于第二个例子,而不是第一个例子。

宏在编译器/汇编器工作之前被替换,因此它们无论C还是汇编都可以工作 但是宏没有在字符串中扩展,所以第一个例子不起作用。

如果您想让第一个示例正常工作,请使用字符串化:

#define STR1(x) #x
#define STR(x) STR1(x)
asm ("pushl " STR(CS));

这会将STR(CS)扩展为"0x18"并将其与"pushl "连接。

答案 1 :(得分:-1)

或在x86 asm中构建一个

call macro1 ;from anywhere in asm code


.macro1
do stuff
ret