Состояние регистров после загрузки - PullRequest
7 голосов
/ 21 августа 2008

Я работаю над загрузчиком на компьютере с архитектурой x86.

Когда BIOS копирует содержимое MBR в 0x7c00 и переходит по этому адресу, есть ли стандартное значение для содержимого регистров? Регистры имеют стандартные значения?

Я знаю, что регистры сегментов обычно установлены на 0, но иногда будут 0x7c0. А как насчет других аппаратных регистров?

Ответы [ 7 ]

8 голосов
/ 21 августа 2008

Эта среда раннего выполнения сильно зависит от реализации, то есть от реализации вашего конкретного BIOS. Никогда не делайте предположений относительно содержимого регистров. Они могут быть инициализированы в 0, но они также могут содержать случайное значение.

из OS dev Wiki , где я получаю информацию, когда играю с моей игрушечной ОС

1 голос
/ 21 августа 2008

Всегда допускайте неопределенность, иначе вы столкнетесь с серьезными проблемами, если попытаетесь портировать архитектуру.

Нет ничего более похожего на боль переноса кода, предполагающего, что все неинициализированное будет установлено на ноль.

1 голос
/ 21 августа 2008

Единственное, что я знаю, чтобы быть четко определенным, это состояние процессора сразу после сброса.

Для записи вы можете найти , что в Руководство разработчика программного обеспечения Intel Том 3, глава 8: «УПРАВЛЕНИЕ ПРОЦЕССОРОМ И ИНИЦИАЛИЗАЦИЯ» в таблице под названием «Процессоры IA-32, следующие за мощностью , сброс или INIT "

1 голос
/ 21 августа 2008

Самая безопасная ставка - предполагать, что она не определена.

1 голос
/ 21 августа 2008

Вы всегда можете инициализировать их самостоятельно, чтобы начать с известного состояния.

1 голос
/ 21 августа 2008

Не определено, я полагаю? Я думаю, что это зависит от материнской платы и процессора и должно рассматриваться как случайное для вашего же блага.

1 голос
/ 21 августа 2008

Лучший вариант - ничего не предполагать. Если они имеют значение, вы найдете это с другой стороны, когда вам понадобится информация, которую они предоставляют.

...