По какому адресу начинает работать x86? - PullRequest
5 голосов
/ 23 октября 2010

При первом включении 8086 или 8088, по какому адресу начинает работать процессор?Я знаю, что Z80 начинается с 0, а 6809 ищет адрес FFFF для начала, но я часто задавался вопросом, как начинается x86.Вмешательство BIOS.IE, если у меня была своя собственная EEPROM для загрузки, где она должна находиться в оперативной памяти, чтобы запустить машину?

Ответы [ 3 ]

9 голосов
/ 23 октября 2010

Это действительно гораздо более сложный вопрос, чем вы, возможно, поняли.На 8086 это довольно просто - он начинается с FFFF: 0000 (16 байт до конца памяти).

Хитрая часть на 286 или выше (т. Е. Что-нибудь отдаленно современное).В этих случаях он все еще запускается за 16 байтов до конца памяти, но, конечно, с 24-битной адресацией (286) или 32-битной адресацией (386+) физический адрес отличается.Это многим не кажется сложным, но это действительно так.Сложность возникает из-за того, что процессор начинает работать в реальном режиме, но этот адрес (и все те, что находятся поблизости) не видны процессору в реальном режиме.Следовательно, изначально он выполняется в довольно странном режиме, где в большинстве случаев он находится в реальном режиме, но некоторые старшие биты адреса, который вы, кажется, выполняете, игнорируются и вместо этого в основном привязаны к единице, поэтому верхняя часть физического адресапространство видно процессору.Затем, когда вы выполняете дальний переход, процессор молча переключается в «нормальный» реальный режим.

BIOS запускается в реальном режиме, но обычно выполняется таким образом только в течение короткого времени перед настройкой (минимальной).) защищенный режим среды и переход в защищенный режим.Оттуда BIOS выполняет обычное самотестирование при включении, распаковывает BIOS и копирует его в ОЗУ, которое фактически , расположенное по адресу FFFF: 0000, переключается обратно в реальный режим и выполняет код в дополнительном периферийном устройстве.ПЗУ, если они помечены для автоматического выполнения (обычно переключаются обратно в защищенный режим в процессе, но возвращаются в реальный режим после завершения).Одним из них обычно будет контроллер жесткого диска, который будет иметь код для автоматического считывания в загрузочном блоке с диска и выполнения его для запуска загрузки ОС и т. П.

0 голосов
/ 23 октября 2010

Регистр cs (выбор кода) установлен на 0xffff, а ip (указатель инструкции) установлен на 0x0000.

Это соответствует расположению физической памяти 0xffff0, носодержимое cs/ip важно, так как оно влияет на объем памяти, который вы можете использовать без перехода, а также на то, как должен генерироваться код, если он не зависит от позиции.

По сути, это так же, какстарые 8080 дней, когда у вас есть чанк 64K, вы можете обратиться к своему коду. Как только вы измените cs, все изменения конечно будут.

0 голосов
/ 23 октября 2010

8086 Сброс устанавливает счетчик программы на FFFF0h.

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