Ich hab es selbst herausgefunden was der Fehler war, aber ein neues Problem ist da. Wenn die Register vor den Exceptions oder Interrupt gesichert und nach dem Code wieder hergestellt werden funktionier das Laden der IDT ohne Absturz. Aber jetzt wollte ich den selbst gemachten Interrupt 32 ausprobieren, die Anweisungen des Int 32 funktionier ja, aber Exceptions 13 ausgelöst, wenn mit Iret zurück gesprungen wird, wonach der Rechner abstürzt. Was ist die Fehler Ursache.
IRQ_01:
pusha
push es
push ds
push fs
push gs
mov al, 1
jmp irqA
So sehen alle Exceptions aus, nur ein anderer Wert wir zu al gemovt, die Nummer des Exceptions.
IRQ_32:
pusha
push es
push ds
push fs
push gs
xor si, si
mov ax,3
shl eax, 3
mov ds, ax
mov cl, 'h'
mov [si],cl
inc si
inc si
mov cl, 'a'
mov [si],cl
inc si
inc si
mov cl, 'l'
mov [si],cl
inc si
inc si
mov cl, 'l'
mov [si],cl
inc si
inc si
mov cl, 'o'
mov [si],cl
pop gs
pop fs
pop ds
pop es
popa
pop eax
mov ecx, 0x2fffff
rr2:
loop rr2 ;warteschleife
iret
irqA:
xor si, si
mov cl, al
mov ax,3
shl eax, 3
mov ds, ax
mov al, cl
mov ch, '0'
aam
add ah, ch
mov [si],ah
inc si
inc si
add al, ch
mov [si],al
mov ecx, 0xffff ;warteschleife
kk5:
loop kk5
pop gs
pop fs
pop ds
pop es
popa
iret