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

📄 8257.asm

📁 使用28257芯片编辑的日期增减程序
💻 ASM
字号:
PORT0   EQU     2B0H
PORT1   EQU     2B1H
STACK   SEGMENT STACK
        DB      200 DUP(?)
STACK   ENDS
DATA    SEGMENT
        DA0     DB 5
        DA1     DB 4
        DA2     DB 3
        DA3     DB 2
        DA4     DB 1
        DA5     DB 0    ;init led data address
        SR1     DB 7    ;serc of modify_data
        ;UNDO    DB 0    ;keep state
        ;CLEA    DB 1    ;state clear
        ;STAR    DB 2    ;state start
        ;SHIF    DB 3    ;state shift
        ;STO     DB 3    ;state stop
        ;EXI     DB 4    ;state exit
        ;REFS    DB 6    ;return the front state
        ;P_STA   DB 1    ;present state
        ;F_STA   DB ?    ;front state
        ;S_STA   DB ?    ;set present state
        ACT1    DB ?    ;action G-1,D-2,C-3,E-4,error-0
        ;N_STA   DB 2,0,2,0,3,0,0,1,1,4,4,4;table of next state
        ;BUF1    DB ?    ;input buffer
        COUNT1  DW 0F000H    
        ;COUNT2  DW 7
        ;STA2    DW ?
        LED     DB 76H,79H,38H,38H,3FH,06H,00H  ;"HELLO! "
DATA    ENDS
CODE    SEGMENT 
MAIN    PROC FAR
ASSUME  CS:CODE,DS:DATA
START:  CLI
        PUSH DS
        MOV AX,0
        PUSH AX
        MOV AX,DATA
        MOV DS,AX
        
        MOV DX,PORT1
        MOV AL,0D3H
        OUT DX,AL
        MOV AL,2AH
        OUT DX,AL
        MOV AL,40H
        OUT DX,AL
        MOV AL,00H
        OUT DX,AL
        MOV AL,80H
        OUT DX,AL       ;init 8279
L1:     MOV DA0,5
        MOV DA1,4
        MOV DA2,3
        MOV DA3,2
        MOV DA4,1
        MOV DA5,0
        CALL CLEAR      ;clear
        MOV AL,ACT1
        CMP AL,1
        JZ  L4
        CMP AL,4
        JNZ L1
        JMP EXIT0
L4:     MOV SI,OFFSET DA0
        MOV CX,6
        MOV BX,OFFSET LED
        MOV DX,PORT1
        MOV AL,90H
        OUT DX,AL
L2:     CLD
        LODSB
        XLAT
        MOV DX,PORT0
        OUT DX,AL
        LOOP  L2
        ;CALL READ_KEY
L5:     CALL DELAY      ;make a delay
        MOV AL,ACT1
        CMP AL,4
        JZ EXIT0
        CMP AL,3
        JZ L1
        CMP AL,2
        JNZ L3
        CALL STOP
        MOV AL,ACT1
        CMP AL,4
        JZ EXIT0
        CMP AL,3
        JZ L1
        JMP L5
L3:     CALL LED_MO     ;make led move,form left to right
        MOV AL,ACT1
        CMP AL,4
        JZ EXIT0
        CMP AL,3
        JZ L1
        JMP L5
EXIT0:  MOV AX,4C00H
        INT 21H
MAIN    ENDP

CLEAR   PROC NEAR       ;clear main
        PUSH AX
        PUSH BX
        PUSH CX
        MOV DX,PORT1
        MOV AL,0D1H
        OUT DX,AL
        CALL DISP0      ;clear display
LL2:    MOV DX,PORT1
        IN  AL,DX
        AND AL,07H
        JZ LL2          ;when a key is pressed
LL3:    MOV DX,PORT0
        IN AL,DX
        MOV BL,AL
        AND AL,07H
        AND BL,38H
        MOV CL,03
        SHR BL,CL
        CMP BL,02H
        JNZ LL4
        CMP AL,0H
        JNZ LL2
        MOV ACT1,1      ;action beGin
        JMP LL5
LL4:    CMP BL,0H
        JNZ LL2
        CMP AL,6H
        JNZ LL6
        MOV ACT1,4      ;action Exit
        JMP LL5
LL6:    MOV ACT1,0      
                        ;judge the input,put the code of the action to ACT1 
LL5:    POP CX
        POP BX
        POP AX
        RET
CLEAR   ENDP

