1、打开分页机制即设置cr0的PG位为1,代码如下(在SetupPaging子程序中):
mov eax, cr0 ; ┓ or eax, 80000000h ; ┣ 设置cr0的PG=1,打开分页机制 mov cr0, eax ; ┛ |
2、在返回实模式的过渡16位代码段[SECTION .s16code]中需要关闭分页机制即cr0的PG设置为0,同时设置cr0的PE位设置为0。代码如下(在代码段[SECTION .s16code]中):
mov eax, cr0 and al, 11111110b ;应改为 and eax, 7ffffffeh ;关闭分页机制、进入保护模式 mov cr0, eax |
如果按照红色标注的代码(也就是原来的代码)运行程序,会出现下面的“栈”错误。