说明:这个东西其实主要是由老师前一个显示字符引申出来的,改的东西不是很多,也算是对别人借鉴和参考吧!
DATA SEGMENT
S1 DB 'Can I help you?','$'
DATA ENDS
;
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: CLI ;关中断
MOV AL,08H
MOV AH,35H
INT 21H ;取系统08H中断向量
PUSH ES ;用堆栈保存
PUSH BX
PUSH DS
MOV DX,OFFSET DISPLAY ;设置08H MOV AX,SEG DISPLAY
MOV DS,AX
MOV AL,08H
MOV AH,25H
INT 21H
POP DS
IN AL,21H ;设置8259A中断屏蔽字,
AND AL,11111110B ;允许IR0中断
OUT 21H,AL
MOV CX,0 ;置中断子程计数器初值为0
STI ;CPU开中断
MOV SI,8000H ;用双重循环延时,
W2: MOV DI,8000H ;模拟CPU处理
W1: DEC DI ;DI,SI的修改控制时间
JNZ W1
DEC SI
JNZ W2
POP DX ;恢复系统08H中断向量
POP DS
MOV AL,08H
MOV AH,25H
INT 21H
MOV AH,4CH ;返回DOS
INT 21H
;
DISPLAY PROC ;自编的08H类型中断子程
PUSH AX ;保存现场
INC CX ;执行中断一次,计数加1
CMP CX,18
JNZ EXIT ;到19次?未到至EXIT
LEA DI,S1
MOV DL,[DI] ;到,显示字符串
MOV AH,09
INT 21H
MOV CX,0 ;清计数值为0,重新计时
EXIT: MOV AL,20H ;发中断结束命令EOI
OUT 20H,AL
POP AX ;恢复现场
IRET ;中断返回
DISPLAY ENDP
CODE ENDS
END start