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

📄 8254-2.asm

📁 一个简单的8254计时的小实验,每个六十秒刷新一次
💻 ASM
字号:
MY8254_COUNT0  EQU  9C40H
MY8254_COUNT1  EQU  9C41H
MY8254_COUNT2  EQU  9C42H
MY8254_MODE    EQU  9C43H
INTCSR_BYTE0   EQU  9438H
INTCSR_BYTE1   EQU  9439H
INTCSR_BYTE2   EQU  943AH
INTCSR_BYTE3   EQU  943BH
IMB4_BYTE3     EQU  941FH

DATA SEGMENT
CSBAK  DW  ? 
IPBAK  DW  ?
MKBAK  DB  ?
SEC1   DB  30H
SEC0   DB  31H
DATA ENDS
CODE SEGMENT
        ASSUME CS:CODE,DS:DATA

START: CLI
       MOV AX,DATA
       MOV DS,AX

       MOV DX,INTCSR_BYTE0
       MOV AL,00H
       OUT DX,AL
       MOV DX,INTCSR_BYTE1
       MOV AL,1FH
       OUT DX,AL
       MOV DX,INTCSR_BYTE2
       MOV AL,3FH
       OUT DX,AL
       MOV DX,INTCSR_BYTE3
       MOV AL,00H
       OUT DX,AL
          
       MOV AX,0000H
       MOV ES,AX
       MOV DI,01CCH            ;INT 73H,01CCH=73H*4
       MOV AX,ES:[DI]
       MOV IPBAK,AX            ;IP
       MOV AX,OFFSET MYINT
       CLD
       STOSW
       MOV AX,ES:[DI]          ;CS
       MOV CSBAK,AX
       MOV AX,SEG MYINT
       STOSW

       IN  AL,0A1H
       MOV MKBAK,AL
       AND AL,0F7H
       OUT 0A1H,AL

       MOV AX,0E30H
       INT 10H
       MOV AX,0E30H
       INT 10H
       MOV AX,0E0DH
       INT 10H

       MOV DX,MY8254_MODE      ;CLK=10K
       MOV AL,35H
       OUT DX,AL
                
       MOV DX,MY8254_COUNT0
       MOV AL,0
       OUT DX,AL
       OUT DX,AL

       STI

A1:    NOP
       CALL BREAK
       JMP A1

MYINT: PUSH DS
       PUSH AX
       PUSH DX
       MOV AX,DATA
       MOV DS,AX

       MOV DX,IMB4_BYTE3
       IN  AL,DX
       MOV DX,INTCSR_BYTE2
       MOV AL,3FH
       OUT DX,AL
       
       MOV AL,63H
       OUT 0A0H,AL
       MOV AL,62H
       OUT 20H,AL

       MOV AH,0EH
       MOV AL,SEC1
       INT 10H

       MOV AH,0EH
       MOV AL,SEC0
       INT 10H

       MOV AX,0E0DH
       INT 10H
       
       INC SEC0

       CMP SEC0,3AH
       JZ  B3
       JMP B1
B3:    INC SEC1
       MOV SEC0,30H
       CMP SEC1,36H
       JZ  B4
       JMP B1
B4:    MOV SEC1,30H
                                         
B1:    POP DX
	POP AX
	POP DS
       IRET
         
BREAK PROC NEAR 
       PUSH DS
       MOV AH,06H
       MOV DL,0FFH
       INT 21H
       JE  RETURN

       POP DS
       CLI
       MOV AL,MKBAK
       OUT 0A1H,AL

       MOV AX,0000H
       MOV ES,AX
       MOV DI,01CCH              ;INT 73H,01CCH=73H*4
       MOV AX,IPBAK
       CLD
       STOSW
       MOV AX,CSBAK
       STOSW

       MOV     DX,INTCSR_BYTE1
       MOV     AL,00H
       OUT     DX,AL

       STI

       MOV AX,4C00H
       INT 21H
RETURN:POP DS
       RET
BREAK ENDP

CODE ENDS
     END START

⌨️ 快捷键说明

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