LINUX.ORG.RU

Функции-прерывания для x86


0

0

Как реализовать для x86 платформы функции-прерывания на С? вариант с __attribute__((interrupt)) для x86 не подходит, что-то типа:

#define IRQ_HANDLER(func) void func (void);\
asm(#func ": pusha \n call _" #func " \n movb $0x20, %al \n outb %al, $0x20 \n popa \n iret \n");\
void _ ## func(void)

претендует на оригинальность, но добавляет дополнительный call в обработчик, чего не хотелось бы. Какие есть идеи? С препроцессором gnu c познакомился недавно, хотя на С/С++ программирую уже достаточно долго, в gnu c свои косяки. Есть, конечно, вариант писать обработчик на ассемблере, но хочется обвязку на С (хотя все равно активно использую ассемблерные вставки)

★★★

А где ты будешь их юзать???

в линуксе прерывания можно использовать только как обработчики irq. и всё. Ну ещё в виртуальной машине х86.

cvv ★★★★★
()
Ответ на: комментарий от cvv

А я в линуксе и не буду их использовать. Мне просто нужно средство красивого их описания для gcc. Честно говоря, другого метода я не нашел, кроме того, что указал в первом своем посте. Кстати, системный вызов в linux реализован именно через прерывания (программные, int 0x80 кажется)

Envel ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.