1.中断向量表的建立
1.DOS系统功能调用法(INT 21H)
功能号: (AH)=25H。 入口参数: (AL)=中断类型号 (DS)=中断服务程序入口地址的段地址 (DX)=中断服务程序入口地址的偏移地址
如中断服务子程序名为INT60,中断类型号为60H
PUSH DS ;保护DS LEA DX,INT60 ;取服务程序偏移地址 MOV AX,SEG INT60;取服务程序段地址 MOV DS,AX MOV AH,25H ;送功能号 MOV AL,60H ;送中断类型号 INT 21H ;DOS功能调用 POP DS ;恢复DS
2.直接装入法
用传送指令直接将中断服务子程序首地址INT60置入向量表中。设中断类型号为60H(此类型号对应的向量表地址为从00180H即0000H: 0180H开始的四个连续存储单元)。程序段如下:
XOR AX,AX MOV DS,AX MOV AX,OFFSET INT60 MOV DS:[0180H],AX ;置偏移地址 MOV AX,SEG INT60 MOV DS:[0180H+2],AX;置段地址
2.编程举例
编写中断服务程序实现在屏幕上显示字符串“This is a Interruption Service Program!”。设中断类型号取60H,采用DOS功能调用法置中断服务程序入口地址,通过软中断指令INT 60H实现中断服务程序的调用。程序设计如下:
int_1.asm
DATA SEGMENT MESG DB 'This is a Interruption Service Program!$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX PUSH DS MOV DX,OFFSET DISP60 ;取DISP60的偏移地址 MOV AX,SEG DISP60 ;取中断服务程序DISP60的段地址 MOV DS,AX MOV AH,25H MOV AL,60H INT 21H POP DS INT 60H MOV AH,4CH INT 21H DISP60 PROC FAR ;中断服务程序DISP60 MOV DX,OFFSET MESG MOV AH,09H INT 21H IRET DISP60 ENDP CODE ENDS END START
在本例的中断服务程序中无须保护现场和恢复现场。
结果1
说明:此为VS CODE执行结果
其中,Do you need to keep the DosBox[Y,N]
不是程序本身的输出结果
int_2.asm
DATA SEGMENT MESG DB 'This is a Interruption Service Program!$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX PUSH DS XOR AX,AX MOV DS,AX MOV AX,OFFSET DISP60 MOV DS:[0180H],AX ;置偏移地址 MOV AX,SEG DISP60 MOV DS:[0180H+2],AX;置段地址 POP DS INT 60H MOV AH,4CH INT 21H DISP60 PROC FAR ;中断服务程序DISP60 MOV DX,OFFSET MESG MOV AH,09H INT 21H IRET DISP60 ENDP CODE ENDS END START
结果2
说明:此为VS CODE执行结果
其中,Do you need to keep the DosBox[Y,N]
不是程序本身的输出结果
7.5可编程中断控制器Intel 8259A
略
7.5.1 8259A的功能
7.5.2 8259A的内部结构及外部引脚
7.5.3 8259A的工作方式
7.5.4 8259A的编程
最后
打赏通道