在此代码中的何处切换到 32 位保护模式

问题描述

我阅读了有关如何从认实模式切换到保护模式的信息,我想知道代码中的切换发生在哪里。有一部分是我抄的,没完全看懂,就是这个:

global loader
global stack_ptr

extern main

MODULEALIGN equ 1<<0
MEMINFO equ 1<<1
FLAGS equ MODULEALIGN | MEMINFO
MAGIC equ 0x1BADB002
CHECKSUM equ -(MAGIC + FLAGS)

section .mbheader
align 4
MultiBootHeader:
  dd MAGIC
  dd FLAGS
  dd CHECKSUM

section .text

STACKSIZE equ 0x4000

loader:
  mov esp,stack+STACKSIZE
  push eax
  push ebx

  call main

  cli ;clear interrupt flag

hang:
  hlt
  jmp hang

section .bss
align 4
stack:
  resb STACKSIZE
stack_ptr:

由于我可以正常使用 32 位寄存器并且使用中断失败,我想我处于保护模式,但我不明白切换发生在哪里。我读到使用保护模式时您必须设置内存分页,但这只是推荐还是强制性的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)