DISP0   PROC NEAR       ;clear display
        PUSH CX
        MOV AX,DATA
        MOV DS,AX
        MOV DX,PORT1
        MOV AL,90H
        OUT DX,AL
        MOV AL,6
        MOV BX,OFFSET LED
        XLAT
        MOV CX,6
L21:    MOV DX,PORT0
        OUT DX,AL
        LOOP L21
        POP CX
        RET
DISP0   ENDP

DISP1   PROC NEAR       ;display led letter
        PUSH CX
        MOV AX,DATA
        MOV DS,AX
        MOV SI,OFFSET DA0
        MOV CX,6
        MOV BX,OFFSET LED
        MOV DX,PORT1
        MOV AL,90H
        OUT DX,AL
L61:    CLD
        LODSB
        XLAT
        MOV DX,PORT0
        OUT DX,AL
        LOOP  L61
        POP CX
        RET
DISP1   ENDP

DELAY   PROC NEAR
        PUSH CX
        MOV CX,100
L31:    PUSH CX
        MOV CX,COUNT1
L32:    CALL READ_KEY   ;read input
        MOV AL,ACT1
        CMP AL,0
        JZ L34
        CMP AL,1
        JZ L34
        JMP L33
L34:    LOOP L32
        POP CX
        LOOP L31
        JMP L35
L33:    POP CX
L35:    POP CX
        RET
DELAY   ENDP

DELAY1  PROC NEAR
        PUSH CX
        MOV CX,10
L91:    PUSH CX
        MOV CX,COUNT1
L92:    CALL READ_KEY   ;read input
        MOV AL,ACT1
        CMP AL,0
        JZ L94
        CMP AL,1
        JZ L94
        JMP L93
L94:    LOOP L92
        POP CX
        LOOP L91
        JMP L95
L93:    POP CX
L95:    POP CX
        RET
DELAY1  ENDP

MODIFY_DA PROC NEAR     ;modify the data of DA0....DA5
        PUSH CX
        PUSH AX
        MOV SI,OFFSET DA0
        MOV CX,06H
L41:    MOV AL,[SI]        
        ADD AL,6
        MOV AH,0
        DIV SR1
        MOV [SI],AH
        INC SI
        LOOP L41
        POP AX
        POP CX
        RET
MODIFY_DA ENDP

LED_MO  PROC NEAR       ;make the led move
        PUSH CX
        MOV CX,7;COUNT2
L51:    CALL MODIFY_DA
        CALL DISP1
        CALL DELAY1
        MOV AL,ACT1
        CMP AL,0
        JZ L52
        CMP AL,1
        JZ L52
        CMP AL,3
        JZ L53
        CMP AL,4
        JZ L53
        CALL STOP
        MOV AL,ACT1
        CMP AL,1
        JZ L52
        JMP L53
L52:    LOOP L51
L53:    ;MOV COUNT2,7
        POP CX
        RET
LED_MO  ENDP

READ_KEY PROC NEAR      ;read input and make note the code of this action
        PUSH AX
        PUSH BX
        PUSH CX
L71:    MOV DX,PORT1
        IN  AL,DX
        AND AL,07H
        JZ LNEXT        ;when a key is pressed
L73:    MOV DX,PORT0
        IN AL,DX
        MOV BL,AL
        AND AL,07H
        AND BL,38H
        MOV CL,03
        SHR BL,CL
        CMP BL,02H
        JNZ L74
        CMP AL,0H
        JNZ LNEXT
        MOV ACT1,1      ;action beGin or Goto
        JMP L75
L74:    CMP BL,0H
        JNZ LNEXT
        CMP AL,5H
        JNZ L76
        MOV ACT1,2      ;action stop(D)
        JMP L75
L76:    CMP AL,4H
        JNZ L77
        MOV ACT1,3      ;action Clean
        JMP L75
L77:    CMP AL,6H
        JNZ LNEXT
        MOV ACT1,4      ;action Exit
        JMP L75
LNEXT:  MOV ACT1,0      ;no action or error action
L75:    ;MOV DL,ACT1
        ;CMP DL,0
        ;JZ L72
        ;MOV DL,ACT1
        ;ADD DL,30H
        ;MOV AH,2
        ;INT 21H
L72:    POP CX
        POP BX
        POP AX
        RET
READ_KEY ENDP

STOP PROC NEAR
        PUSH AX
L81:    CALL READ_KEY
        MOV AL,ACT1
        CMP AL,0
        JZ L81
        CMP AL,2
        JZ L81
        POP AX
        RET
STOP ENDP

CODE    ENDS
        END  START



⌨️ 快捷键说明

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