|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码
|
-
调试结果
-
错误的行数
|