О спецификации BIOS

#assembly #x86

# #сборка #x86

Вопрос:

При включении системы BIOS проверит 1-й сектор устройства хранения, если последние два байта равны 0x55aa, затем загрузите сектор в 0000H: 7C00H. Наконец-то переходит к адресу.

Моя проблема в том, что как раз тогда, когда процессор переключается на логический адрес 0000H: 7C00H, каковы значения регистров общего назначения. Я имею в виду, что BIOS передаст некоторую информацию для кода загрузочного сектора, тогда как BIOS хранит эту информацию?

Ответ №1:

BIOS не будет «передавать» информацию для или в загрузочный сектор. Загрузочный сектор просто считывается с устройства, помещается в память и ему передается управление. Предполагается, что регистры общего назначения не содержат каких-либо конкретных значений, и загрузчику не нужно пытаться сохранять и восстанавливать их исходные значения перед использованием этих регистров общего назначения. Ради вашего вопроса, считайте их «неопределенными». Возможно, вам захочется различать главную загрузочную запись (MBR) и загрузочную запись Voiume (VBR), последняя из которых представляет собой загрузочные записи 2-го уровня, загруженные по цепочке. Но даже если вы захотите, BIOS не обращает внимания на различия.

Комментарии:

1. Значение регистров общего назначения на данный момент неизвестно. Это похоже на неинициализированные данные c / c , где это будет какое-то случайное значение, оставшееся от другой операции, используемой во время загрузки.

2. Однако dl регистр содержит загрузочный диск, поэтому вы можете передать его обратно в функции BIOS.

3. @Jester: Вы даже не можете полагаться на тот факт, что DL содержит загрузочный диск, особенно при использовании цепных загрузчиков. Например, GRUB имеет настраиваемый параметр, если предполагается, что DL содержит загрузочный диск или нет.

4. Вы также должны знать, что указатель стека (регистры SS и SP) должен быть правильно настроен загрузочным сектором, поскольку стек BIOS может быть слишком маленьким.