中断服务程序的编写

上传人:豆浆 文档编号:49053820 上传时间:2018-07-23 格式:PPT 页数:48 大小:602.50KB
返回 下载 相关 举报
中断服务程序的编写_第1页
第1页 / 共48页
中断服务程序的编写_第2页
第2页 / 共48页
中断服务程序的编写_第3页
第3页 / 共48页
中断服务程序的编写_第4页
第4页 / 共48页
中断服务程序的编写_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《中断服务程序的编写》由会员分享,可在线阅读,更多相关《中断服务程序的编写(48页珍藏版)》请在金锄头文库上搜索。

1、7.2 内部中断服务程序n编写内部中断服务程序与编写子程序类似n利用过程定义伪指令PROC/ENDPn第1条指令通常为开中断指令STIn最后用中断返回指令IRETn通常采用寄存器传递参数n主程序需要调用中断服务程序n调用前,需要设置中断向量n利用INT n指令调用中断服务程序例7.1 内部中断服务程序n编写80H号中断服务程序n功能:显示以“0”结尾字符串的功能n利用显示器功能调用INT 10Hn字符串缓冲区首地址为入口参数nDS:DX(段地址:偏移地址)传递参数数据段 intoffdw ? intsegdw ? intmsgdb A Instruction Interrupt ! db 0d

2、h,0ah,0例7.1以“0”结尾回车、换行保存中断向量 mov ax,3580h int 21h mov intoff,bx;保存偏 移地址 mov intseg,es;保存段 基地址例7.1获取中断向量(DOS功能调用INT 21H) 功能号:AH35H 入口参数:AL中断向量号 出口参数:ES:BX中断向量(段地址:偏移地址)设置中断向量 push ds mov dx,offset new80h mov ax,seg new80h mov ds,ax mov ax,2580h int 21h pop ds例7.1设置中断向量(DOS功能调用INT 21H) 功能号:AH25H 入口参数:

3、AL中断向量号 DS:DX中断向量(段地址:偏移地址)调用中断服务程序 ;设置入口参数:DS段地址(已设置) DX偏移地址 mov dx,offset intmsg int 80h ;调用80H中断服务程 序例7.1A Instruction Interrupt !;80H号内部中断服务程序: ;显示字符串(以“0”结尾) ;入口参数:DS:DX缓冲器首地址 new80hproc sti;开中断 push ax;保护寄存器 push bx push si例7.1进入中断服务程序A Instruction Interrupt !显示字符串 mov si,dx new1:mov al,si cmp

4、 al,0 jz new2 mov bx,0 mov ah,0eh int 10h inc si jmp new1例7.1A Instruction Interrupt !退出中断服务程序 new2:pop si;恢复寄存器 pop bx pop ax iret ;中断返回 new80hendp例7.1A Instruction Interrupt !主程序结束 mov dx,intoff mov ax,intseg mov ds,ax mov ax,2580h int 21h mov ax,4c00h int 21h例7.1A Instruction Interrupt !7.3 8259A

5、中断控制器nIntel 8259A是可编程中断控制器PICn可用于管理Intel 8080/8085、8086/8088、 80286/80386的可屏蔽中断n8259A的基本功能n一片8259A可以管理8级中断,可扩展至64级n每一级中断都可单独被屏蔽或允许n在中断响应周期,可提供相应的中断向量号n8259A设计有多种工作方式,可通过编程选择初始化主片8259A mov al,11h ;写入ICW1 out 20h,al jmp intr1 intr1:mov al,08h ;写入ICW2 out 21h,al jmp intr2 intr2:mov al,04h ;写入ICW3 out 2

6、1h,al jmp intr3 intr3:mov al,1h;写入ICW4 out 21h,al中断控制器的初始化程序段初始化从片8259A mov al,11h ;写入ICW1 out 0a0h,al jmp intr5 intr5:mov al,70h ;写入ICW2 out 0a1h,al jmp intr6 intr6:mov al,02h ;写入ICW3 out 0a1h,al jmp intr7 intr7:mov al, 01h ;写入ICW4 out 0a1h,al中断控制器的初始化程序段2. 操作命令字OCWn8259A工作期间,可以随时接受操作命 令字OCWnOCW共有3

7、个:OCW1OCW3n写入时没有顺序要求,需要哪个OCW 就写入那个OCWD7D6D5D4D3D2D1D0OCW1M7M6M5M4M3M2M1M0D7D6D5D4D3D2D1D0屏蔽命令字 内容写入中断屏蔽寄存器IMR DiMi对应IRi,为1禁止IRi中断 ; 为0允许IRi中断。各位互相独立。OCW2RSLEOI00L2L1L0D7D6D5D4D3D2D1D0R、SL和EOI配合使 用 产生中断结束EOI命 令和改变优先权顺序L2L0的3位编码 指定IR引脚 7.5 外部中断服务程序编写外部可屏蔽中断服务程序,需注意:n发送中断结束命令n一般只能采用存储单元传递参数n不要使用DOS系统功能

