Witam!
Od kilku dni bawię się w pisanie bootloaderów - o tak, dla zabawy. Dzisiaj porobiłem kilka eksperymentów i w związku z tym mam pytania.
Załóżmy że mamy następujący kod bootloadera, nic specjalnego, samo uruchomienie i tyle:
[BITS 16]
[ORG 0x7C00]
main:
jmp $
times 510-($-$$) db 0
dw 0xAA55
Wszystko jest ok. Zacząłem eksperymentować z kodem, usunąłem na przykład sygnaturę 0xAA55, uruchomiłem i... o dziwo maszyna wirtualna nie wywaliła błędu co znaczy że bootloader został załadowany.
Dziwi mnie to trochę ponieważ jak mówi pewna strona,
Gdy znajdzie sektor odpowiednio zaznaczony: bajt nr 510 = 55h i bajt 511 = AAh (...), to wczytuje go pod adres bezwzględny
, bootloader ma zostać uruchomiony tylko i wyłącznie gdy znajdzie sygnaturę w 510 i 511 bajcie - w moim przypadku tego w ogóle nigdzie nie ma więc ciągle się zastanawiam - dlaczego BIOS ładuje bootloader mimo wszystko?
Obraz tworzony następującymi poleceniami: nasm bootloader.asm -f bin -o boot.bin && dd if=boot.bin bs=512 of=result.img count=1. Maszyna wirtualna postawiona na VirtualBoxie.
Pozdrawiam!