我大致遵循this guide来设置简单的操作系统。它提供了一些用于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
即使类型的行为不像普通函数,它与将类型定义为函数有关系吗?自从.exitm
指令离开后,我应该在某个地方使用iret
吗?
答案 0 :(得分:1)
以下几行引起了错误
push dword 0
push dword \num
dword
在这种情况下无效。
push 0
push \num
删除dword解决了问题