Прочитайте эту статью:
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.