A8254 EQU 06C0H
B8254 EQU 06C2H
C8254 EQU 06C4H
CON8254 EQU 06C6H A8255 EQU 0640H
B8255 EQU 0642H
C8255 EQU 0644H
K8255 EQU 0646H DATAS SEGMENT TABLE1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;TABLE中数据使数码管能显示0-9,共阴极
X DB 30H
Y DB 30H DATAS ENDS SSTACKS SEGMENT STACK
DW 32 DUP(?)
SSTACKS ENDS CODE SEGMENT
ASSUME CS:CODE,SS:SSTACKS,DS:DATAS START: MOV AX,DATAS
MOV DS,AX
CLI ;关中断
PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET IRQ7 ;取中断入口地址
MOV SI,003CH
MOV [SI],AX
MOV AX,CS
MOV SI,003EH
MOV [SI],AX
POP DS ;设置中断向量
;初始化8259
MOV AL,11H
OUT 20H,AL
MOV AL,08H
OUT 21H,AL
MOV AL,04H
OUT 21H,AL
MOV AL,01H
OUT 21H,AL
IN AL,21H
AND AL,7FH
OUT 21H,AL ;初始化8254
MOV DX,CON8254
MOV AL,10H
OUT DX,AL
MOV DX,A8254
MOV AL,01H
OUT DX,AL
STI
;初始化8255
MOV DX,0646H
MOV AL,80H
OUT DX,AL
MOV DX,0642H
MOV AL,00H
OUT DX,AL
NEXT0: LEA BX,TABLE1
MOV CX,10
NEXT1: MOV AL,
MOV DX,0644H
OUT DX,AL
CALL DELAY
INC BX
DEC CX
JNZ NEXT1
JMP NEXT0 ;主程序:循环显示0-9 IRQ7: MOV DX,A8254
MOV AL,01H
OUT DX,AL ;赋计数器处初值
MOV DX,0644H
MOV AL,77H
OUT DX,AL
CALL DELAY ;中断时数码管显示A
MOV AL,X
MOV AH,01H ;0130H,即ASCII码显示为0
INT 10H
MOV AL,Y
MOV AH,01H
INT 10H
INC Y
CMP Y,3AH ;Y和10比较
JNE A1
INC X
MOV Y,30H ;显示中断次数,00开始计数
A1: MOV AX,0120H
INT 10H ;显示空格
MOV AL,20H
OUT 20H,AL ;终端结束命令
STI
IRET
DELAY: PUSH AX
PUSH CX
MOV CX,0100H
T1: MOV AX,0560H
T2: DEC AX
JNE T2
LOOP T1
POP CX
POP AX
RET ;延时程序 CODE ENDS
END START