Я предполагаю, что вы говорите о загрузке syslinux ядра Linux.
Взгляните на Documentation / x86 / boot.txt .
Ядро Linux имеет небольшой код настройки реального режима (находится по адресу arch / x86 / boot / ), который выполняет несколько действий, которые необходимо выполнить перед переходом в защищенный режим (большая часть запросов). BIOS реального режима для нескольких частей информации). Загрузчик загружает эту часть в нехватку памяти (ниже 640 КБ).
Старые ядра были достаточно малы, чтобы помещаться в менее чем 640 КБ непрерывной памяти, поэтому загрузчик загружал все ядро в нехватку памяти и мог делать все в реальном режиме. Более новые ядра имеют больший размер (обычно около 4 МБ), поэтому их необходимо загружать в большой объем памяти (более 1 МБ). Для этого загрузчик должен перейти в защищенный режим, чтобы поместить туда ядро, вернуться в реальный режим, чтобы вызвать BIOS для чтения большего количества секторов с диска, и переключиться обратно в реальный режим , прежде чем перейти к код установки ядра (который снова перейдет в защищенный режим в последний раз).
Итак, чтобы ответить на ваш вопрос, он делает наоборот: он переключает из защищенного режима в реальный режим после загрузки ядра.
Состояние процессора такое, как описано в документации, с которой я связан выше: CS реального режима указывает на начало кода настройки реального режима плюс 0x20 (заставляя CS: IP указывать на начало второй 512-байтовой настройки реального режима сектор кода), остальные регистры сегмента указывают на начало кода настройки реального режима (первый сектор) и несколько параметров, заполненных в заголовках, найденных в первых двух секторах кода настройки реального режима. Содержание регистров общего назначения не имеет значения.