主页 >  滚动>正文
基于中断的字符串动态显示
时间 : 2023-03-28 21:31:28   来源 : 博客园


(资料图)

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

标签:

相关文章

X 关闭

X 关闭