我正在尝试在简单的 16 位实模式操作系统中清除屏幕。下面是代码:
clearScreen:
pusha
mov ah, 0x7
mov al, 0
int 0x10
popa
ret
我读了那个设置al
为 0 并调用滚动屏幕中断会清理屏幕,但它似乎只会将第一行的颜色更改为灰色。
感谢任何可以解释为什么这不起作用的人。
问题是int 0x10
功能0x07
需要的参数比你给出的多。具体来说,
- AH = 07 = 向下滚动窗口
- AL = 要滚动的行数(或全部为 0)
- BH = 写入空行的属性
- CH、CL=窗口左上角的行、列
- DH、DL=窗口右下角的行、列
除非您设置它们,否则它们只会包含之前的说明中出现的任何内容,这不太可能是您想要的!
因此,假设您使用标准 80x25 字符屏幕,您的代码应如下编写:
clearScreen:
pusha
mov ax, 0x0700 ; function 07, AL=0 means scroll whole window
mov bh, 0x07 ; character attribute = white on black
mov cx, 0x0000 ; row = 0, col = 0
mov dx, 0x184f ; row = 24 (0x18), col = 79 (0x4f)
int 0x10 ; call BIOS video interrupt
popa
ret
看看著名的拉尔夫·布朗的这个版本中断列表更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)