(资料图)
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
标签: