Ok, hat sich erledigt...
nach langem probieren hab ich den Fehler gefunden:
Ich habe den non maskable Interrupt 2 mal in die Tabelle geschrieben und habe damit alle Weiteren Interrupts um eine Stelle nach hinten gerückt. 

dabei war das so offensichtlich:
char *exception_messages[] =
{
    "Division By Zero",
    "Debug",
    "Non Maskable Interrupt",
    "Non Maskable Interrupt",
    "Breakpoint",
    ...
sry wegen dem Eintrag.
Aber ich habe noch immer ein problem mit dem pit:
Ich hatte mir ein wenig code geschrieben um den pit zu bedienen:
unsigned long long ticks = 0;
char second = 0;
char seconds = 0;
char minutes = 0;
char hours = 0;
void timer_handler(struct regs *r)
{
	printk("tick");
        second++
	ticks++;
	
	if(second == 100);
	{
		seconds++;
                second = 0;
	}
	if(seconds == 60)
	{
		seconds = 0;
		minutes++;
	}
	if(minutes == 60)
	{
		minutes = 0;
		hours++;
	}
	if(hours == 24)
	{
		hours = 0;
		days++;
	}
}
Diese Funktion wird durch einen Interrupt auf Irq 0 ausgelöst.
Dann habe ich eine Funktion die nur wartet:
void timer_wait(long long int wait_ticks)
{
	    long long eticks;
    eticks = ticks + wait_ticks;
    while(ticks < eticks);
}
Mein Problem ist jetzt, das zwar der Handler ständig ausgeführt wird, aber meine warten-Methode still steht.
also immer wenn ich timer_wait(...) ausführe macht der Recher nur munter meinen Bildschirm voll, aber er tut sonst nix mehr.
Kann mir bitte jemand helfen?
Danke im voraus.