自制操作系统适配VESA模式时的视频模式指针操作逻辑疑问
VESA模式设置代码疑问解答
以下是两处代码逻辑的具体解释:
- 关于远指针拆分的逻辑:
x86实模式下的4字节远指针遵循小端存储规则,低2位字节存储偏移量,高2位字节存储段地址,VBE规范中vbe_info_block的video_modes字段正是标准的实模式远指针。代码中先取vbe_info_block.video_modes的首2字节作为偏移量,再取偏移2字节后的2字节作为段地址,完全符合该存储规范,只有正确拆分远指针的段和偏移部分,才能计算出模式列表所在的真实内存地址,完成后续遍历操作。 - 关于si寄存器加2的逻辑:
VBE返回的视频模式列表是连续的16位无符号整数序列,每个整数对应一个VESA模式号,占2字节内存空间,列表末尾用0xFFFF作为终止标记。每次从fs:si地址读取一个16位的模式号到dx寄存器后,si自然要向后移动2字节,才能指向下一个模式号的起始位置,实现遍历整个模式列表的逻辑。
内容的提问来源于stack exchange,提问作者Aidan White
相关产品推荐
相关产品推荐

