Hallo 
ich habe ein problem mit meinem interupthandler. die
IDT ist richtig aufgesetzt, aber wenn ich die interrupts aktiviere,
bekomme ich diese meldung, und das OS hängt sich auf.
interrupt_stub für den IRQ0
der dazugehörige (minimale) C-handler
komischerweise ist "r->int_no" laut bochs 0x212.
wahrscheinlich ist die regs struktur beschädigt.
mein verdacht ist, dass am anfang:
nur 2 Bytes statt 2 DWords gepusht werden. der disassembler sagt:
ich nutze den msvc-inline-assembler. wie kann ich den
dazu bringen, DWORDs zu pushen? "oush dword 0" geht nicht
danke im voraus

ich habe ein problem mit meinem interupthandler. die
IDT ist richtig aufgesetzt, aber wenn ich die interrupts aktiviere,
bekomme ich diese meldung, und das OS hängt sich auf.
interrupt_stub für den IRQ0
Code: [Auswählen]
cli
push 0
push 32
jmp irq_common_stub
// ....
pusha
push ds
push es
push fs
push gs
mov ax, 0x10
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov eax, esp
push eax
mov eax, irq_handler
call eax
pop eax
pop gs
pop fs
pop es
pop ds
popa
add esp, 8
iret
der dazugehörige (minimale) C-handler
Code: [Auswählen]
unsigned irq_handler(regs* r)
{
if (r->int_no >= 40)
outportb(0xA0, 0x20);
outportb(0x20, 0x20);
return (unsigned)r;
}
komischerweise ist "r->int_no" laut bochs 0x212.
wahrscheinlich ist die regs struktur beschädigt.
mein verdacht ist, dass am anfang:
Code: [Auswählen]
cli
push 0
push 32
jmp irq_common_stub
nur 2 Bytes statt 2 DWords gepusht werden. der disassembler sagt:
Code: [Auswählen]
cli FA
push 0 6A 00 ??
push 32 6A 29 ??
mp irq_common_stub
ich nutze den msvc-inline-assembler. wie kann ich den
dazu bringen, DWORDs zu pushen? "oush dword 0" geht nicht

danke im voraus

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert

