例8.3 用“霓虹灯”的显示方式显示字符串“Hello”,按ESC键时结束程序的运行。
解:我们用显示颜色的变化来模拟霓虹灯的显示方式,即用颜色15(亮白)作为字符的主要显示颜色,再用颜色12(亮红)从左到右逐个扫描。
.MODEL SMALL, C | ||||
.DATA | ||||
KBEsc EQU 1BH | ||||
BUFF DB "H", 15, "e", 15, "l", 15, "l", 15, "o", 15 | ||||
.CODE | ||||
Clear | PROC Near Uses AX BX CX DX | ;清屏幕,并保护所用寄存器 | ||
MOV | CL, 0 | |||
MOV | CH, 0 | |||
MOV | DL, 79 | |||
MOV | DH, 24 | ;(0,0)-(24,79)是屏幕的左上角和右下角 | ||
MOV | BH, 7 | |||
MOV | AL, 0 | |||
MOV | AH, 6 | |||
INT | 10H | |||
RET | ||||
Clear | ENDP | |||
.STARTUP | ||||
CALL | Clear | |||
MOV | AX, DS | |||
MOV | ES, AX | |||
MOV | SI, 9 | |||
again: | ||||
MOV | BUFF[SI], 15 | ;把前一次的红色还原 | ||
ADD | SI, 2 | |||
.IF SI > 9 MOV SI, 1 .ENDIF |
||||
MOV | BUFF[SI], 12 | ;把当前字符以红色显示 | ||
MOV | BH, 0 | |||
MOV | CX, 5 | |||
MOV | DH, 5 | |||
MOV | DL, 20 | ;显示位置从(5, 20)开始 | ||
LEA | BP, BUFF | |||
MOV | AL, 2 | |||
MOV | AH, 13H | |||
INT | 10H | ;调用中断10H之功能13H | ||
MOV | AH, 1 | |||
INT | 16H | ;检查是否有按键 | ||
JZ | again | ;若无字符可读,则继续循环 | ||
MOV | AH, 0 | |||
INT | 16H | |||
CMP | AL, KBEsc | |||
JNZ | again | ;若按键不是Escape,则继续循环 | ||
.EXIT 0 | ||||
END |