⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.asm

📁 大学微机原理课程设计之一-------交通灯 源码。比较作孽
💻 ASM
字号:
        DATA  SEGMENT
     INTFLAG  DB        0
       COUNT  DB        18
      SECOND  DB        0
      MINUTE  DB        0
        HOUR  DB        0
     OLD_SEG  DW        ?
     OLD_OFF  DW        ?
     OLD_MSK  DB        ?
        DATA  ENDS

       STACK  SEGMENT   STACK
              DW        200 DUP(?)
       STACK  ENDS

        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA

      START:  PUSH      DS
              XOR       AX,AX
              PUSH      AX
              MOV       AX,DATA
              MOV       DS,AX
	
              MOV       AH,35H
              MOV       AL,08H
              INT       21H
              MOV       OLD_OFF,BX
              MOV       OLD_SEG,ES
              IN        AL,21H
              MOV       OLD_MSK,AL

              CLI
              PUSH      DS
              MOV       AH,25H
              MOV       AL,08H
              MOV       DX,SEG INTERRUPT
              MOV       DS,DX
              MOV       DX,OFFSET INTERRUPT
              INT       21H
              POP       DS
              MOV       AL,OLD_MSK
              AND       AL,11111110B
              STI

   MAINLOOP:
              MOV       AH,0BH      ;test keyboard
              INT       21H
              CMP       AL,00H
              JE        CHK_INT
              MOV       AH,08H      ;get key
              INT       21H
              CMP       AL,1BH      ;'ESC'
              JNE       CHK_INT
	
              CLI
              PUSH      DS
              PUSH      ES
              MOV       AX,DS
              MOV       ES,AX
              MOV       AH,25H
              MOV       AL,08H
              MOV       DX,ES:OLD_SEG
              MOV       DS,DX
              MOV       DX,ES:OLD_OFF
              INT       21H
              POP       ES
              POP       DS
              MOV       AL,OLD_MSK
              OUT       21H,AL
              STI
              MOV       AH,4CH      ;exit
              INT       21H

    CHK_INT:
              CMP       INTFLAG,0
              JE        MAINLOOP
              MOV       INTFLAG,0

              DEC       COUNT
              JNE       MAINLOOP

              MOV       COUNT,18
              MOV       AL,SECOND
              INC       AL
              DAA
              MOV       SECOND,AL

              CMP       SECOND,60H
              JNAE      REFRESH

              MOV       SECOND,00H

              MOV       AL,MINUTE
              INC       AL
              DAA
              MOV       MINUTE,AL

              CMP       MINUTE,60H
              JNAE      REFRESH

              MOV       MINUTE,00H

              MOV       AL,HOUR
              INC       AL
              DAA
              MOV       HOUR,AL

              CMP       HOUR,24H
              JNAE      REFRESH

              MOV       HOUR,00H

    REFRESH:
              MOV       AH,02H
              MOV       DL,0DH      ;'cr'
              INT       21H
              MOV       DH,HOUR
              MOV       DL,DH
              AND       DL,11110000B
              MOV       CL,04
              SHR       DL,CL
              OR        DL,30H
              MOV       AH,02H
              INT       21H
              MOV       DL,DH
              AND       DL,00001111B
              OR        DL,30H
              MOV       AH,02H
              INT       21H
              MOV       AH,02H
              MOV       DL,':'
              INT       21H

              MOV       DH,MINUTE
              MOV       DL,DH
              AND       DL,11110000B
              MOV       CL,04
              SHR       DL,CL
              OR        DL,30H
              MOV       AH,02H
              INT       21H
              MOV       DL,DH
              AND       DL,00001111B
              OR        DL,30H
              MOV       AH,02H
              INT       21H
              MOV       AH,02H
              MOV       DL,':'
              INT       21H

              MOV       DH,SECOND
              MOV       DL,DH
              AND       DL,11110000B
              MOV       CL,04
              SHR       DL,CL
              OR        DL,30H
              MOV       AH,02H
              INT       21H
              MOV       DL,DH
              AND       DL,00001111B
              OR        DL,30H
              MOV       AH,02H
              INT       21H
              JMP       MAINLOOP
   INTERRUPT  PROC      FAR
              PUSHF
              PUSH      AX
              PUSH      DS
              MOV       AX,DATA
              MOV       DS,AX

              MOV       INTFLAG,1

              MOV       AL,00100000B            ;EOI
              OUT       21H,AL
              POP       DS
              POP       AX
              POPF
              IRET
   INTERRUPT  ENDP
        CODE  ENDS
              END       START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -