#define idt[n] 0x5800+8*n
#define set_intr_gate(n,addr) set_gate(idt[n],14,0,addr)
#define set_trap_gate(n,addr) set_gate(idt[n],15,0,addr)
#define set_system_gate(n,addr) set_gate(idt[n],15,3,addr)
#define set_gate(gate_addr,type,dpl,addr)\
_asm_("movw %%dx,%%ax\n\t\
movw %0,%%dx\n\t\
movl %%eax,%1\n\t\
movl %%edx,%2"\
: :"i"((short)(0x8000+(dpl<<13)+(type<<),\
"o"(*((char*)(gate_addr))),\
"o"(*(4+(char*)(gate_addr))),\
"d"((char*)(addr)),"a"(0x00080000))
在另一个c文件中是这样调用的set_trap_gate(2,&nmi);
在编译c文件的时候提示错误parse error before":"token
?????? |