0

代码如下:

\#define CS 0x18

asm ("pushl CS"
    );

或作为输入参数的东西:

asm("pushl %0 \n\t"

     :"m"(CS) \

    )

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

4

2 回答 2

2

CS可以用在第二个例子中,而不是第一个。

宏在编译器/汇编器工作之前被替换,因此无论 C 或汇编如何,它们都可以工作。
但是宏没有在字符串中展开,所以第一个例子是行不通的。

如果要使第一个示例工作,请使用字符串化:

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

这将扩展STR(CS)"0x18"并将其与"pushl ".

于 2012-05-08T10:56:56.117 回答
-1

或者在 x86 asm 中构建一个

call macro1 ;from anywhere in asm code


.macro1
do stuff
ret
于 2013-05-29T11:08:24.330 回答