8、调用n中断服务程序尽量短小7.5 外部中断服务程序(续)编写主程序,需注意:n修改中断向量n控制CPU的中断允许标志n设置8259A的中断屏蔽寄存器例题7.2 可屏蔽中断服务程序n8259A的IRQ0(向量号为08H)中断请求 来自定时器8253,每隔55ms产生一次n本程序的08H号中断服务程序,每次中断显 示一串信息,显示10次n用内存单元(共享变量)在主程序与外部 中断服务程序之间传递参数:中断次数n显示信息也安排在共同的数据段中数据段 intmsgdb A 8259A Interrupt ! db 0dh,0ah,0 counterdb 0例7.2保存中断向量 mov ax,3508h

9、 int 21h push bx;保存偏移地 址 push es;保存段基地 址例7.2设置中断向量 cli push ds mov dx,offset new08h mov ax,seg new08h mov ds,ax mov ax,2508h int 21h pop ds例7.2设置中断寄存器 in al,21h push ax and al,0feh;允许 IRQ0 out 21h,al mov counter,0 ;设置中 断次数初值 sti;开中断例7.2循环等待中断 start1:cmp counter,10 jb start1 ;中断10次退 出例7.2中断就在主程序循环当中n

10、ew08hproc sti;开中断 push ax;保护寄存器 push bx push ds mov ax,data mov ds,ax;设置数据段 DS例7.2进入中断服务程序中断处理 inc counter mov si,offset intmsg ;显 示信息 call dpstri例7.2显示字符串 dpstriproc;显示字符串子程序 push ax push bx dps1:lodsb cmp al,0 jz dps2例7.2显示字符串(续) mov bx,0 mov ah,0eh int 10h jmp dps1 dps2:pop bx pop ax ret dpstrien

11、dp例7.2退出中断服务程序 mov al,20h out 20h,al pop ds;恢复寄存器 pop bx pop ax iret ;中断返回 new08hendp例7.2主程序结束 cli pop ax out 21h,al pop dx pop ds mov ax,2508h int 21h sti mov ax,4c00h int 21h例7.2A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt !

12、A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! 7.6 驻留中断服务程序驻留TSR(Terminate and Stay Resident)程序n用户程序运行后仍然保存在主存中,可以 让其他程序使用n利用DOS功能调用31H代替4CH终止程序n小型驻留程序常编写成COM程序n驻留程序也可以编写成EXE程序n需要驻留内存的程序段要写在前面例题7.3 报时中断驻留服务程序n系统08H号中断服务程序调用1CH中断n每隔55ms调用这个报时中断,中断65543次 就是时间过了一个小时n本例编

13、写一个驻留内存的1CH内部中断服 务程序n实现每过一小时就显示信息n执行此程序后,报时中断服务程序将驻留 内存new1chproc sti;开中断 push si;保护寄存器 push ds mov si,cs mov ds,si ;设置数据段 DS add countl,1 adc counth,0例7.3进入中断服务程序中断处理 cmp countl,hourl jnz n1ch1 cmp counth,hourh jnz n1ch1 mov countl,0 mov counth,0 mov si,offset intmsg call dpstri例7.3退出中断服务程序 n1ch1:p

14、op ds;恢复寄存器 pop si iret ;中断返回 countldw 0 counthdw 0 intmsgdb One Hour Has Passed ! db 0dh,0ah,0 new1chendp例7.3One Hour Has Passed ! 显示字符串 dpstriproc;显示字符串子程序 push ax push bx dps1:lodsb cmp al,0 jz dps2例7.3显示字符串(续) mov bx,0 mov ah,0eh int 10h jmp dps1 dps2:pop bx pop ax ret dpstriendp例7.3主程序开始 start:

15、mov ax,cs mov ds,ax mov dx,offset new1ch cli mov ax,251ch int 21h sti mov dx,offset tsrmsg mov ah,09h int 21h例7.3主程序结束 mov dx,offset start add dx,15 mov cl,4 shr dx,cl add dx,10h mov ax,3100h ;程序驻 留 int 21h tsrmsgdb INT 1CH Program Installed ! db 0dh,0ah,$ end start例7.3INT 1CH Program Installed ! 第7

16、章教学要求1. 熟悉8088的中断类型、中断响应过 程、中断向量表 2. 掌握内部中断服务程序的编写 3. 理解8259A的内部结构、寄存器作 用、中断过程 4. 掌握8259A的普通全嵌套优先权、 普通中断结束、边沿触发方式第7章教学要求(续)5. 了解的8259A的ICW和OCW, 注意命令字和状态字的区别方法 6. 了解8259A在IBM PC系列机上 的应用情况 7. 掌握外部中断服务程序的编写 习题7(第189页)7.4 7.6 9.9 9.11 9.13实验2 中断实验n 不用实验台,实现例题程序n例7.1 内部中断服务程序n例7.2 可屏蔽中断服务程序n例7.3 驻留中断服务程序n 然后,按照实验要求进行提示8088的中断向量表向量号255的CS值用户中断 (向量号255)3FCH向量号255的IP值向量号2的CS值非屏蔽中断 (向量号2)008H向量号2的IP值向量号1的CS值单步中断 (向量号1)004H向量号1的IP值向量号0的CS值除法错中断 (向量号0)000H向量号

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号