Assembly 如何使VESA线性帧缓冲区处于实模式,以便在处于保护模式后使用它?

Assembly 如何使VESA线性帧缓冲区处于实模式,以便在处于保护模式后使用它?,assembly,x86,operating-system,protected-mode,vesa,Assembly,X86,Operating System,Protected Mode,Vesa,我想创建一个小的操作系统,但在32位模式下,图形分辨率为全屏幕(1366x768)和24 bpp。 现在,我在nasm汇编中的代码在实模式下调用0x4F02 VESA函数,值为0xC118(左起第二位为1,用于创建线性帧缓冲区)。之后,我进入32位保护模式,只能访问0xA0000中屏幕的前64Kb,因此没有创建线性帧缓冲区。 我无法切换银行,因为它处于保护模式。 我在很多网站上搜索过,但是我没有找到任何方法来创建一个有效的线性帧缓冲区。LFB不是在0xA0000处创建的。您需要调用0x4F01“

我想创建一个小的操作系统,但在32位模式下,图形分辨率为全屏幕(1366x768)和24 bpp。 现在,我在nasm汇编中的代码在实模式下调用0x4F02 VESA函数,值为0xC118(左起第二位为1,用于创建线性帧缓冲区)。之后,我进入32位保护模式,只能访问0xA0000中屏幕的前64Kb,因此没有创建线性帧缓冲区。 我无法切换银行,因为它处于保护模式。
我在很多网站上搜索过,但是我没有找到任何方法来创建一个有效的线性帧缓冲区。

LFB不是在0xA0000处创建的。您需要调用0x4F01“Return VBE Mode Information”(返回VBE模式信息)来找出LFB在哪里。LFB在调用0x4F01时所说的physbase所在的位置(相同的物理地址),只需将其映射到虚拟内存中即可。您怎么知道呢?LFB不在内存中的任何位置,因为我已经用0xff填充了0x100000中的所有内存,屏幕仍然是黑色的。我在差不多2年后才试过xd