Frage

Ich versuche, das BIOS Video-Interrupt zu verwenden, um ein Zeichen auf dem Bildschirm angezeigt werden soll. Im Folgenden ist der Assembler-Code:

mov $0x0A, %AH
mov $0x68, %AL ; to display character 'h'
int $0x10

zusammengebaut ich diesen Code mit GNU Assembler eine Objektdatei zu erzeugen, genannt sample.o Die Gesamtgröße der sample.o ist 449 Byte. Jetzt schreibe ich manuell auf diese Objektdatei die hexadezimalen Ziffern 0x55 und 0xAA bei 511. und 512. Byte-Positionen, um es bootfähig zu machen. Also habe ich jetzt glaube, ich habe einen 512 Byte-Boot-Sektor. Ich benutze Qemu von diesem Objekt Datei zu booten, um zu versuchen:

$> qemu -fda sample.o

Die QEMU-Emulator startet und friert an dem Punkt, wo es heißt „Booting von Floppy ...“ Aber ich dachte, nachdem es den Boot-Sektor des BIOS Video Interrupt Code erkennt sollte laufen und ein Zeichen auf dem Bildschirm angezeigt werden soll.

Ich weiß, dass ich etwas schrecklich falsch mache. Ich vermisse das gesamte Konzept des Interrupts Vielleicht. Kann mir jemand helfen.

EDIT: also ich jetzt bin mit as86 und ld86 nur die flachen binär zu erzeugen. Und statt 0x0A in AH ich verwende 0x0E und es scheint, wie es den Trick. Scheint, wie BIOS Implementierungsproblem.

Ich schätze alle, die wieder geantwortet.

Danke

War es hilfreich?

Lösung

Eine normale .o Datei enthält ziemlich viel anderes als nur die resultierende Binärcode, so ist es keine Überraschung, dass das, was Sie tun, nicht funktioniert (das Ergebnis aus dieser sollte etwa 10 Bytes oder so sein).

Sie können entweder ein Skript für ld schreiben, um es eine flache binären, um (ich mich zu erinnern, dass möglich sein, angenommen hat, aber habe es nicht persönlich ausprobiert). Wenn ich dies tat, würde ich wahrscheinlich verwenden Sie stattdessen nasm, da es ziemlich leicht roh Binärausgang produzieren kann. Eine andere Möglichkeit wäre, ein paar alte MS-DOS-Assembler als produzieren können .com Format ausgegeben (die auch Raw-Binary ist, obwohl man vorsichtig sein, da es ein wenig anders geladen).

Andere Tipps

Sie müssen den Attributwert in BL passieren (07h ist auf schwarz grau), die Seitenzahl in BH und zählen in CX.

Sie sagen, Sie es mit Gas zusammengestellt und es gibt Ihnen eine 448-Byte-Datei? Montage- Sie in eine ELF-Datei oder so etwas? Ich würde NASM -f ist, mit der BITS 16 Richtlinien empfehlen.

Wie Jerry Coffin sagte, das Problem ist, dass Ihre .o Datei mit einem richtigen Boot-Sektor keine Floppy-Image ist. Die .o-Datei enthält eine Vielzahl von Informationen neben dem Code wie Symbolnamen und Relocation Info.

Wenn Sie NASM verwenden, Verwendung -f bin einen Raw-Binary zu erzeugen. Wenn Sie LD verwenden, können Sie ein Linker-Skript schreiben.

Für Hilfe bei dieser Art von Sachen, die beste Wahl ist wahrscheinlich osdev.org und sein Forum .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top