微机接口实验 - 图文 联系客服

发布时间 : 星期四 文章微机接口实验 - 图文更新完毕开始阅读

.

源程序代码:

;***************************************************************** ; 8259中断查询方式应用实验

;请根据所学原理推断横线处需填写的源代码

;***************************************************************** I8259_1 EQU 2B0H ; 8259的ICW1端口地址 I8259_2 EQU 2B1H ; 8259的ICW2端口地址

I8259_3 EQU 2B1H ; 8259的ICW3端口地址 (奇地址) I8259_4 EQU 2B1H ; 8259的ICW4端口地址 (奇地址) O8259_1 EQU 2B1H ; 8259的OCW1端口地址 (奇地址) O8259_2 EQU 2B0H ; 8259的OCW2端口地址 (偶地址) O8259_3 EQU 2B0H ; 8259的OCW3端口地址 (偶地址)

DATA SEGMENT

MES1 DB 'YOU CAN PLAY A KEY ON THE KEYBOARD!',0DH, 0AH, 24H ;24H='$'

MES2 DD MES1

MESS1 DB 'HELLO! THIS IS INTERRUPT * 0 *!',0DH,0AH,'$' MESS2 DB 'HELLO! THIS IS INTERRUPT * 1 *!',0DH,0AH,'$' MESS3 DB 'HELLO! THIS IS INTERRUPT * 2 *!',0DH,0AH,'$' MESS4 DB 'HELLO! THIS IS INTERRUPT * 3 *!',0DH,0AH,'$' MESS5 DB 'HELLO! THIS IS INTERRUPT * 4 *!',0DH,0AH,'$' MESS6 DB 'HELLO! THIS IS INTERRUPT * 5 *!',0DH,0AH,'$' MESS7 DB 'HELLO! THIS IS INTERRUPT * 6 *!',0DH,0AH,'$' MESS8 DB 'HELLO! THIS IS INTERRUPT * 7 *!',0DH,0AH,'$' DATA ENDS

STACKS SEGMENT

DB 100 DUP(?)

.

.

STACKS ENDS

STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:STACKS, ES:DATA .386

START: MOV MOV MOV MOV MOV

MOV MOV OUT MOV MOV OUT MOV OUT

MOV MOV OUT

QUERY: MOV INT JNZ

MOV MOV OUT IN .

AX,DATA DS, AX

ES, AX ;DS,ES段基址都设为DATA AX, STACKS

SS, AX ;SS段基址都设为STACKS DX, I8259_1 ;初始化8259的ICW1

AL, 13H ; 0001:ICW1 0011:边沿触发、单片8259、需要ICW4

;0001 0011 (IR7-3=000:无意义;IR4=1:ICW1标识位;IR3=0:边沿;IR2=0:无意义;IR1=1:单片8259;IR0=1:需要ICW4)

DX,AL

DX,I8259_2 ;初始化8259的ICW2 AL,0B0H ;1011 0000 DX,AL

AL,03H ;ICW4 0000 0011 DX,AL DX, O8259_1 ;初始化8259的中断屏蔽操作命令字 AL, 00H ;打开屏蔽位 DX,AL

;写OCW1,打开屏蔽位

AH,1 ;判断是否有按键按下 16H

QUIT ;有按键则退出 DX,O8259_3 ;向8259发送查询命令 AL, 0CH ;0000 1100 DX,AL

;先向8259发送一个OCW3,其中查询位P为1,则下一条指令中可以从同样的地址中取得一个查询字,得到的查询字中最高位(D7)为1代表有中断请求,第三位为请求的来源。

AL,DX ;读出查询字

.

TEST AL,80H ;判断中断是否已响应

;若最高位为1,则有中断请求

JZ QUERY ;没有响应则继续查询

AND AL,07H

CMP AL,00H

JE IR0ISR ;若为IR0请求,跳到IR0处理程序 CMP AL,01H

JE IR1ISR ;若为IR1请求,跳到IR1处理程序 CMP JE CMP JE CMP JE CMP JE CMP JE CMP JE

JMP

IR0ISR: MOV MOV MOV MOV INT JMP IR1ISR: MOV MOV MOV MOV INT JMP IR2ISR: MOV MOV MOV MOV INT JMP IR3ISR: MOV MOV .

AL,02H

IR2ISR ;若为IR2请求,跳到IR2处理程序 AL,03H

IR3ISR ;若为IR3请求,跳到IR3处理程序 AL,04H

IR4ISR ;若为IR4请求,跳到IR4处理程序 AL,05H

IR5ISR ;若为IR5请求,跳到IR5处理程序 AL,06H

IR6ISR ;若为IR6请求,跳到IR6处理程序 AL,07H

IR7ISR ;若为IR7请求,跳到IR7处理程序 QUERY

AX,DATA DS,AX

DX,OFFSET MESS1 ;显示提示信息 AH,09 21H EOI

AX,DATA DS,AX

DX,OFFSET MESS2 ;显示提示信息 AH,09 21H EOI

AX,DATA DS,AX

DX,OFFSET MESS3 ;显示提示信息 AH,09 21H EOI

AX,DATA DS,AX

.

MOV DX,OFFSET MESS4 ;显示提示信息 MOV AH,09 INT 21H JMP EOI

IR4ISR: MOV AX,DATA MOV DS,AX

MOV DX,OFFSET MESS5 ;显示提示信息 MOV AH,09 INT 21H JMP IR5ISR: MOV MOV MOV MOV INT JMP IR6ISR: MOV MOV MOV MOV INT JMP IR7ISR: MOV MOV MOV MOV INT EOI:

MOV MOV OUT JMP

QUIT: MOV INT

CODE ENDS

END

.

EOI

AX,DATA DS,AX

DX,OFFSET MESS6 ;显示提示信息 AH,09 21H EOI

AX,DATA DS,AX

DX,OFFSET MESS7 ;显示提示信息 AH,09 21H EOI

AX,DATA DS,AX

DX,OFFSET MESS8 ;显示提示信息 AH,09 21H DX,O8259_2 ;向8259发送中断结束命令

;向8259发OCW2,D5位为EOI中断结束命令位,20H表示清除当前中断服务寄存器的ISn位,在非自动结束中断方式中使用。

AL,20H DX,AL QUERY AX,4C00H ;结束程序退出 21H START