Witam. Czytałem artykuł ze strony: Pisanie systemów operacyjnych - tryb rzeczywisty
Nie żebym chciał pisać OS tylko chciałem poczytać coś ASM i zrozumieć. Bardzo interesujący ten tekst tylko jak zwykle nie rozumiem pewnych spraw:
1. Pierwsza to taka konstrukcja w ASM:
times 510 - ($ - start) db 0
domyślam się że times 510 ma powtórzyć db 0 razy 510 ale nie rozumiem ($ - start). Pewnie etykieta start jest dla kompilatora jakąś liczbą, ale ten znaczek dolara to już kompletnie utrudnia zrozumienie. O co chodzi?
2. Drugi problem jest z pamięcią i dyrektywą org:
BIOS ładuje pierwsze 512 bajtów z dysku do pamięci pod adresem 07C0:0000 i skacze w to miejsce
Ok. to rozumiem.
;tutaj zaczyna się nasz program
org 7C00h
Jak mówi inne źródło:
org mówi kompilatorowi, że kod będzie znajdował się pod tym adresem (segment 07C0 * 16 = adres 7C00), ułatwia kompilatorowi określenie adresów różnych etykiet (w tym danych) znajdujących się w programie
To jeszcze mogę przełknąć, ale bootloader skacze do 0800:0000 a tam jest kernel który zaczyna się tak:
;pamiętasz, kernela załadowaliśmy pod adres 0800h:0000h, wiec
;zaczynamy od 0000h
org 0000h
Tutaj się poddaje. W takim razie, czemu nie org 8000h? Jak jest różnica między tymi dwoma przypadkami?
3. Jaka jest wartość rejestru CS w bootloaderze, a jaka w kernelu?
Przepraszam za pewnie trywialne pytania. Po prostu jest to trochę trudne do wyobrażenia dla amatora.