|
首先纠正一下我在前面关于机器型号的描述。联想和华硕笔记本,都是返回 BX=000F。能够正常恢复画面。
而返回 BX=0374 的,是 VirtualBox 虚拟机。你自己可以安装 VirtualBox 虚拟机进行试验。
在 VirtualBox 上,最新版的 grub.com 不能恢复画面(显示的画面为 grub4dos 的内容:Graphics mode set to 0x12),但回车后,滚屏一行,则可以显示以前的 DOS 画面。
我发现可能是你程序中的一个小的错误造成的。
int5: mov ax,1c00h ;get vga config buffer size in bx
xor bx,bx
mov cx,07h
int 10h
cmp al,1ch
jnz int3
mov cx,6 ; x 64 bytes
shl bx,cl <------- 此处也有隐患,万一当 buffer size 超过 64K 时,将发生溢出。BX 的寻址范围最大只有 64K。改进方法:不要进行乘以 64 的操作,而把 2000h 除以 64,这样再进行比较,就安全了。
cmp bx,2000h
jg int3 这里似乎应该是 ja (无符号比较大小)才对 。
|
|