代码如下:
\#define CS 0x18
asm ("pushl CS"
);
或作为输入参数的东西:
asm("pushl %0 \n\t"
:"m"(CS) \
)
可以在上面的内联 asm 代码中使用宏 CS 吗?
代码如下:
\#define CS 0x18
asm ("pushl CS"
);
或作为输入参数的东西:
asm("pushl %0 \n\t"
:"m"(CS) \
)
可以在上面的内联 asm 代码中使用宏 CS 吗?
CS可以用在第二个例子中,而不是第一个。
宏在编译器/汇编器工作之前被替换,因此无论 C 或汇编如何,它们都可以工作。
但是宏没有在字符串中展开,所以第一个例子是行不通的。
如果要使第一个示例工作,请使用字符串化:
#define STR1(x) #x
#define STR(x) STR1(x)
asm ("pushl " STR(CS));
这将扩展STR(CS)
为"0x18"
并将其与"pushl "
.
或者在 x86 asm 中构建一个
call macro1 ;from anywhere in asm code
.macro1
do stuff
ret