如何从汇编例程中调用 c 宏?
How do I call a c macro from an assembly routine?
我有一个宏 X
可以执行类似这样的操作。
#define X(a,b,c) \
a.foo = b; \
a.bar = c;
我想从汇编例程中调用 X
,如下所示:
.data
pushl $eax;
call X(a, b, c);
有办法吗?
宏不是函数,没有地址,不能调用。
宏由预处理器求值。使用它们只会导致简单的文本替换,因此它们只存在于源文件中,无处可寻。
但是,您可以为宏设置一个包装函数并改为调用它。像这样:
#define X(a, b, c) (a).foo = (b); \
(a).bar = (c)
void _X(struct foo *a, int b, int c)
{
X(*a, b, c);
}
但这首先消除了对宏的需求。所以你还不如把宏去掉,用一个函数。
我有一个宏 X
可以执行类似这样的操作。
#define X(a,b,c) \
a.foo = b; \
a.bar = c;
我想从汇编例程中调用 X
,如下所示:
.data
pushl $eax;
call X(a, b, c);
有办法吗?
宏不是函数,没有地址,不能调用。
宏由预处理器求值。使用它们只会导致简单的文本替换,因此它们只存在于源文件中,无处可寻。
但是,您可以为宏设置一个包装函数并改为调用它。像这样:
#define X(a, b, c) (a).foo = (b); \
(a).bar = (c)
void _X(struct foo *a, int b, int c)
{
X(*a, b, c);
}
但这首先消除了对宏的需求。所以你还不如把宏去掉,用一个函数。