问1:王爽的书上说,dos的内存地址空间中,B8000H-BFFFFH是80x25的彩色字符显示缓冲区。这个对于dos来说是固定的么?
答1:不同的显示模式的显示缓冲区不一定相同吧。对同一显示模式来说则是固定的。彩色文本模式一般在 B800h 段,单色文本在 B000h 段;图形模式在 A000h 段。DOS 并不只是可以使用 03h 模式的。
答2:首先要分清一个概念,显存大小与DOS(BIOS)无关,DOS(BIOS)只不过根据显示模式把显存映射到内存地址。
并且这个映射大小和地址也不是固定的,可以通过向显卡的端口发送数据来修改映射其实地址。
DOS下,段址[A000,C000)有128K的地址可供映射,例如:在12h(640*480*16)、13h(320*200*256)等图形模式下,显存地址从段址A000开始,在某些黑白字符模式下,显存地址从段址B000开始。
还有更高级的VESA模式,显存将分页映射到段址A000开始的64K区域,通过切换页就能访问全部的显存了。
当然,书中所述:B8000H-BFFFFH是80x25的彩色字符显示缓冲区是正确的。
答3:实模式下显示缓冲区有3个区域,b000/b800/a000分别对应于不同的显示模式
前两个区域是32K,后一个是64K并且通过分页理论上可以访问所有显存
答4:显存其实可以比内存还大,但依旧可以用内存来寻址。不过需要操作端口。
具体的方法是假如默认的时候 4000:0000~5000:0000(我这个是瞎写的,显存地址我早就忘了)对应显存中的前1000H个显存。然后通过操作端口改变映射的显存的范围,然后4000:0000~5000:0000对应的显存就是1000H~1FFFFH的显存了。这个就是三楼说的那个分页映射。
具体的操作方法见《PC技术内幕》。我推荐你不要试验,我试验之后显示器就坏了。虽然不知道有没有直接的联系,但我的一个网友说可能是有联系的。当时用的是CRT的显示器,那个网友说还现在的液晶显示器应该不会出现这种问题了,但还是小心为妙,这种显示方式毕竟属于非主流,了解一下就行了。
在32位模式下确实不再需要使用这种方式访问显存
但在实模式时代,这个是绝对的主流方式
问2:为什么有的地方说显存地址为B800:0000开始,而有的却说是A000:0000。谁对呢?
答:
B800开始的是字符模式
A000开始的是图形模式。
另外你要截调试板还跟显示模式有关,
可以用int 10的调用(标准视屏/VESA)具体的查查资料吧。
如果是高彩或真彩式没有调色板的。
欢迎来图形/游戏/多媒体版提此类问题。