南邮微机实验,基于中断的字符串动态显示

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

 

posted @ 2023-03-28 21:01  玄修杰  阅读(180)  评论(0编辑  收藏  举报