Mit bios interrupt 13h Funktion 42h

Ich habe in einem Assemblerprogramm das problem das ich einen Sektor von der Festplatte lesen möchte, da die funktion 02h des 13h nur das chs verfahren unterstützt, also nur 8GB im bestenfall adressiert kann, bin ich gezwungen auf die neuen extensions funktionen zuzugreifen, die lba unterstützen, also die funktion 42h. Ich habe auch eine beschreibung in der englischen wikipedia Link gefunden, aber leider verstehe ich nicht genau wie ich das mit der Tabelle in Assembler implementieren kann, bin neu in Assembler nicht für ungut. Kann mir jamand beispielcode posten, man muss bedenken das ich den code für einen eigenen bootloader brauche. Und noch eine Frage, stellt eigentlich das betribssystem die segmente im Speicher oder kann ich in einem bootlaoder die segmentierung nicht so machen wie unter ms-dos? Kann mir das jemand mit den Segmenten erklären, das Tutuorial das ich gelesen habe, war etwas kompliziert.
Lg schönes wochenende noch
 
Zur tabelle: (nasm)
Code:
descriptor:
 db 0x00
 db 0x00
 db 0x00
 db 0x00
 db 0x00, 0x00, 0x00, 0x00
 db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
die 0x00 natürlich durch den entsprechenden werte erseten

Zur segmentierung
Der seicher wird im format Segment:Offset adressiert. Sowohl Segment als auch Offset sind ein 16Bit-Wert. Eine Adresse (linear) ist 20Bit lang
Die lineare adresse ergibt sich wie folg: physische Adresse = (Segment * 16) + Offset
Code:
Offset = 0xAAAA;
Segment = 0xB000;
B000 +
 AAAA
BAAAA

Im RealMode sind die segmente so vorgegeben.
Im ProtectedMode kann man in der GDT seinen Speicher selber segmentieren. Aktiviert man Paging, wird der Speicher zusätztlich (von der CPU) in 4KB Pages zerteilt
 
Zurück
Oben