Bios: Sektor gelesen - und jetzt?



  • Hallo,

    ich versuche gerade, einen Bootloader zu schreiben.

    Mir stellt sich folgendes Problem: mit den Bios-Interrupts ist es nur möglich, 512 Bytes auf einmal zu lesen, d.h. man hat nach dem Lesevorgang 512 Bytes im RAM... und jetzt?

    Was mache ich, wenn ich aus diesem Buffer einen unsigned int lesen will?

    Sagen wir, die entsprechenden Daten befinden sich bei buffer[100], d.h. der unsigned int geht von buffer[100] bis buffer[104]. Jetzt will ich diese Zahl an Offset 100 in ein Register laden, d.h. aus den einzelnen Bytes soll jetzt ein Int werden.

    Wie geht das? Muss ich nun die einzelnen Bytes per Bitshift kompliziert zusammenfügen?

    P.S.: Welche "Adresse" in Tracks/Zylinder/Sektoren-Format haben die ersten 512 Bytes einer Festplatte (0/0/1)?



  • assembler-lerner schrieb:

    Wie geht das? Muss ich nun die einzelnen Bytes per Bitshift kompliziert zusammenfügen?

    Der x86 kann neben bytes unter Anderem auch words (16Bit) und dwords (32Bit) direkt aus dem RAM in Register laden. Zu Syntax-Details siehe ein Assembler-Tutorial deiner Wahl (z.B. in den FAQ).
    z.B.

    mov eax, dowrd [buffer + 100]
    

    assembler-lerner schrieb:

    P.S.: Welche "Adresse" in Tracks/Zylinder/Sektoren-Format haben die ersten 512 Bytes einer Festplatte (0/0/1)?

    http://de.wikipedia.org/wiki/Cylinder_Head_Sector



  • Es tut mir Leid, ich bin kein Techniker, ich verstehe einfach nicht, was technisch der Unterschied zwischen Zylinder, Head und Sektor ist.
    Soweit ich das verstehe lassen sich die ersten 512 Bytes adressieren:
    C=0
    H=0
    S=1



  • assembler-lerner schrieb:

    Es tut mir Leid, ich bin kein Techniker, ich verstehe einfach nicht, was technisch der Unterschied zwischen Zylinder, Head und Sektor ist.

    Das ist auch nicht unbedingt noetig und deshalb geht der verlinkte Artikel darauf auch gar nicht erst ein.

    assembler-lerner schrieb:

    Soweit ich das verstehe lassen sich die ersten 512 Bytes adressieren:
    C=0
    H=0
    S=1

    Korrekt. Darauf geht der Artikel auch explizit ein. Ich zitiere:

    wikipedia schrieb:

    Die Sektoren werden ab eins gezählt, während bei den Zylindern und Köpfen die Zählung (wie in der Informatik üblich) bei Null beginnt.


Anmelden zum Antworten