Переключиться в защищенный режим
Есть ли простой код для перехода в защищенный режим? (для NASM) Да - я пытался решить это с помощью Google. Все же я не понимаю, как... А как загрузить ядро (в этом режиме), которое находится сразу за VBR? (после первых 512 байт с размером 512 байт) Спасибо!
2 ответа
В защищенном режиме у вас нет доступа к BIOS, чтобы сделать все за вас. Вам нужно будет написать порядок драйверов для загрузчика, чтобы загрузить ваше ядро и запустить его. Другой подход для относительно небольших ядер (менее ~640 КБ) заключается в том, что, когда вы все еще находитесь в реальном режиме, загрузите его с BIOS и, как только в защищенном режиме, удалите его из нехватки памяти и запустите.
Прошло много времени с тех пор, как я это сделал, но если я правильно помню, прежде чем вы сможете переключиться из реального режима в защищенный режим, вы должны сбросить контроллер 8259 (рис.), Но опять же, это было на чипе i386, так что это может больше не будет необходимости.
Затем вы используете CR0 для переключения в защищенный режим.
mov eax, cr0
inc eax ; PE bit must be set
mov cr0, eax ; store the new value in CR0
jmp dword pSelector ; switch to selector
Очевидно, прежде чем вы сможете переключиться в защищенный режим, вы должны установить IDT, GDT и, особенно, иметь двойной обработчик ошибок (не спрашивайте). Если вы используете GAS, вам придется перевести это на что-то вроде этого:
mov %cr0, %eax
inc %eax
mov %eax, %cr0
jmp pSelector
Есть несколько достойных книг по программированию на i386, я полагаю, что руководство AMD расскажет вам, как перейти из реального режима в защищенный режим:)