通过调用BIOS中断可以设置窗口显示方式。如
mov ah,00h ;设置显示方式
mov al,03h ;80*25 16色文本显示
int 10h
通过上述代码就可以将窗口设置为80*25 16色文本显示的窗口,当然文本显示方式不止03h这一种。
还有如下
AL | 分辨率 | 色彩 |
03H | 80*25 | 16色 |
07H | 80*25 | 单色 |
文本模式下显示彩色文字,选则03h就好。
在完成上述显示方式设置之后就可以试着显示彩色字符啦(貌似我的编译器默认的就是彩色的)
在如DOS中断中显示字符,字符一般是以黑色背景与灰白色字体显示的。而使用BIOS中断显示彩色则需要使用09号功能,或者0A号功能。
暂且只说09号功能,示例代码如下
mov ah,09h
mov al,'A' ;显示的字符
mov cx,1 ;字符显示数量
mov bl,04h ;字符颜色信息
mov bh,00 ;页码设置
int 10h ;在当前光标处显示一个背景色为黑色,前景色为红色的字符'A'
文本模式下bh的数值最好设置为零。
在文本16色模式下,字符的属性存储在bl中,bl为一个字节大小,共八位。
b7控制字符是否闪烁,b6-b4为背景色,b3-b0为前景色
09号功能只能在当前光标处显示彩色字符。但是并不移动光标。所以想通过此命令连续输出字符。并且不被覆盖必须移动光标
而BIOS中断中的02号中断,提供了此功能。
mov ah,02h
mov dx,03h
int 10h ;将光标移动至文本的第1行,第三列
dl是列参数,dh是行参数
再配合BIOS中断中的03号中断,可以读取当前光标位置。就可实现用上面说的字符显示方式,连续输出字符。
DATAS SEGMENT
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AH,00H
MOV AL,02H
INT 10H
MOV AH,09H
MOV BH,0
MOV AL,'A'
MOV BL,04H
MOV CX,1
INT 10H
MOV AH,03H
INT 10H
INC DL
MOV AH,02H
INT 10H
MOV AH,09H
MOV BH,0
MOV AL,'B'
MOV BL,84H
MOV CX,1
INT 10H
MOV AH,4CH
INT 21H
CODES ENDS
END START