- 论坛徽章:
- 0
|
设置IDT
_IDT:
.rept 1
Gate SelectorFlatCode, OHandler, 0, DA_386IGate
.endr
.0x80: Gate SelectorFlatCode, IHandler, 0, DA_386IGate
门 宏定义
.macro Gate Selector, Offset, PCount, Attr
.2byte \Offset & 0xFFFF
.2byte \Selector
.2byte (\PCount & 0x1F) | ((\Attr << & 0xFF00)
.2byte ((\Offset >> 16) & 0xFFFF)
.endm
中断函数
_OHandler:
.set OHandler , (BaseOfSetupPhyAddress + _OHandler)
movb $0x0c,
%ah mov 'O',
%al mov %ax,
%gs 80*6 + 1) * 2)
iretl
_IHandler:
.set IHandler , (BaseOfSetupPhyAddress + _IHandler)
movb $0x0c, %ah
movb 'I', %al
mov %ax, %gs 80*6 + 0) * 2)
iretl
一编译就报错
invalid operands (*UND* and *ABS* sections) for `&'
operands (*UND* and *ABS* sections) for `>>'
如果改
.set OHandler , (BaseOfSetupPhyAddress + _OHandler)
.set IHandler , (BaseOfSetupPhyAddress + _IHandler)
为
.set OHandler , (BaseOfSetupPhyAddress)
.set IHandler , (BaseOfSetupPhyAddress )
就不会报错!
请问标签地址加上一个地址后就不能做与运算和移位运算了吗,是哪里错误,望各位解惑,谢谢! |
|