CookieOfFortune по существу правильно (потому что он хотел переместить что-то в место, где был первоначальный загрузчик), но это было не для второго загрузчика, а скорее для самого ядра.
Из его комментариев:
Затем загружает систему в 0x10000,
используя прерывания BIOS. После этого
отключает все прерывания, перемещает
система до 0x0000, меняется на
защищенный режим и вызывает начало
система. Система тогда должна
Повторно инициализировать защищенный режим в
это собственные таблицы, и включить
прерывает по мере необходимости.
Он хочет, чтобы ядро было расположено в 0x0000 ... 0xKERNEL_SIZE-1, однако начальный загрузчик в настоящее время находится в 0x7C00, поэтому, если ядро было больше ~ 32 КБ, оно перезаписало бы загрузчик при его перемещении. Тот факт, что ядро находится в 0x0000, также объясняет этот комментарий:
"ПРИМЕЧАНИЕ! В настоящее время система не более
8 * 65536 байт. "
Если бы он был длиннее 512 КБ, начиная с 0, он рискует попасть в зарезервированную область адресного пространства x86.
Я полагаю, что этот раздел кода содержит фактический переход в ядро
mov ax,#0x0001 | protected mode (PE) bit
lmsw ax | This is it!
jmpi 0,8 | jmp offset 0 of segment 8 (cs)