"Junk after expression" 使用 GNU 汇编程序宏

"Junk after expression" using GNU Assembler macro

我大致按照 this guide 设置一个简单的 OS。它提供了一些用于 NASM 的程序集,但我使用的是 GNU 汇编程序。

在我正在使用的程序集文件的顶部

.intel_syntax noprefix

我定义了一个这样的宏

.macro no_error_code_handler num
.global interrupt_handler_\num
.type interrupt_handler_\num, @function
interrupt_handler_\num:
    push dword 0
    push dword \num
    jmp common_int_handler
.endm

如果重要的话,common_int_handler 在附近定义为

common_int_handler:
    pushad
    call int_handler # This is a C function
    popad
    add esp, 8
    iret

然后最后我得到了这条线

no_error_code_handler 0

我希望扩展到类似

.global interrupt_handler_0
.type interrupt_handler_0, @function
interrupt_handler_0:
    push dword 0
    push dword 0
    jmp common_int_handler

编译时,no_error_code_handler 0 行出现错误,说

Assembler messages:
Error: junk `0' after expression
Error: junk `0' after expression

它是否与将类型定义为函数有关,即使它的行为不像普通函数?自从我在 iret 指令之后离开后,我应该在某个地方使用 .exitm 吗?

以下行导致错误

push dword 0
push dword \num

dword 在此上下文中无效。

push 0
push \num

删除双字可以解决问题