Каково значение памяти в 0000: 7c00 для последовательности загрузки? - PullRequest
12 голосов
/ 13 января 2010

Почему bios читает в загрузочной записи раздела в 0000: 7c00? Что особенного в этом адресе? что делает «:» при обращении к адресу?

Ответы [ 4 ]

18 голосов
/ 25 августа 2010

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

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

11 голосов
/ 13 января 2010

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

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

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 голосов
/ 18 февраля 2012

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

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. (Т.е. это JMP по этому адресу)

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

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

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

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

Пожалуйста, не путайте с режимом запуска ЦП - первая инструкция, которую он получит и выполнит, находится по физическому адресу 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

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

1 голос
/ 13 января 2010

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

Если вам удастся найти копию Технического справочного руководства по персональному компьютеру IBM * , она может содержать некоторые подсказки.

...