例8.6 在256色320×200的图形显示模式下,从屏幕顶到屏幕底依次画横线(从最左边到最右边),线的颜色从1依次加1。要求用直接操作显示缓冲区的方法来画线。
解: | ||||
.MODEL SMALL .DATA mode DB ? ;保存当前显示模式 .CODE |
||||
HLine | PROC Near USES CX DI | ;画一条横线,DI—横线所在行,AL—线的颜色 | ||
IMUL | DI, 320 | ;跳过前面横所对应的字节,每行320个字节 | ||
MOV | CX, 320 | |||
REP | STOSB | ;重复设置AL的值 | ||
RET | ||||
HLine | ENDP | |||
.STARTUP | ||||
MOV | AH, 0FH | |||
INT | 10H | |||
MOV | mode, AL | ;保存当前显示模式,在程序结束前恢复之 | ||
MOV | AH, 0 | |||
MOV | AL, 13H | |||
INT | 10H | ;设置256色320×200的图形显示模式 | ||
MOV | AX, 0A000H | |||
MOV | ES, AX | ;图形模式的段地址为0A000H | ||
CLD | ||||
MOV | DI, 0 | |||
MOV | AL, 01H | ;CX=线所在列,AL=线的颜色 | ||
draw: | ||||
CALL | HLine | |||
INC | AL | |||
INC | DI | |||
CMP | DI, 200 | |||
JL | draw | ;从上到下画200条横线 | ||
MOV | AH, 0 | |||
INT | 16H | ;等待一个按键 | ||
MOV | AL, mode | |||
MOV | AH, 0 | |||
INT | 10H | ;恢复原来的屏幕显示模式 | ||
.EXIT 0 | ||||
END |