文档详情

汇编程序设计.ppt

发布:2017-02-06约7.69千字共72页下载文档
文本预览下载声明
1. 主程序 (1)设置中断向量 : 设置中断向量就是把中断服务程序的入口地址放入中断向量表中 设置中断向量有两种可选的方法: 用MOV指令将中断向量直接写入中断向量表中,称为直接写入法 用DOS功能调用,设置中断向量 [例8-2] :用直接写入法设置中断向量。假设中断类型为N,中断 服务程序入口标号为INTERRUPT PUSH DS ; 保护DS寄存器内容 MOV AX, 0 MOV DS, AX ;数据段指向中断向量表 MOV BX, 4*N ; 中断向量安放位置(偏移地址)送BX MOV WORD PTR [BX], OFFSET INTERRUPT ; 写入偏移地址 MOV WORD PTR [BX+2], SEG INTERRUPT ; 写入段基址 POP DS ; 恢复DS寄存器 用DOS功能调用25H用来设置中断向量: 入口参数为: AH=25H AL=中断类型号 DS: DX=中断向量 用DOS功能调用35H用来读中断向量 : 入口参数为: AH=25H AL=中断类型号 DS: DX=中断向量 出口参数为:ES: BX=中断向量 8.2.2 中断服务程序 [例8-3] :使用DOS功能调用设置中断向量 PUSH DS MOV AX, SEG INTERRUPT MOV DS, AX MOV DX, OFFSET INTERRUPT MOV AL, N MOV AH, 25H INT 21H POP DS (2)设置设备的中断屏蔽位 : “中断屏蔽”:外部设备的中断请求由中断控制器8259A统一管理 ,在8259A内部,有一个“中断屏蔽寄存器”,该寄存器的8位二进制对应于8259A的8个中断请求输入,寄存器某一位设置为“1”时,对应引脚上的中断请求不能被传送到CPU,该中断因此无法得到相应。对中断请求的这种管理方法称为“中断屏蔽”。 (3)设置中断允许位IF,开放中断 : STI指令可以将中断允许位IF置1,打开中断。只有中断打开时,CPU才会响应从INTR引脚输入的,也就是从8259A发来的可屏蔽中断请求 (4)其他设置 : 主程序还应该为中断服务程序使用的指针、计数器等设置初值。在中断方式输入输出结束后,进行必要的结束处理 2. 中断服务程序 中断服务程序的主要操作步骤 : (1)保存寄存器内容: (2)开放中断 (3)中断服务 (4)关中断(CLI) (5)发送中断结束命令 (6)恢复寄存器内容 (7) 中断返回 实际应用中,经常要用到“定时”: 确定某个操作所需要的时间:例如,测量电机的转速。 定时启动某个操作:例如,定时采集温度、压力等数据 PC微机内部“定时器” :每55ms(1/18.2秒)产生一个“时间到”信号,向8259A申请中断。该中断类型号为09H,主要用于操作系统的定时操作 为了满足用户的定时需要,另设了一个1CH中断,每次进入09H中断后,由该中断服务程序通过执行指令“INT 1CH”进入1CH中断,执行用户的定时中断服务程序 8.2.3 定时中断 用户的定时任务实现方法: 保存原1CH中断向量; 把新的1CH中断服务程序入口地址填入中断向量表; 编制新的1CH中断服务程序:首先执行新增加的定时任务,完成后进入原中断服务程序,执行其它的定时任务。 [例8.4] :在屏幕上显示一个实时时钟,限于篇幅,只显示时钟的“秒”值 ; EX804.ASM 定时中断,显示实时时钟(秒值) INCLUDE YLIB.H ; 头文件,包含外部函数与宏的定义 ; *************************************** CODE SEGMENT ASSUME CS: CODE SECOND DB 0 ; 秒值 SIGNAL DB 0 ; 1秒时间到标记 COUNT DW 0 ; 毫秒值 OLDINT1CH DD ? ; 原来1CH中断向量 START: MOV AL, 1CH ; 取原来1CH中断向量 MOV AH, 35H INT 21H MOV WORD PTR OLDINT1CH+2, ES; 保存原中断向量 MOV WORD PTR OLDINT1CH, BX ; ******************************** LEA DX, MYINT1CH ; 取新向量偏移地址 MOV AX, SEG MYINT1
显示全部
相似文档