- 论坛徽章:
- 0
|
大家都说第一题很难,我没有接触过;不过在上微机原理的实验课程的时候我们有过一些芯片汇编练习的,都是一些很古老的芯片了,像串口芯片8251a啊、并口芯片8255a啊、中断控制器8259a啊等等,这些基础上完成这个题,各位看是否差距太大?贴一个当时的实验标程吧!
;8259 中断实验
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE;SS:CODE
;===========================================
ORG 1000H
Port0 EQU 0FFE0H
Port1 EQU 0FFE1H
P8259: CLI
MOV AX,OFFSET INT8259 ;取中断服务程序的偏移地址
MOV BX,003CH ;对应中断号是0FH的中断向量表的初始化(共5行)
MOV [BX],AX
MOV BX,003EH
MOV AX,0000H
MOV [BX],AX
CALL FOR8259 ;调用8259初始化程序
STI
LED8: MOV CL,20H ;以下是显示跑“8”程序
MOV AL,80H
MOV DX,0FFDCH
OUT DX,AL
MOV DX,0FFDDH
LED0: MOV AL,CL
OUT DX,AL
PUSH CX
CALL DLL
POP CX
CMP CL,01H
JZ LED8
SHR CL,1
JMP LED0
;========================
;以下是延时程序段
DLL: MOV BX,0020H
DL1: DEC BX
CMP BX,0000
JZ DL3
MOV CX,04FFH
LOOP $
JMP DL1
DL3: RET
;=========================
;=中断服务程序;跑“2”程序
INT8259:CLI
PUSH AX
PUSH BX
PUSH DX
intLED8: MOV CL,20H
MOV AL,24H
MOV DX,0FFDCH
OUT DX,AL
MOV DX,0FFDDH
intLED0: MOV AL,CL
OUT DX,AL
PUSH CX
CALL DLL
POP CX
CMP CL,01H
JZ XX59
SHR CL,1
JMP intLED0
XX59: MOV AL,20H
MOV DX,Port0
OUT DX,AL
POP DX
POP BX
POP AX
STI
IRET ;中断返回
;==中断芯片8259初始化
FOR8259:MOV AL,13H ;ICW1
MOV DX,Port0
OUT DX,AL
MOV AL,08H ;ICW2,IR0的中断号为08H
MOV DX,Port1
OUT DX,AL
MOV AL,09H ;ICW4
OUT DX,AL
MOV AL,7FH ;OCW1,设置中断屏蔽字,IRQ7开放
OUT DX,AL
RET
;
CODE ENDS
END P8259
[ 本帖最后由 bber01 于 2007-11-18 20:36 编辑 ] |
|