例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 | ||||