Въпрос за буутлоудъра

Следя сериите за разработване на операции на brokenthorn, за да проуча за зареждащото устройство. В тази страница това са трите реда код:

bits    16  ; We are still in 16 bit Real Mode
org     0x7c00  ; We are loaded by BIOS at 0x7C00
start:      jmp loader ; jump over OEM block

Във втори ред Той зареди биоса на 7c00 на дискета. защо не на 0000? Проверих в Къде да съхранявам буутлоудъра на флопи изображение?. Тук също даде същото. Но причината не е обяснена. Може ли някой да ми обясни това, моля? Благодаря предварително.

РЕДАКТИРАНЕ: Обърквам се, защото в същия сайт в по-късен урок кодовете са:

bits    16  ; we are in 16 bit real mode

org  0   ; we will set regisers later

start:  jmp main ; jump to start of bootloader

и след това в основния

main:

     ;----------------------------------------------------
     ; code located at 0000:7C00, adjust segment registers
     ;----------------------------------------------------

          cli           ; disable interrupts
          mov     ax, 0x07C0    ; setup registers to point to our segment
          mov     ds, ax
          mov     es, ax
          mov     fs, ax
          mov     gs, ax

Ето защо той използва org 0? И тогава защо е копирал адреса във всички регистри? Съжалявам, ако това е глупав въпрос. Аз съм много нов в асемблерното програмиране и току-що започнах да чета за зареждащите програми.


person narayanpatra    schedule 09.11.2010    source източник


Отговори (2)


Мисля, че може да смесвате две различни неща. Буутлоудърът живее в началото на дискетата (предполагам, че откъдето получавате 0000), но BIOS го копира в паметта на адрес 7c00, преди да го стартира.

„Орг“ казва на асемблера, че това е мястото, откъдето ще стартира кодът, след като бъде копиран.

person Will Dean    schedule 09.11.2010
comment
За пояснение: той се копира от сектор 0 на дискетата на адрес на паметта 0x7C00. - person ruslik; 09.11.2010

Тук се казва:

Екипът от разработчици на BIOS реши 0x7C00, защото:

  1. Те искаха да оставят възможно най-много място за операционната система да се зареди сама в рамките на 32KiB.
  2. 8086/8088 използва 0x0 - 0x3FF за вектор на прекъсванията, а зоната с данни на BIOS беше след него.
  3. Секторът за зареждане беше 512 байта, а областта на стека/данните за програмата за зареждане се нуждаеше от още 512 байта.
  4. И така, 0x7C00, бяха избрани последните 1024B от 32KiB.
person AndreKR    schedule 09.11.2010
comment
Между другото, от думите ви не става ясно дали сте разбрали: BIOS копира буутлоудъра на адрес 0x7C00 в паметта. - person AndreKR; 09.11.2010