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