Почему BIOS читает загрузочную запись раздела в 0000: 7c00? Что особенного в этом адресе? что?: "делая ссылку на адрес?
Каково значение памяти в 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):
и на этом этапе он выполняет энергонезависимость (это означает, что вы не можете легко перепрограммировать его и, следовательно, не учитывать ответственность за загрузчик).