Autor Thema: Problem beim Zurückspringen vom Interrupt.  (Gelesen 7031 mal)

Hauke

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« am: 07. August 2005, 16:12 »
Problem beim Zurückspringen vom Interrupt.

Ich habe für den ProtectMode die GDT und IDT programmiert und eingerichtet. Zusätzlich  habe ich den PIC umprogrammiert (auf 32 bis 47). Jedoch, wenn ein Interrupt aufgerufen wird und zurückgesprungen wird, wird Exception 13 ausgelöst. Mit welchem Befehl wird von einem Interrupt zurückgesprungen, bisher mache ich es mit Irtd benutzt. Was ist daran falsch?:?:

Ps. Ist es richtig, dass der System Timer Interrupt selbstständig vom System(PIC) ausgeführt wird? (Hier Int 32):?:


Aufbau von einem Interrupt (bei mir)
Interrupt_x:
Pushad
Cli
… ;Anweisungen
…
Sti
Popad
Irtd

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #1 am: 07. August 2005, 16:19 »
irtd? hab ich ja noch nie gehört! :)
Bei mir gehts einfach mit iret.
*post*

Hauke

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 07. August 2005, 18:48 »
„Iret“ fuktioniert auch nicht. System Timer Interrupt (int 32) wird ausgelöst. Dann nachdem ich zurückspringen will wird Exception 13 ausgelöst und dann stürzt das System ab. (weil der Fehler ja noch immer da ist.)

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 07. August 2005, 20:29 »
manipulierst du den stack im interrupt handler?
Dieser Text wird unter jedem Beitrag angezeigt.

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 08. August 2005, 11:51 »
Du musst bei IRQs noch ein EOI (End of Interrupt) an den Pic senden, bei IRQ 0 wäre das 0x20 an den Port 0x20, wenn ich mich richtig errinnere. Ich habe auch immer iret benutzt.
Iret popt CS, EFLAGS, und die Rücksprungaddresse vom Stack und kehrt dann zur Rücksprungaddresse zurück.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #5 am: 08. August 2005, 13:48 »
Na ja, ein fehlender EOI sollte ja nur bewirken das danach kein IRQ mehr kommt. Aber es wird halt wohl darauf hinauslaufen das mit dem Stack was nicht stimmt.
*post*

Hauke

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 19. August 2005, 14:46 »
Ich hab jetzt fast alles ausprobiert, Code verändert und sonstiges gemacht, aber es funktioniert immer noch nicht, das merkwürdigste daran ist, dass es bei Bocks funktioniert aber beim Computer selbst nicht. Hat jemand vielleicht noch eine Idee?

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #7 am: 19. August 2005, 15:32 »
Zitat

manipulierst du den stack im interrupt handler?


tust du das ?

Hauke

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 19. August 2005, 17:33 »
Ich weiß nicht was unter
Zitat
manipulierst du den stack im interrupt handler?

zu verstehen ist. Bitter erklären.  :?:

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 19. August 2005, 17:36 »
Veränderst du das ESP Register, oder pushest du irgentwelche Sachen, die du dann nicht wieder popst, wärend der Interrupt ausgeführt wird? Eventuell popst du auch zuviel.

Hauke

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 19. August 2005, 18:19 »
Ich hab den Fehler gefunden (glaub ich zumindest)
Esp hat den Wert 0x1FFFF und meine Startadresse war 0x10000. Und als ich Esp auf  0x2FFFF gesetzt habe ging es.

Danke für alle Hilfen. :D

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #11 am: 19. August 2005, 18:23 »
an deiner stelle würd ich den stack viel weiter oben oder unten machen, nicht so direkt beim kernel

 

Einloggen