Nein, iret sichert nur das eflags Register und cs:eip. Alle anderen Register wie eax-edx,esi,edi,ebp etc. musst du mittels push/pop selber sichern und wieder vom stack holen. Warum der keyboard irq funktioniert kann ich jetzt nicht sagen, aber sobald er aufgerufen wird und Register verändert werden, stimmen nach der rückkehr die Werte nicht mehr. Also als Beispiel:
irq1:
push eax
push ebx
push ecx ;Werte speichern
... ;Code der die Register eax, ebx und ecx verändert
mov al,20h
out 20h,al ;EOI
pop ecx ;Werte zurück holen
pop ebx
pop eax
iret
Multitasking hast du noch nicht, oder? Weil der irq0 da sonst ohne Sichern der Register alles kaput machen würde.
bitmaster