gpt4 book ai didi

c - x86 程序集 : Using #define'd constants as arguments in calls to to #define's macros

转载 作者:太空狗 更新时间:2023-10-29 16:08:15 25 4
gpt4 key购买 nike

我正致力于在 x86 程序集中手动构建 IDT 表。我在 .S 文件中使用 C 预处理器定义了以下宏:

// sets up an entry in the idt for a trap type
#define SETUP_IDT_ENTRY( name, num, istrap, segment, dpl ) \
lea name, %edx; \
movl $(KCODE << 16), %eax; \
movw $0x8e00, %dx; \
lea (idt + (8 * num)), %edi; \
movl %eax, (%edi); \
movl %edx, 4(%edi);

// sample set of args to a call to setup_dt_entry
#define M_DIVIDE _t_divide_ep, T_DIVIDE, 0, KCODE, 0

// the call
SETUP_IDT_ENTRY( M_DIVIDE )

但是,gcc 提示:error: macro "SETUP_IDT_ENTRY"requires 5 arguments, but only 1 given

我认为#define 函数的#define 参数在评估函数调用之前被扩展,在这种情况下 M_DIVIDE 将扩展为所需的五个参数和 SETUP_IDT_ENTRY 会很高兴。我尝试了各种括号组合,但似乎没有任何效果;有什么办法可以做到这一点吗?

注意:我知道在 x86 程序集中有其他方法可以构建 IDT,但这不是我要在这里回答的问题;我只是想弄清楚是否可以将宏扩展为宏参数。

最佳答案

参数本身被扩展,但参数的数量必须与宏定义相匹配。你需要一个额外的宏来让它工作:

#define IDT1(x) SETUP_IDT_ENTRY(x)

IDT1(M_DIVIDE)

更多信息 herehere .

关于c - x86 程序集 : Using #define'd constants as arguments in calls to to #define's macros,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14630563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com