Переключиться в защищенный режим

Есть ли простой код для перехода в защищенный режим? (для 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 расскажет вам, как перейти из реального режима в защищенный режим:)

Другие вопросы по тегам