2010-01-13 23 views

Antwort

10

Das ":" ist ein Holdover von segmentierten Speicher Tagen, wenn PCs im Real-Modus ausgeführt wurden und konnte nur 64K auf einmal. Die Nummer links vom ":" ist Ihr Segment, die Nummer rechts ist Ihre Adresse.

Der Windows-Debug-Befehl akzeptiert diese Schreibweise, wenn Sie sich in Erinnerung schnüffeln wollen:

C:\Users\Seth> debug 
-d0000:7c00 
0000:7C00 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C10 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C20 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C30 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C40 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C50 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C60 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C70 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 

Im Hinblick auf diese besondere Adresse, es ist nur eine Adresse, die den MBR zu laden, finden Sie wurde ausgewählt: http://www.ata-atapi.com/hiwmbr.html

"Wenn ein MBR gefunden wird es in dem Speicher an der Stelle 0000 gelesen wird: 7C00 und INT 19 Sprünge Speicherstelle 0000: 7C00"

1

Warum 7C00? Dies würde wahrscheinlich am besten von einem BIOS-Programmierer/Hardware-Designer für das ursprüngliche/ursprüngliche IBM PC-BIOS beantwortet werden.

Wenn Sie eine Kopie der IBM Personal Computer technischen Referenzhandbuch finden können, kann es einige Hinweise enthalten.

16

Die einfache Antwort ist, dass 7C00h ist 1k (512 Bytes für den Boot-Sektor plus zusätzliche 512 Bytes für mögliche Boot-Sektor verwenden) von der Unterseite der ursprünglichen 32k installierten Arbeitsspeicher.

Die glückliche Antwort ist, dass org 7C00h mit Bootsektor synonym geworden ist - Programmierung Bootloader.

+0

Die zusätzlichen 512 Bytes könnten für den Boot-Stack gewesen sein. –

+0

@Mike Gonta: Ich habe jahrelang in vielen Dokumentationen und Tutorials nach einer solchen Antwort gesucht, ohne Erfolg. Aber deine Antwort ist die beste und löst das Geheimnis. Vielen Dank dafür. Du hast mir das letzte Puzzleteil gegeben, das mich zu diesem Link geführt hat: http://www.glamenv-septzen.net/de/view/6 ... Aber es gibt ein letztes Rätsel für mich: Warum haben sie 55 benutzt? AA für die Boot-Signatur? Ich vermute, das hat etwas mit den Bitmustern zu tun, die sie sind: 01010101 10101010, weiß aber nicht was. Vielleicht weißt du? – SasQ

0

Lesen Sie diesen Artikel:

http://en.wikibooks.org/wiki/X86_Assembly/Bootloaders

Aus der obigen URL, BIOS (die effektiv PC-Hardware ist) den Sprung in dem Speicher bei 0000 machen: 7C00 Ausführung im 16-Bit-Modus fortzusetzen.

Und von oben zu zitieren:

Ein Bootloader läuft unter bestimmten Bedingungen, dass der Programmierer, um einen erfolgreichen Bootloader zu machen schätzen müssen. Die folgende bezieht sich auf Bootloader vom PC-BIOS initiiert:

  • Der erste Sektor ein Laufwerk enthält seinen Bootloader.
  • Ein Sektor ist 512 Bytes - der letzte zwei Bytes müssen 0xAA55 sein (d. H. 0x55 gefolgt von 0xAA), oder Andernfalls behandelt das BIOS das Laufwerk als nicht mehr startfähig.
  • Wenn alles in Reihenfolge ist, wird der erste Sektor an die RAM-Adresse 0000: 7C00 platziert, und die Rolle des BIOS ist vorbei, da es die Steuerung an 0000: 7C00 überträgt. (I.e.es JMPs an diese Adresse)

So von bootup, wenn u die CPU wollen Ihren Code starten ausgeführt wird, hat es um 0000 im Speicher angeordnet werden: 7C00. Und dieser Teil des Codes wird vom ersten Sektor auf die Festplatte geladen - auch per Hardware. Und nur der erste Sektor wird geladen, die restlichen Teile des Codes müssen dann von diesem initialen "Bootloader" geladen werden.

Weitere Informationen auf dem ersten Sektor der Festplatte und das 7C00 Design:

http://www.ata-atapi.com/hiwdos.html

http://www.ata-atapi.com/hiwmbr.html

Bitte verwechseln Sie nicht mit dem Startmodus der CPU - dem ersten Befehl wird es holen und (siehe Seite 9-5) auszuführen ist an der physikalischen Adresse 0xfffffff0:

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

und in diesem Stadium wird nicht-flüchtig ausgeführt (was bedeutet, dass Sie den BIOS-Code nicht einfach umprogrammieren können und somit nicht zur Verantwortung des Bootloaders gehören).

Verwandte Themen