|
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
实验内容
1.实现子程序和中断服务子程序的设计;
2.编写子程序设置40H中断为自定义中断服务子程序;
3.编写中断服务子程序实现AX=AX+BX;
4.编写主程序调用子程序和中断。
二.程序流程
8086汇编语言源程序如下:
- LED_IO EQU 8000H ;LED端口地址
- CS8259A EQU 9000H ;8259地址
- CS8259B EQU 9002H
-
- ICW1 EQU 00010011B ;单片8259,上升沿中断,要写ICW4
- ICW2 EQU 00100000B ;中断号为20H
- ICW4 EQU 00000001B ;工作在8086/88方式
- OCW1 EQU 00000000B ;只响应IR0中断
- CODE SEGMENT
- ASSUME CS:CODE,DS:DATA
-
- ORG 00H
- JMP INTSERV
-
- ORG 100H
- START:
- MOV AX,DATA
- MOV DS,AX
-
- CLI ;关闭CPU可屏蔽中断
- MOV AX,0
- MOV ES,AX
- MOV BX,20H*4 ;中断号为20H的中断向量入口
-
- MOV AX,OFFSET INTSERV ;中断入口地址偏移地址
- MOV WORD PTR ES:[BX],AX
- MOV AX,SEG INTSERV ;中断入口地址段地址
- MOV WORD PTR ES:[BX+2],AX
-
- CALL INTSET ;调用设置中断工作方式的子程序
-
- STI ;打开CPU可屏蔽中断
-
- MOV AL,LED_ON
- MOV DX,LED_IO
- OUT DX,AL
- LP: ;等待中断,并计数
- NOP
- JMP LP
- INTSET:
- MOV DX,CS8259A ;写ICW1
- MOV AL,ICW1
- OUT DX,AL
-
- MOV DX,CS8259B ;写ICW2
- MOV AL,ICW2
- OUT DX,AL
-
- MOV AL,ICW4 ;写ICW4
- OUT DX,AL
- MOV AL,OCW1 ;写OCW1
- OUT DX,AL
- RET
- INTSERV:
- CLI
- MOV AL,LED_ON
- SHL AL,1
- JNZ OK
- MOV AL, 01H
- OK:
- MOV LED_ON,AL
- MOV DX,LED_IO
- OUT DX,AL
-
- MOV DX,CS8259A
- MOV AL,20H ;中断服务程序结束指令
- OUT DX,AL
- STI
- IRET
- CODE ENDS
- DATA SEGMENT
- LED_ON DB 01H ;初始LED1亮
- DATA ENDS
- END START
复制代码
代码与Proteus仿真下载:
8086中断.7z
(64.52 KB, 下载次数: 12)
|
评分
-
查看全部评分
|