Ich lerne etwas über das BIOS und habe ein paar Fragen.
Was bedeutet "Dies sind die letzten 16 Bytes des Speichers am Ende des ersten Megabytes des Speichers"?
Die erste Anweisung des BIOS lautet jump, springt zum Haupt-BIOS-Programm, aber wohin springt es?
Woher stammt der ursprüngliche BIOS-Code?
Ich interessiere mich auch für POST? Wie werden POST-Signale vom Prozessor ausgeführt?
Antworten:
Um die zweite Frage zu beantworten, springt das BIOS zu 0x7c00, dem Beginn des Bootsector-Codes (ich verstehe das aus dem Debuggen und Erstellen von Bootsectors ...). Der Bootsector wird wiederum in diesen Offset im Speicher geladen.
POST ist ein Selbsttest beim Einschalten. Wenn die BIOS-Routinen eine Überprüfung der Hardwaregeräte wie Speicher, Tastatur, Festplatte und Bildschirm durchführen, ertönt ein Piepton, wenn die Überprüfung je nach fraglichem Gerät fehlschlägt, z. B. wenn die Festplatte ausfällt Mit seinen 2 Signaltönen weist der Signalton auf verschiedene Probleme hin. Diese sind heutzutage recht selten, da die BIOS zuverlässiger sind und die Hardware-Erkennung weitaus zuverlässiger ist als damals ... MFM / RLL-Laufwerke hatten früher Probleme mit den BIOS, es sei denn, sie stammen aus einer fragwürdigen Menge von Datenträgern .... Tastaturen mit dem BIOS sind dafür berüchtigt, dass sie "Drücken Sie F1, um fortzufahren" anzeigen, wenn keine Tastaturen vorhanden sind.
Hoffe das hilft, Viele Grüße, Tom.
quelle
quelle
@ tommieb75: Hier springt der Prozessor schließlich, aber nur, wenn das BIOS einen Bootsektor auf einem angeschlossenen Peripheriegerät findet (Festplatte, ordnungsgemäß formatiertes USB-Flash-Laufwerk, El Torito-CD, TFTP von einem PXE-Server usw.). Dieser Bootsektor hat am Ende die Signatur 0x55AA. Das prototypische Beispiel ist der MBR, der frei ist, alles zu tun, was er will, aber normalerweise in der Partitionstabelle nach einem (und nur einem) bootfähigen Flag sucht, sich von der 0x7C00-Adresse (wo abhängig von seinem Code) fortbewegt und lädt der erste Sektor dieser Partition auf 0x7C00 und springt dorthin. Dieser Partitionsstartsektor sollte auch die Signatur 0x55AA haben.
Was die ursprüngliche Frage betrifft ... gibt es keine feste Adresse, zu der der Prozessor vom BIOS-ROM angewiesen wird, zu springen. Dies hängt davon ab, was der BIOS-Autor will. Die Adresse von 16 Bytes unter dem Ende von 1 Megabyte ist nur ein fester Code im Prozessor selbst; Dies ist das dokumentierte / definierte Verhalten (von Intel und von der Vereinigung, AMD und anderen). Offensichtlich sind 16 Byte Code nicht viel Code, daher ist es normalerweise nur ein "Weitsprung" (Laden der CS- und IP-Register) an eine andere Stelle im BIOS-ROM. Dieser Code verarbeitet den POST und den oben genannten Speicherort eines gültigen Bootsektors, der ausgeführt werden soll.
quelle