2010-11-09 5 views
0

Я следую за brokenthorn operating development series, чтобы узнать о загрузчике. В this page, эти три строки кода:Вопрос о загрузчике

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? Я проверил на Where to store the bootloader on a floppy image?. Вот и то же самое. Но причина не объяснила. Может ли кто-нибудь объяснить это мне, пожалуйста? Заранее спасибо.

EDIT: Я получаю смущен, потому что в том же месте в более позднем учебнике коды являются:

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 

Теперь вот почему он использовал орг 0? И почему он скопировал адрес во все регистры? Извините, если это глупый вопрос. Я очень новичок в программировании сборки и только начал читать о загрузчиках.

ответ

0

Here он говорит:

команда разработчиков BIOS решила 0x7C00 , потому что:

  1. Они хотели оставить столько же места, как это возможно для ОС для загрузки непосредственно в 32KiB.
  2. 8086/8088 использовал 0x0 - 0x3FF для вектора прерываний, а после него - область данных BIOS .
  3. Загрузочный сектор составлял 512 байт, а области стека/данных для программы загрузки требовалось больше 512 байт.
  4. Итак, 0x7C00, был выбран последний 1024B 32KiB.
+0

Кстати, из вашей формулировки не ясно, что вы поняли: BIOS копирует загрузчик * в * адрес 0x7C00 в память. – AndreKR

+0

Вопрос отредактирован. Пожалуйста, проверьте. – narayanpatra

1

Я думаю, что вы можете объединить две разные вещи. Загрузочный загрузчик живет в начале флоппи (я думаю, где вы получаете 0000), но BIOS копирует его в память по адресу 7c00, прежде чем запускать его.

«org» сообщает ассемблеру, что здесь код будет запущен, после он был скопирован.

+0

Чтобы уточнить: он скопирован из сектора 0 дискеты в адрес памяти 0x7C00. – ruslik

+0

Вопрос отредактирован. Пожалуйста, проверьте. – narayanpatra