Вопрос

Я работаю над загрузчиком на машине x86.

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

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

Это было полезно?

Решение

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

из Вики для разработчиков ОС, откуда я получаю информацию, когда играю со своей игрушечной ОС

Другие советы

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

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

Самый безопасный вариант — предположить, что оно не определено.

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

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

Единственное, что я знаю, что оно четко определено, — это состояние процессора сразу после перезагрузки.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top