123456

代码段描述了一个初始化8254定时器和8259中断控制器的过程,设置计数器初值并处理中断。在中断服务例程中,中断结束后会重新加载计数器初值。
摘要由CSDN通过智能技术生成

;8254的编址空间起点是0600H
IOYO    EQU 0600H
A8254   EQU IOYO+00H*2
B8254   EQU IOYO+01H*2
C8254   EQU IOYO+02H*2
CON8254 EQU IOYO+03H*2

SSTACK SEGMENT STACK
       DW 32 DUP(?)
SSTACK ENDS

CODE   SEGMENT
       ASSUME CS:CODE, SS:SSTACK
START: 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
       
       CLI
       POP DS
       ;初始化主片8259
       MOV AL,11H                ;初始化ICW1
       OUT 20H,AL
       MOV AL,08H                ;初始化ICW2
       OUT 21H,AL
       MOV AL,04H                ;初始化ICW3
       OUT 21H,AL
       MOV AL,01H                ;初始化ICW4
       OUT 21H,AL
       
       MOV AL,6FH                ;初始化OCW1
       OUT 21H,AL
       ;初始化8254
       MOV DX,CON8254
       MOV AL,10H;方式控制字 00010000
       OUT DX,AL
       
       MOV DX,A8254
       MOV AL,04H;把计数初值4送入计数器A,每5次,送4
       OUT DX,AL
       STI
AA1:   JMP AA1

IRQ7: 
      ;执行一次中断后,原来8254A计数器的初值为0,为了重复该中断,需要再输入一次计数初值
       MOV DX,A8254
       MOV AL,04H
       OUT DX,AL
       
       MOV AX,014DH ;字符M
       INT 10H
       MOV AX,0120H ; 空格

;8254的编址空间起点是0600H
IOYO    EQU 0600H
A8254   EQU IOYO+00H*2
B8254   EQU IOYO+01H*2
C8254   EQU IOYO+02H*2
CON8254 EQU IOYO+03H*2

SSTACK SEGMENT STACK
       DW 32 DUP(?)
SSTACK ENDS

CODE   SEGMENT
       ASSUME CS:CODE, SS:SSTACK
START: 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
       
       CLI
       POP DS
       ;初始化主片8259
       MOV AL,11H                ;初始化ICW1
       OUT 20H,AL
       MOV AL,08H                ;初始化ICW2
       OUT 21H,AL
       MOV AL,04H                ;初始化ICW3
       OUT 21H,AL
       MOV AL,01H                ;初始化ICW4
       OUT 21H,AL
       
       MOV AL,6FH                ;初始化OCW1
       OUT 21H,AL
       ;初始化8254
       MOV DX,CON8254
       MOV AL,10H;方式控制字 00010000
       OUT DX,AL
       
       MOV DX,A8254
       MOV AL,04H;把计数初值4送入计数器A,每5次,送4
       OUT DX,AL
       STI
AA1:   JMP AA1

IRQ7: 
      ;执行一次中断后,原来8254A计数器的初值为0,为了重复该中断,需要再输入一次计数初值
       MOV DX,A8254
       MOV AL,04H
       OUT DX,AL
       
       MOV AX,014DH ;字符M
       INT 10H
       MOV AX,0120H ; 空格
       INT 10H
       
       ;中断结束命令 往地址20H送入20H
       MOV AL,20H
       OUT 20H,AL
       
       IRET   ;返回中断
CODE   ENDS
       END START


       INT 10H
       
       ;中断结束命令 往地址20H送入20H
       MOV AL,20H
       OUT 20H,AL
       
       IRET   ;返回中断
CODE   ENDS
       END START

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值