Autor Thema: FASM - Untere/Obere 16 Bit  (Gelesen 2496 mal)

Thunder

  • Beiträge: 24
    • Profil anzeigen
Gespeichert
« am: 14. March 2010, 21:31 »
Hallo,

Ich schreibe seit kurzem meinen Kernel wieder neu - das ist schon Routine. Doch diesmal in Assembler. Jetzt bin ich bei der IDT und habe ein kleines Problem. Ich muss die Adresse des Interrupt-Handlers in der IDT in 2 Teile unterteilen - die unteren und die oberen 16 Bit.
Mein Code sieht etwa so aus:
idt:
dw word [handle_interrupt_0] ; So habe ich das versucht
dw 1
db 0
db 11010001b
dd word [handle_interrupt_0] shl 16 ; und so auch

Leider funktioniert das nicht. Wie sollte das aussehen?

mfg Thunder

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 14. March 2010, 22:32 »
Soweit ich weiß, geht das nicht. Du musst die IDT dann eben zur Laufzeit befüllen, so wie du das wohl in anderen Sprachen auch gemacht hast.

Edit: Ah, fasm - den kenn ich nicht. Vielleicht geht es damit auch, keine Ahnung. Ich bin von nasm ausgegangen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #2 am: 14. March 2010, 23:03 »
So wird das in fasm auch nicht gehen.

Ich würde es erstmal vor allem ohne die [] versuchen, also:
idt:
dw handle_interrupt_0 and 0xFFFF
dw 1
db 0
db 11010001b
dw handle_interrupt_0 shr 16
(Das unten muss außerdem shr und nicht shl sein, außerdem sollte das ein dw sein und bei den "word"s meckert fasm)

Das ist vermutlich eher, was du meinst (also, wenn handle_interrupt_0 ein ISR-Label ist).
« Letzte Änderung: 14. March 2010, 23:06 von XanClic »

Thunder

  • Beiträge: 24
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 15. March 2010, 20:05 »
Ja, handle_interrupt_0 leitet zur isr weiter.

Leider hat es so auch nicht funktioniert (trotzdem danke für den Hinweis auf shr). Ich werde die IDT eben zur Laufzeit befüllen, wie es taljeth vorgeschlagen hat.

Danke!

Thunder

 

Einloggen