求助
;;; NMI中断实验
;;;8255控制8个发光二极管,初始状态最左边1个亮,其他灭
;;;当按下按键时,申请一个中断,中断服务程序中,将亮的LED右移1位,
;;;
;;;--------------------------
;8255 端口
PORTA EQU 20H ;A口
PORTCTR EQU 26H ;控制口
DATA SEGMENT
CODE SEGMENT
ASSUME CS:CODE
ORG 0100H
START:
cli ;关中断
PUSH ES ;中断初始化
XOR AX,AX
MOV ES,AX ;ES清零
MOV AL,02H
XOR AH,AH
SHL AX,1 ;计算2号中断失量在中断向量表中的地址,2*4
SHL AX,1
MOV SI,AX ;SI指向2号中断失量地址
MOV AX,OFFSET int2
MOV ES:[SI],AX ;保存中断服务程序的IP地址
INC SI
INC SI
MOV BX,SEG int2
MOV ES:[SI],BX ;保存中断服务程序的CS段地址
POP ES
MOV DX,PORTCTR ;初始化8255
MOV AL,10000010B ;A口输出,方式0,B口输入,方式0
OUT DX, AL
;8255 A口输出数据,控制8个LED ,低电平亮,高电平灭
MOV BL,7FH
MOV AL,BL
MOV DX,PORTA
OUT DX,AL
sti ;开中断
LP2: ;等待中断
NOP
jmp LP2
int2 proc ;中断2 中断服务程序
ROR BL,1 ;右循环移位
MOV AL,BL
MOV dx, PORTA
out dx, al
iret
int2 endp
CODE ENDS
END START
;;; NMI中断实验
;;;8255控制8个发光二极管,初始状态最左边1个亮,其他灭
;;;当按下按键时,申请一个中断,中断服务程序中,将亮的LED右移1位,
;;;
;;;--------------------------
;8255 端口
PORTA EQU 20H ;A口
PORTCTR EQU 26H ;控制口
DATA SEGMENT
CODE SEGMENT
ASSUME CS:CODE
ORG 0100H
START:
cli ;关中断
PUSH ES ;中断初始化
XOR AX,AX
MOV ES,AX ;ES清零
MOV AL,02H
XOR AH,AH
SHL AX,1 ;计算2号中断失量在中断向量表中的地址,2*4
SHL AX,1
MOV SI,AX ;SI指向2号中断失量地址
MOV AX,OFFSET int2
MOV ES:[SI],AX ;保存中断服务程序的IP地址
INC SI
INC SI
MOV BX,SEG int2
MOV ES:[SI],BX ;保存中断服务程序的CS段地址
POP ES
MOV DX,PORTCTR ;初始化8255
MOV AL,10000010B ;A口输出,方式0,B口输入,方式0
OUT DX, AL
;8255 A口输出数据,控制8个LED ,低电平亮,高电平灭
MOV BL,7FH
MOV AL,BL
MOV DX,PORTA
OUT DX,AL
sti ;开中断
LP2: ;等待中断
NOP
jmp LP2
int2 proc ;中断2 中断服务程序
ROR BL,1 ;右循环移位
MOV AL,BL
MOV dx, PORTA
out dx, al
iret
int2 endp
CODE ENDS
END START