代码如下:
\#define CS 0x18
asm ("pushl CS"
);
或某事作为输入参数:
asm("pushl %0 \n\t"
:"m"(CS) \
)
可以在上面的内联asm代码中使用宏CS吗?
答案 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