07C0 (Bootstrap)



  • Hallo,

    sorry, hat vielleicht nicht gerade was mit ASM zu tun, aber trotzdem:

    ich hab da mal 3 Fragen: Bekanntlich wird ja der Bootsector beim Bootstrap nach 07C0 geladen.

    1. Warum da hin? Is der Bereich davor reserviert oder belegt?
    2. Wie sieht's mit dem Bereich danach aus, is da irgendwas reserviert oder belegt?
    3. Wie is der Status der CPU-Register nach dem Booten?

    Danke!

    CU



  • 1. da das BIOS dort den Bootloader sucht. Wurde einfach damals von IBM fogeschrieben. Wahrscheinlich liegt vorher das BIOS oder so.

    2. da ist nichts reserviert oder belegt, dass hängt von den ausgeführten Programmen/OS ab

    3. ich glaub undefiniert, bin mir da aber nicht 100% sicher (schon lang her, dass ich mich mit Bootloadern beschäftigt habe)



  • Zu 1./2. :

    linear addr.  real-mode address    memory type use  
         0-  3FF  0000:0000-0000:03FF  RAM real-mode interrupt vector table (IVT)  
       400-  4FF  0040:0000-0040:00FF  BIOS data area (BDA)  
       500-9FFFF  0050:0000-9000:FFFF  free conventional memory (below 1 meg)  
     A0000-BFFFF  A000:0000-B000:FFFF  video RAM  VGA framebuffers  
     C0000-C7FFF  C000:0000-C000:7FFF  ROM  video BIOS (32K is typical size)  
     C8000-EFFFF  C800:0000-E000:FFFF  NOTHING   
     F0000-FFFFF  F000:0000-F000:FFFF  ROM  motherboard BIOS (64K is typical size)  
    100000- ?                          RAM  free extended memory (1 meg and above)
    

    Ich hoffe das sagt genug aus (aus der FAQ von alt.os.development) 😉
    0x07c00 ist mehr oder weniger eine Konvention, vielleicht ahtte ganz früher mal ein BIOS ienen grund, die addresse zu nehmen und zwecks abwärtskompatibilität muss das nun für immer und ewig auch so bleiben 😉

    Zu 3.:
    Du solltest im Allgemienen immer davon ausgehen, dass in den Registern nichts brauchbares steht. Die einzig sichere Annahme ist die, dass CS:IP auf die physikalische Speicherstelle 0x7c00 zeigt, manche PCs erreichen das durch CS=0x0000 und IP=0x7c00, andere machen CS=0x07c0, IP=0x0000. Imho ist die beste Taktik, dem Assembler per ORG 0 mitzuteilen, dass man auf zweiten Fall baut und gleich am Anfang per

    [ORG 0]
        jmp 0x07c0:start
    start:
        hier dein Code
    

    sicherstellt, dass es auch so ist.



  • Sehr schön, DANKE!


Anmelden zum Antworten