Entwickeln Sie einen Bootloader In Assembly
-
22-09-2019 - |
Frage
Ich habe schon einen Teil meiner OS in Versammlung getan, aber jetzt will ich es auch anstelle der Verwendung von GRUB einen eigenen Bootloader bauen. Als ich meinen Test O in Assembly mir die Entwicklung nicht vergessen, dass ich es so starten:
org 0x7c00
bits 16
; OS Kernel Here
times 510 - ($-$$) db 0
dw 0xAA55
Das habe ich schon wissen. Jetzt mag ich dies nutzen und das „echte“ O ausführen, die ein * .bin-Datei in dem zweiten Sektor der Diskette geschrieben werden. Dann möchte ich Somethings
wissen- Wie kann ich einen Bootloader in Assembly tun auszuführen, was auf dem zweiten Sektor der Diskette wird beginnen?
- Muss ich etwas an die Versammlung Quelle hinzuzufügen, die auf dem zweiten Sektor der Diskette platziert werden?
Lösung
Sie verwenden int 0x13
zu Last in der erforderlichen Anzahl von Sektoren und Sprung auf die Position, die Sie den neuen Code Platz haben. Es gibt nichts, was man in der zweiten Stufe tun müssen, aber Sie werden sicherstellen möchten, dass Sie DS
Set für gültig zu sein, wo Sie den Code laden.
Beispiel von meinem kleinen O Archiv:
/* BIOS loads the sectors into es:bx */
pushw $STAGE1_WORKSEG
popw %es
movw $STAGE1_OFFSET, %bx
read_stage1:
/* Try to read in a few sectors */
movb $0x2, %cl /* Sector */
movb $0x0, %ch /* Cylinder */
movb $0x0, %dh /* Head */
movb $0x0, %dl /* Drive */
movb $0x2, %ah /* BIOS read function */
/* How many sectors to load */
movb $STAGE1_SIZE, %al
int $0x13
jnc read_stage1_done
/* Reset drive */
xorw %ax, %ax
int $0x13
jmp read_stage1
read_stage1_done:
/* Perform a long jump into stage1 */
ljmp $STAGE1_WORKSEG, $STAGE1_OFFSET
call halt
halt:
/*
* Function: halt
* Synopsis: Sends the processor into a permanent halted status
* Notes:
* The only way out of this is to manually reboot
*/
hlt /* Halt the processor */
jmp halt
Das ist in GAS-Format, so dass Sie die Operanden, um umkehren werden wollen, weil es sieht aus wie Sie NASM aus der times
Anweisung verwenden. Die Variablennamen sollten selbsterklärend sein.
Wenn Sie ein Hobby OS entwickelst dann ist http://forum.osdev.org/
ein guter Ort, um Unterstützung von anderen das gleiche tun. Es ist ein bisschen mehr spezialisiert als Stackoverflow und viele OS Sachen kann ziemlich esoterisch sein.