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