马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编一段中断处理程序,在主程序运行的过程中,每隔10秒钟响铃一次,同时在屏幕上显示“The bell is ring!”。DATA SEGMENT
COUNT DW 1
MESS DB 'The bell is ring!', 0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES: DATA
MAIN PROC FAR
START: PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AL,1CH ;取中断向量
MOV AH,35H
INT 21H
PUSH ES ;存原中断向量段址
PUSH BX ;存原中断向量偏移量
PUSH DS
MOV DX,OFFSET ring;新偏移量送DX
MOV AX, SEG ring
MOV DS,AX ;新段址送DS
MOV AL, 1CH
MOV AH, 25H
INT 21H ;写入新的中断向量
POP DS
IN AL,21H ;读取中断屏蔽字
AND AL, 11111110B ;允许定时器中断
OUT 21H, AL
STI ;开中断
MOV DI, 2000
DELAY:MOV SI,3000 ;延时
DELAY1:DEC SI
JNZ DELAY1
DEC DI
JNZ DELAY
POP DX ;恢复原中断向量
POP DS
MOV AL,1CH
MOV AH,25H
INT 21H
RET
MAIN ENDP
ring:PROC NEAR
PUSH DS
PUSH AX
PUSH CX
PUSH DX
MOV AX,DATA
MOV DS,AX
STI ;开中断
DEC COUNT ;计秒值
JNZ EXIT
MOV DX, OFFSET MESS
MOV AH,09H
INT 21H
MOV DX,100
IN AL,61H
AND AL,0FCH
SOUND: XOR AL,02
OUT 61H,AL;扬声器发声
MOV CX,140H
WAIT1:LOOP WAIT1;延时等待
DEC DX
JNE SOUND
MOV COUNT,182
EXIT: CLI ;关中断
POP DX
POP CX
POP AX
POP DS
IRET ;中断返回
ring ENDP
CODE ENDS
END START
|