Die x86-Real-Modus-Speicherkarte ist wie folgt:
- 0x00000000 - 0x000003FF - Real Mode Interrupt Vector Table
- 0x00000400 - 0x000004FF - BIOS Data Area
- 0x00000500 - 0x00007BFF - Unused
- 0x00007C00 - 0x00007DFF - Our Bootloader
- 0x00007E00 - 0x0009FFFF - Unused
- 0x000A0000 - 0x000BFFFF - Video RAM (VRAM) Memory
- 0x000B0000 - 0x000B7777 - Monochrome Video Memory
- 0x000B8000 - 0x000BFFFF - Color Video Memory
- 0x000C0000 - 0x000C7FFF - Video ROM BIOS
- 0x000C8000 - 0x000EFFFF - BIOS Shadow Area
- 0x000F0000 - 0x000FFFFF - System BIOS
In meiner realen Modus Programmierung ich in der Regel von 0x00007E00 Stick - 0x0009FFFF (alle davon nicht) .. Ich benutze Segment: Offset-Adressierung den verwenden Speicher .. um von einem 1 Stufe Bootloader zu einem Kernel gehen oder ein Bootloader 2. Stufe, die ich benutze:
; bootloader.s
BITS 16
ORG 0x7C00
CLI
JMP 0xE000 ; Can also be JMP 0x7C00:200
HLT
TIMES 510 - ($-$$) DB 0
DW 0xAA55
-
; Something.s
BITS 16
ORG 0x7E00 ; Can also be ORG 0x7C00:200
; Code goes here for your purposes.. whether it be a 2nd stage
; bootloader or your 16bit kernel..
CLI
HLT
Wenn Sie in den geschützten Modus gehen, benötigen Sie immer noch einen Stub, wie oben gezeigt. In Something.s können Sie in Ihren geschützten Modus Routinen programmieren (GDT, A20, Videomodus einstellen, etc ..)
Um den Speicherort bei 0x7C00 (Bootloader Entry Point) zu erklären, ist 0x7C00 - 0x7DFF, wo Sie Ihren Bootloader platzieren (der bootloader.s oben). Sie platzieren es dort, weil das BIOS nach dem Ausführen seiner Routinen an diesen Ort springt. Der Bootloader muss genau 512 Byte groß sein (beachten Sie die TIMES-Anweisung). Von dort aus kann Ihr Code eine beliebige Größe haben (solange er in die Speicherkarte passt), und Sie können vollständig am Betriebssystem arbeiten.
Wenn Sie in den geschützten 32Bit-Modus gehen, können Sie ALLES über die 1MiB-Markierung verwenden.
Sie können das BIOS nicht vergessen. Es kann erforderlich sein, dass einige Speicherbereiche für MMIO-Regionen oder für die Verwendung durch SMM-Code geschützt sind. – bdonlan
Es gibt viele physische Speicherbereiche, die nicht speziell für speicheradressierte Hardware verwendet werden können. – clemahieu