MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Изменить битность операционной системы, которую я пишу сам?"
Answer 1191058
Приведенный код совсем не похож на код операционной системы. У вас просто происходит вызов функции kernelMain и последующий бесконечный цикл ожидания аппаратных прерываний. Преобразовывать в 64-битный режим тут нечего, этот код будет выглядеть идентично в любом режиме.
Переход в 64-битный режим в процессорах Intel x86 осуществляется установкой флага LME (бит 8) в регистре Extended Feature Enable Register (EFER). См. Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3: System Programming Guide, раздел 2.2.1
Инструкция, которая заполняет этот регистр - wrmsr.
После этого нужно заполнить GDT так, чтобы в ней был сегмент кода с флагом 64-битного режима (21 бит в дескрипторе), и, соответственно, выполнить код в этом сегменте. Подробнее можно почитать здесь: https://wiki.osdev.org/User:Stephanvanschaik/Setting_Up_Long_Mode
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.