2010-01-13 7 views

Odpowiedz

10

":" to holdover z podzielonych na segmenty dni pamięci, kiedy komputery pracowały w trybie rzeczywistym i mogły wykonywać tylko 64K na raz. Liczba po lewej stronie ":" to Twój segment, a numer po prawej to Twój adres.

Komenda okna debugowania przyjmuje ten zapis, jeśli chcesz grzebać w pamięci siebie:

C:\Users\Seth> debug 
-d0000:7c00 
0000:7C00 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C10 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C20 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C30 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C40 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C50 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C60 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C70 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 

W odniesieniu do tego konkretnego adresu, to po prostu adres, który został wybrany do załadowania MBR, zobacz: http://www.ata-atapi.com/hiwmbr.html

"Jeśli MBR znajduje jest wczytywane do pamięci na miejscu 0000: 7c00 i INT 19 skacze do miejsca pamięci 0000: 7c00"

1

Dlaczego 7C00? Najlepiej będzie, gdyby programista/projektant systemu BIOS odpowiedział na początkowy/oryginalny BIOS IBM PC.

Jeśli można znaleźć kopię dokumentacji technicznej komputera osobistego IBM , może ona zawierać pewne wskazówki.

16

Najprostszą odpowiedzią jest to, że 7C00h to 1k (512 bajtów dla sektora rozruchowego plus dodatkowe 512 bajtów dla możliwego wykorzystania sektora rozruchowego) od dolnej części oryginalnej zainstalowanej pamięci 32k.

Szczęśliwe odpowiedź brzmi, że org 7C00h stała się synonimem sektor rozruchowy - programowanie ładującego.

+0

Dodatkowe 512 bajtów mogło być dla stosu startowego. –

+0

@Mike Gonta: Szukałem takiej odpowiedzi od lat, w wielu dokumentacjach i samouczkach, bez skutku. Ale twoja odpowiedź jest najlepsza i rozwiązuje zagadkę. Dziękuję ci bardzo za to. Dałeś mi ostatni kawałek układanki, który doprowadził mnie do tego linku: http://www.glamenv-septzen.net/en/view/6 ... Ale jest dla mnie ostatnia tajemnica: dlaczego użyli 55 AA dla podpisu rozruchowego? Podejrzewam, że ma to coś wspólnego z wzorcami bitów, którymi są: 01010101 10101010, ale nie wiem co. Może ty wiesz? – SasQ

0

Przeczytaj ten artykuł:

http://en.wikibooks.org/wiki/X86_Assembly/Bootloaders

Z powyższej zawartości, BIOS (co jest skutecznie PC Hardware) sprawi, że skok do pamięci w 0000: 7c00 kontynuować wykonywanie w trybie 16-bitowym.

I zacytować z góry:

bootloadera biegnie pod pewnymi warunkami, że programista musi docenić w celu zapewnienia pomyślnego bootloadera. Poniższy dotyczy typu programów zainicjowanych przez BIOS komputera:

  • pierwszym sektorze jazdy zawiera jego ładujący.
  • Jeden sektor to 512 bajtów - ostatnie dwa bajty z których musi być 0xAA55 (tj. 0x55 po którym następuje 0xAA), lub inaczej BIOS potraktuje dysk jako niemożliwy do rozruchu.
  • Jeśli wszystko jest w zamówieniu , wspomniany pierwszy sektor zostanie umieszczony pod adresem pamięci RAM 0000: 7C00 i , gdy rola systemu BIOS zostanie zakończona, przeniesienie kontroli do 0000: 7C00. (To znaczy.to JMPs na ten adres)

Więc od startu, jeśli u chcą CPU zacząć realizować swój kod, musi znajdować się w pamięci na 0000: 7c00. I ta część kodu jest ładowana z pierwszego sektora dysku twardego - również przez sprzęt. I tylko pierwszy sektor jest ładowany, pozostałe pozostałe części kodu muszą być załadowane przez ten początkowy "bootloader".

Więcej informacji na pierwszym sektorze dysku twardego i konstrukcja 7c00:

http://www.ata-atapi.com/hiwdos.html

http://www.ata-atapi.com/hiwmbr.html

proszę nie mylić z uruchomieniem trybu CPU - pierwszy dyspozycję będzie pobierał i wykonaj pod adresem fizycznym 0xffffffff0 (patrz strona 9-5):

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

i na tym etapie wykonuje on działanie nieulotne (co oznacza, że ​​nie można go łatwo przeprogramować, a tym samym nie jest to część odpowiedzialności bootloadera). Kod BIOS.

Powiązane problemy