Каково значение памяти в 0000: 7c00 для загрузки?

Почему BIOS читает загрузочную запись раздела в 0000: 7c00? Что особенного в этом адресе? что?: "делая ссылку на адрес?

Ответ 1

":" - это перерыв в сегментированных днях памяти, когда ПК работали в реальном режиме и могли выполнять только 64 КБ за раз. Число слева от ":" - это ваш сегмент, справа - ваш адрес.

Команда отладки Windows принимает эту нотацию, если вы хотите сами по себе помять:

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   ................

Что касается этого конкретного адреса, это просто адрес, который был выбран для загрузки MBR, см. http://www.ata-atapi.com/hiwmbr.html

"Если найден MBR, он считывается в память в местоположении 0000: 7c00 и INT 19 перескакивает в ячейку памяти 0000: 7c00"

Ответ 2

Простым ответом является то, что 7C00h - 1k (512 байт для загрузочного сектора плюс дополнительные 512 байтов для использования в загрузочном секторе) со дна исходной 32k установленной памяти.

Счастливый ответ: org 7C00h стал синонимом загрузочного сектора - программирования загрузчика.

Ответ 3

Почему 7C00? На это лучше всего ответить разработчик программного обеспечения/аппаратного обеспечения BIOS для исходного/оригинального IBM PC BIOS.

Если вы можете найти копию справочника IBM Personal Computer Technical Reference, он может содержать некоторые подсказки.

Ответ 4

Прочтите эту статью:

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

Из приведенного выше URL BIOS (который фактически является аппаратным обеспечением ПК) сделает переход в память на 0000: 7c00, чтобы продолжить выполнение в 16-разрядном режиме.

И процитировать выше:

Загрузочный загрузчик работает при определенных условиях, которые программист должен оценить, чтобы сделать успешный загрузчик. Следующие относится к загрузчикам, инициированным BIOS ПК:

  • Первый сектор диск содержит свой загрузчик.
  • Один сектор - 512 байт - последний два байта которых должны быть 0xAA55 (т.е. 0x55, за которым следует 0xAA), или иначе BIOS будет рассматривать диск как не загружаемый.
  • Если все в порядок, указанный первый сектор будет помещен в адрес RAM 0000: 7C00 и роль BIOS завершена, поскольку она передает управление на 0000: 7C00. (I.e. it JMP на этот адрес)

Итак, из загрузки, если вы хотите, чтобы CPU начал выполнять ваш код, он должен быть расположен в памяти в 0000: 7c00. И эта часть кода загружается из первого сектора жестким диском - также выполняется с помощью аппаратного обеспечения. И загружается только первый сектор, остальные остальные части кода должны быть загружены этим начальным "загрузчиком".

Дополнительная информация о первом секторе жесткого диска и дизайне 7c00:

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

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

Пожалуйста, не путайте с запуском режима CPU - первая команда, которую он будет извлекать и выполняет, находится по физическому адресу 0xfffffff0 (см. стр. 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

и на этом этапе он выполняет энергонезависимость (это означает, что вы не можете легко перепрограммировать его и, следовательно, не учитывать ответственность за загрузчик).