1:利用1CH中断,每隔一定时间间隔,在屏幕上打印一行自定义的字符串,按下键盘任意键后程序自动退出。
2:利用系统定时源设计计时器,具体内容:利用日时钟1CH中断设计定时中断程序,每隔一秒刷新屏幕上显示的时、分、秒。(提示:最终屏幕中的打印形式为24小时制形式:HH:MM:SS,每秒钟进行刷新一次,可采用INT 21H打印字符串的子功能,每秒进行重新打印即可实现覆盖刷新。同时要注意时间显示格式要采用24小时制的时、分、秒的更新。)
.486
DATA SEGMENT USE16
MESG DB 'Bxxxxxxxxx', 0AH,0DH, '$' ;0AH对应这换行符
OLD1C DD ?
ICOUNT DB 18 ;中断计数初值
DATA ENDS
CODE SEGMENT USE16
ASSUME CS: CODE, DS: DATA
BEG: MOV AX, DATA
MOV DS, AX
CLI ;关中断
CALL READ1C
CALL WRITE1C
STI ;开中断
SCAN: MOV AH, 01H ;INT 16H的01H功能,查看键盘缓冲区,当有按键输入时,Z=0.
INT 16H
JZ SCAN ;当键盘没有输入,SCAN一直循环
CALL RESET
MOV AH, 4CH
INT 21H
;---------------------------------
SERVICE PROC
PUSHA ;保护现场
PUSH DS
MOV AX, DATA ;将DATA数据段基地址放到DS里
MOV DS, AX
DEC ICOUNT ;中断计数
JNZ EXIT ;不满18次调用时转到EXIT
MOV ICOUNT, 18 ;计满18次后,将计数器值复位
MOV AH, 9 ;显示字符串
LEA DX, MESG ;将MESG的偏移地址放到DX中
INT 21H
EXIT: POP DS ;恢复现场
POPA
IRET ;返回系统8型中断服务程序
SERVICE ENDP
;----------------------------------
READ1C PROC
MOV AH, 35H ;使用INT21H的35H子功能,读出指定n型向量
MOV AL, 1CH
INT 21H
MOV WORD PTR OLD1C, BX ;原1CH的中断向量偏移地址读到BX
MOV WORD PTR OLD1C+2, ES ;原1CH的中断向量基地址躲到ES
RET
READ1C ENDP
;---------------------------------
WRITE1C PROC
PUSH DS ;将DS寄存器的内容压入堆栈保存
;MOV AX,CODE
MOV AX, SEG SERVICE ;将服务子程序所在代码段的基地址写入DS
MOV DS, AX
MOV DX, OFFSET SERVICE ;将服务子程序入口的偏移地址写入DX
MOV AH, 25H ;使用INT21H的25H子功能,写入指定n型向量
MOV AL, 1CH
INT 21H
POP DS ;将DS寄存器的内容从堆栈弹出恢复
RET
WRITE1C ENDP
;---------------------------------
RESET PROC ;恢复系统1CH型中断向量
MOV DX, WORD PTR OLD1C
MOV DS, WORD PTR OLD1C+2
MOV AH, 25H
MOV AL, 1CH
INT 21H
RET
RESET ENDP
CODE ENDS
END BEG