Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Thunder am 14. March 2010, 21:31

Titel: FASM - Untere/Obere 16 Bit
Beitrag von: Thunder 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
Titel: Re: FASM - Untere/Obere 16 Bit
Beitrag von: kevin 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.
Titel: Re: FASM - Untere/Obere 16 Bit
Beitrag von: XanClic 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).
Titel: Re: FASM - Untere/Obere 16 Bit
Beitrag von: Thunder 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