Potrebno je da linkuješ jedan kompajlovani ASM file koji reaguje na interapte sa kompajlovanim C fajlom koji sadrži potrebne funkcije za reagovanje na interapt.
Prvo kod koji reaguje na interapt u ASM-u:
Code:
isr0:
pusha
call _nas_interrupt_c
popa
iret
Iznad toga, instrukcija za povezivanje sa funkcijom u eksternom C fajlu (obratiti pažnju na donju crtu ispred imena funkcije - obavezna je, iako ne postoji u C kodu):
Code:
[extern _nas_interrupt_c]
Evo primer kako bi 1 član IDT tabele trebao da izgleda:
Code:
dw isr0 ;dakle, pokazujemo na adresu gde je isr0 rutina, pa kada interapt opali, idemo pravac tamo
dw 0x08
dw 1000111000000000b
dw 0
Sledi kod za reagovanje na interapt u C-u:
Code:
void nas_interrupt_c() {/* Tralala */}
E, sad... pitanje je koliko tebi zapravo treba da taj kod bude u C-u? Pitam zbog toga što ne verujem da si već ušao u protected mode (32bit), a nisam siguran da li GCC podržava kompajliranje koda u 16bitnom mode-u niti da li je vredno baš bakćati se u tolikoj meri za to. Lakše bi ti možda bilo da umesto onog "call _nas_interrupt_c" staviš tvoj kod po potrebi u ASM-u.
A man is smart. People are stupid.