Поспрашивал на форумах че-то знают, но не все
Вообщем по их советам получается, что нужно делать так:
Код:
struct IntGate
{
void * far_addr;
int wc:4;
unsigned zero2:4;
unsigned type:4;
unsigned zero1:1;
unsigned dpl:2;
int p:1;
};
#pragma pack(pop)
void setInterreputHandler(int num, void (*handler)() )
{
IntGate *gate_arr;
__asm__("mov %idtr, %[gate_arr]");
IntGate handler_gate = {
handler, /*адрес обработчика*/
0, /*не используем*/
0, /*должен быть 0*/
14, /*тип шлюза - 0b1110*/
0, /*должен быть 0*/
1, /*с любыми привелегиями*/
1 /*присутствает*/
}
gate_arr[num] = handler_gate;
}
Что-то мне подсказывает, что я все не так понял)