Próbowałem napisać program ładujący w języku asemblera na dysk USB, aby przetestować go na innym komputerze. Program ładujący (powinien) działać z procesorami Intel. Komputer, na którym go testuję (Windows 7 z procesorem Intel Celeron i 2 GB RAM) powinien go uruchomić, ma nawet opcję rozruchu z dysku USB w BIOS-ie (i wykrywa dysk). Kiedy uruchamiam boot z napędu, uruchamia się on w systemie Windows. Powinien wyświetlać mój niestandardowy system operacyjny, który jest po prostu programem do montażu typu Hello-World. Zakładam, że dzieje się tak, ponieważ nie można znaleźć systemu operacyjnego: albo znacznik systemu operacyjnego (który znalazłem powinien być „dw 0xAA55”) jest nieprawidłowy, dysk USB nie nadaje się do rozruchu lub po prostu nie umieszczam plik bin bootloadera w pierwszym sektorze.
Moje pytania brzmią: jak sprawdzić, czy (a) dysk USB jest w stanie uruchomić system operacyjny, (b) czy system operacyjny jest rozpoznawany, oraz (c) czy plik bin znajduje się we właściwym sektorze (pierwszy sektor) .
Oto kod asemblera:
org 7C00h
jmp 0x0:start
start:
cli
mov ax, 0x9000 ;Set up stack
mov ss, ax ;Tell processor where stack is
mov sp, 0xFB00 ;Set stack offset
sti
mov AH, 0Eh ;Tell bios we're writing a char to screen!
mov AL, 'T' ;Load a new character into memory
int 10h ;Call BIOS video interrupt
jmp start ;And so on and so on
times 510-($-$$) db 0 ;Fill rest of sector up with 0s to make this 512B (a sector)
dw 0xAA55 ;Let BIOS know this is an OS! (defines a word)
Jestem raczej nowy w asemblerze, więc jeśli komentarze po niektórych liniach nie pasują do tego, czym powinny być, to prawdopodobnie dlatego. Dzięki za pomoc!