中断指令执行的时候,堆栈指令的内容有什么变化?中断处理子程...

中山大学笔试资料_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
中山大学笔试资料
上传于||文档简介
&&中​山​大​学
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩20页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢当前位置:&&
求高手指点,中断服务子程序到底是个什么啊?
&&&&来源:&互联网& 发布时间:
看了很多操作系统的书,也查了资料
1、 中断发生时,是不是要把 当前应用程序的上下文,保存到进程 内核堆栈了面啊?
2、 然后去执行中断服务子程序,我想问一下,这个子程序是谁写的?是固定好的么??
它是一个子程序还是一个完整的应用
3、 我记得有人说中断服务子程序没有自己的堆栈,那么它用谁的啊?
1、 中断发生时,是不是要把 当前应用程序的上下文,保存到进程 内核堆栈了面啊?
2、 然后去执行中断服务子程序,我想问一下,这个子程序是谁写的?是固定好的么?? 它是一个子程序还是一个完整的应用
3、 我记得有人说中断服务子程序没有自己的堆栈,那么它用谁的啊?
1,当然要保存,不过保存的是中断上下文而不是进程上下文。
2,中断服务子程序大部分系统保留实现,自己也可以写好注册上去。固定的是中断异常向量表的地址,系统启动时候就由硬件分配固定的。只要将中断服务子程序指向这个地址就可以被中断调用。中断服务子程序要求非常简短精炼。所以在中断服务子程序中处理不及时的例子应该用linux的中断上下半机制解决。
3,那是不可能没有的,在计算机的所有切换过程包括进程,线程,函数调用,中断都是用堆栈来保存和恢复数据的。当然你也可以一个切换状态一套寄存器,不用堆栈。
LS解释有误啊
中断发生时,是把进程的上下文,实际上就是些寄存器信息存入进程的内核栈。
当然中断如果是嵌套执行,那就是保存寄存器信息入中断栈了。现在的中断是有自己的栈的
恩,楼上的更正的对。如果是进程进中断就是进程上下文,如果是中断进中断就是中断上下文
本页相关标签:
相关技术文章: &&&&
#include&stdio.h&
#include&stdlib.h&
#include&signal.h&
void sigusrl_handler(int signo)
printf("catch SIGUSR1\n");
int main()
if(signal(SIGUSR1,sigusrl_handler)==SIG_ERR)
perror("can't set handler for SIGUSRL");
sigemptyset(&set);
sigaddset(&set,SIGUSR1-1);
if(sigismember(&set,SIGUSR1-1)==1)
printf("sucess\n");
if(sigprocmask(SIG_BLOCK,&set,NULL)==-1)
perror("fail to set signal-mask");
sleep(40);
当我在另一个终端里:
kill --USR1 8643
结果立即:
catch SI...... &&&&
文件a.txt中的内容如下:
&meta name="keywords" content="aaaaa
注意,上面总共有3行(可能更多行)。请问,如何用命令提取content="
"引号中的字符串,将它保存在一个变量中。
如对a.txt的提取结果应为aaaaabbbbbccccc,谢谢!
正则表达式
...... &&&&
writebytes = write(receivefilefd,receivecontext.data,receivecontext.counts);
//bzero((char *)&receivecontext,sizeof(struct context));
//memset(receivecontext.data,0,sizeof(receivecontext.data));
if(writebytes& 0)
perror("write!!!..\n");
close(sockfd);
printf("write file fd: %d, packages: %d , %d chars........\n ",receivefilefd,++receivepkgs,writebytes);
就是上面write的时候到一半的时候就bad address了,现在测试的6M到300多M都是这种情况,大概传到一半之后就这样,不知道为什么
...... 最新技术文章: &&&&
最近项目在搞linux kernel 内存优化,这个内核版本优化后使用在android手机上。
开发一般都是在linux机器上进行交叉编译后把代码烧到手机里面运行。
这里有个问题,如果使用交叉编译?
看了很多教程,说arm--arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
这个工具可以交叉编译,但悲剧的事情是无法下载,网站好像改变,没有这个下载地址。
我希望的是自己在linux系统下写一个helloword.c的代码,经过交叉编译后,我adb push到手机里面的/data目前下
手机root权限已经获取。
最后希望在adb命令下,执行./hellwrod 来运行交叉编译的代码,能够...... &&&&
启动apache前,特地的检查了配置文件:
root@server:~# /usr/local/apache/bin/apachectl configtest
然后我启动apache:
root@server:~# /usr/local/apache/bin/apachectl -k start
(98)Address already in use: make_sock: could not bind to address [::]:80
在网上搜到的资料,都说有进程占用了80端口,可是我用命令查看,80端口是空的
root@server:~# netstat -lnp|grep 80
root@server:~#
使用ps -aux查看所有进程,也没有看到apache或者httpd相关的进程,奇怪了
系统也已经重启好几遍了,怎么回事?
...... &&&&
RT,本人大二软件工程学生,对Linux比较感兴趣,想尽早确定方向。最近做科创,指导老师说可以考虑做无线驱动。我想详细了解一下这个方向的前景如何?工作机会多吗?工作强度如何?待遇如何?请教在这方面有经验的前辈
前景一般,机会不多,强度不大,待遇不错。
楼上两位,你们……
记得《小马过河》吗,我的看法是“这条河可以过”。
...... 
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,站长邮箱:www_169it_(请将#改为@)当前位置: >>
中断系统与8259A
微型计算机接口技术第九章 中断系统 ? ??? ? ? ?9.1 9.2 9.3 9.4 9.5 9.6 9.7中断的基本概念 80x86的中断指令 中断向量 系统中断的分类 8259A中断控制器 PC/AT的可屏蔽中断 实模式下的定时中断程序设计<
br /> 第九章 中断系统9.1 中断的基本概念 中断的基本概念??复习:CPU与外设交换数据的方式又几种? 以查询方式为例:开始读取状态信息 N数据准备好? Y 从数据口读数据当外设的数据 未准备好时, CPU必须不断 查询外设的状 态信息,系统 效率低下。返回 中断的基本概念1、中断方式输入数据的过程分析①启动 输 入 设 备 ③数据 输 入 接 口 ② 中 断 服 务 子 程 序主 ④中断请求 程 序⑥⑤中断响应 断点 ⑦读入数据 ⑨ ⑧ 中断的基本概念2、什么是中断? ? CPU暂停执行现行程序,转而处理随机事件,处理完毕 后再返回被中断的程序继续执行,这一全过程称为中断。 ? 3、中断源 ? 能引发CPU中断的信息源。中断源可分为: ? (1) 外部中断源(硬件中断源) ? I/O设备 如键盘、显示器、打印机 ? 数据通道 如磁带、磁盘 ? 时钟 如由8254 OUT0引发的中断 ? 故障源 如掉电、存贮器奇偶校验错 ? (2) 内部中断源(软件中断源) ? 执行INT软件中断指令 如 INT 21H ? CPU指令执行时产生的异常 如被0除等? 中断的基本概念?4、具有中断请求功能的输入接口数据端口选通8D 锁 存 器数据输 入 设 备 设备选 通信号OE 三 态 缓 冲 器CPU 数据总线IORCP地址译码器 I***RST CP控制端口选通CPCPU 地址总线IOW 数据总线D0位VCCDQQD中断允许触发器 中断的基本概念?4、具有中断请求功能的输入接口数据端口选通8D 锁 存 器数据输 入 设 备 设备选 通信号OE 三 态 缓 冲 器CPU 数据总线IORCP地址译码器 I***RST CP控制端口选通CPCPU 地址总线IOW 数据总线D0位VCCDQQD中断允许触发器 中断的基本概念? ? ?5、什么是中断系统? 为实现中断功能而采取的硬件和软件的集合。 6、中断系统应具备的基本功能?对于硬件中断,接口电路应具有“屏蔽”和 “开放”功能, 这种功能可由程序员通过软件控制;能实现中断判优(中断排队),当有多个中断源提出请求 时,应能优先响应高级别的中断请求; 能实现中断嵌套,即高级别的中断源能够中断正在执行的 低级别的中断服务程序; 响应中断后能自动转入中断处理,处理完毕能自动返回断 点。??? 中断的基本概念中断响应及中断嵌套过程示意图(设B中断的级别高于A)断中备断点A设断点主程序A设备中断 服务程序B设B设备中断 服务程序备中断 第九章 中断系统9.2 80X86中断指令 80x86的中断指令??1、开中断指令STI 功能:使标志寄存器中I标志置1,CPU处于开中断状态; 2、关中断指令CLI 功能:使标志寄存器中I标志置0,CPU处于关中断状态; 3、软件中断指令INT n n为中断类型码,是0~255之间的无符号整数。 功能:无条件转向n型中断服务子程序。 注意:中断类型n必须有定义。?? ? ? ? ? 80x86的中断指令? ? ? ? ? ? ? ?INT n 指令的执行过程—CPU响应软件中断的过程 ① F寄存器?栈(为了保存INT n 之前的F状态) 使F中的T标志置0——禁止单步操作; 使F中的I标志置0——使CPU处于关中断状态; ② 断点地址?栈 先将断点的段地址(CS)?栈; 再将断点的偏移地址(IP)?栈; ③ CPU从存储器4n~4n+3单元取出n型中断的服务 程序入口地址?CS : IP,从而转入n型中断服务程 序。 80x86的中断指令4、中断返回指令IRET ? 功能: ? 依次从栈顶弹出6个元素?IP,CS,F; ? 如果栈顶是INT n的中断入口地址,则执行IRET后,返 回断点,否则不能返回断点。 ? 执行INT n后栈顶示意图 ? 执行IRET示意图 SP? 断点偏移地址(L)?断点偏移地址(H) 断点段基址(L) 断点段基址(H) FLAG(L) FLAG(H)?IPCS FIRET是中断服务程序的出口指令 第九章 中断系统9.3 中断向量 中断向量?每个中断都指定了一个类型码,也称为中断号。?每一种中断对应有一个中断服务程序(Interrupt Service Program ——ISP),也可称为中断服务例程(Interrupt Service Routine ——ISR);ISR本质上就是为特定中断事件服务的代码,中断发生后, 在中断系统的控制下,CPU转向ISR执行,为中断事件服 务完毕后,再返回被中断程序继续执行。 ISR存放在内存中,每个ISR程序段的起始地址被称为ISR 的入口地址。?? 中断向量?1、什么是中断向量??中断向量是实模式下,中断服务子程序的入口地址。 它由两部分组成:? ?中断服务程序所在代码段的段基址,2字节; 中断服务程序所在代码段的段内偏移地址,2字节;? ?2、中断向量表 中断类型码通过一个地址指针表与中断服务子程序 的入口地址相联系。? ?实模式下,该表被称为中断向量表;保护模式下,该表被称为中断描述符表; 中断向量?3、中断向量表的设置0H?80x86系统规定,在实模式 下,中断向量表需设置在系统 RAM最低端1KB单元空间内。 即00000H~003FFH。如果每个中断向量占用4字节, 共可有256个中断。 RAM最低1KB空间内,并不是 全部作为中断向量表。0型中断向量 1型中断向量 . . .?4× nn型中断向量 . . .?003FCH255型中断向量 中断向量?4、中断向量表的表地址与中断类型的关系4n+0 4n+1 4n+2 4n+3 n型中断ISR入口偏移地址(L) n型中断ISR入口偏移地址(H) n型中断ISR入口段基址(L) n型中断ISR入口段基址(H)例如,对于21H型中断,其中断向量存放在: 4×21H = 84H ~ 4×21H+3 = 87H单元中。请问9CH型中断,其中断向量存放在何处?9CH = B,9CH×4 = B = 270H 所以9CH型中断的中断向量存放在270H~273H单元中。 中断向量?5、中断向量的转向作用──CPU响应软件中断的过程中断向量区 21H型中断向量 IP CS 用户程序区 …... MOV AH,1 INT 21H MOV DL,AL …...?②YY XXNEXT:?中断服务程序区 21H型服务程序 XX:YY . . . IRET①堆栈区?④IP CS F?③NEXT的偏移地址 NEXT的段基址 FLAG寄存器内容 中断向量6、中断向量表的初始化?由BIOS设计的中断服务程序(如INT 16H,INT 10H等)其中断向量在加电时由BIOS负责写入中断向量表;?由DOS设计的中断服务程序(如 INT 21H)其中断向量 是在启动DOS时,由DOS负责写入中断向量表;?用户开发的中断服务程序,由用户程序写入其中断向量。 中断向量? ?问题:用户如何向中断向量表中写入中断向量?中断服务程序区 用户编写的n型 中断服务程序XX:YY. . . IRET 中断向量区 n型中断向量 YY XX 4n+0 4n+1 4n+2 4n+3? 中断向量方法一:用户自己编写程序填写中断向量CLI PUSH MOV MOV MOV MOV MOV MOV MOV POP STIDS AX, 0000H DS, AX BX, 4*n AX, OFFSET SERVICE [BX], AX AX, SEG SERVICE [BX+2], AX DS;关闭所有中断 ;保护原DS;DS指向内存最低端 ;BX指向入口地址 ;先填入口偏移地址 ;后填入口段地址 ;恢复原DS ;重新开放中断 中断向量方法二:使用DOS功能调用读写中断向量 [INT 21H的35H子功能]功能:入口: 出口: 功能:读出n型中断向量AL=中断类型码n ES:BX=n型中断向量 写入n型中断向量[INT 21H的25H子功能]入口:出口:DS=中断服务程序所在代码段的段基址DX=中断服务程序入口的偏移地址 无 ?例:把用户程序中名为”TIMER”的中断服务程序的入口地址 写入INT 1CH中断向量处。 数据段: OLD1C 代码段: MOV MOV INT MOV MOV PUSH MOV MOV DD ?中断向量AH, 35H AL, 1CH 21H ; 读入原中断向量 WORD PTR OLD1C, BX ; 保存原中断向量 WORD PTR OLD1C+2, ES DS ; 保存原DS AX, CS DS, AX ; 设置DS为ISR的CS 中断向量例:把用户程序中名为 “TIMER”的中断服务程序的入口地址写入INT 1CH中断向量处。代码段(续): MOV MOV MOV INT POP ……DX, OFFSET TIMER AH, 25H AL, 1CH 21H DS; ISR偏移地址?DX; 设置INT 1CH的中断 ; 向量,指向TIMER ; 恢复原DS 第九章 中断系统9.4 系统中断的分类 系统中断的分类CPU中断PC机 256种 中断 硬件中断 (外部中断) 可屏蔽中断 非屏蔽中断 BIOS中断 软件中断 DOS中断 DOS专用中断DOS保留中断 用户可用DOS中断 用户可开发的中断 系统中断的分类?系统中断分类如下图所示:软件中断 (INT n指令)NMI非屏蔽中断请求中断逻辑 I***中断 控制 系统可屏 蔽中 断请 求CPU中断 系统中断的分类??1、CPU中断CPU中断是指:CPU执行某些操作而引发的中断, 这类中断使用了0、1、3、4、6、7中断号。(1)除法错中断 ── 0型中断 (2)单步中断 ── 1型中断 (3)断点中断 ── 3型中断? ? ? ?(4)溢出中断 ── 4型中断 系统中断的分类? ? ?2、软件中断执行有定义的INT n指令引发的中断,称为软件中断。软件中断使用05H、10H~0FFH中的若干个中断号,具 体又可细分为:??(1)BIOS中断BIOS中断占用了05H、10H~1FH中断号,程序执行相关 的软件中断指令(INT n)可调用相应的中断服务程序。例如: INT 05H INT 10H 屏幕打印; 屏幕显示;? ? ?INT 11H设备配置检测; 系统中断的分类INT 12H 测试内存容量; INT 13H 磁盘I/O; INT 14H 串行通信I/O; INT 15H BIOS扩展功能; INT 16H 键盘I/O; INT 17H 打印机I/O; INT 18H 启动PC机上的ROM BASIC(仅老式PC有); INT 19H 重新装入引导程序(重启); INT 1AH 实时时钟(RTC)管理; 中断号1DH、1EH、1FH、41H、46H也被BIOS占用了。 但是,与这些中断号对应的并不是中断服务程序,而是一 些系统配置参数。 系统中断的分类??(2)DOS中断 DOS中断,又分为DOS专用中断、DOS保留中断、 用户可调用的DOS中断以及保留给用户开发的中断。DOS专用中断 ① 22H型中断:程序正常结束,返回父进程;? ??? ?② 23H型中断:程序非正常结束,DOS调用该中断;③ 24H型中断:系统严重错误时DOS调用该中断; ④ 28H~3FH型中断:DOS专用。 系统中断的分类? ? ? ? ?用户可调用的DOS中断 ① 20H型中断:程序执行INT 20H返回DOS; ② 21H型中断:DOS系统功能调用; ③ 25H型中断:指定驱动器按扇区读; ④ 26H型中断:指定驱动器按扇区读;?? ? ? ?⑤ 27H型中断:设置中断驻留程序(TSR)。用户可开发的DOS中断 60H~66H。 DOS保留中断 42H~45H、4BH~5FH等。 第九章 中断系统9.5 8259A中断控制器 8259A中断控制器?外部硬件中断是由CPU以外的中断请求而引发的。 如果有多个中断请求,怎样连接至CPU呢?中断0 中断1Intel 8259A中断请求I***中断n80x86 总线插槽 8259A的内部结构?1、8259A的内部结构INTA D0~D7 数据 总线 缓冲器 内 部 总 线 中断 服务 寄存器 (ISR) INT中断控制逻辑内部总线RD WR A0 CS CAS0 CAS1 CAS2 SP/EN读/写 控制 逻辑优先权 判断 电路中断 请求 寄存器IR0 IR1 IR7级联/ 缓冲 比较器中断屏蔽寄存器(IMR) 8259A的内部结构INTA D0~D7 数据 总线 缓冲器 内 部 总 线 中断 服务 寄存器 (ISR) INT 中断控制逻辑内部总线RD WR A0 CS CAS0 CAS1 CAS2 SP/EN读/写 控制 逻辑优先权 判断 电路中断 请求 寄存器IR0 IR1 IR7级联/ 缓冲 比较器中断屏蔽寄存器(IMR)(1)中断请求寄存器(IRR) 寄存引脚IR0~7上的中断请求信号。IRRi位=1表明对应的 IRi引脚上有了中断请求信号。 8259A的内部结构INTA D0~D7 数据 总线 缓冲器 内 部 总 线 中断 服务 寄存器 (ISR) INT 中断控制逻辑内部总线RD WR A0 CS CAS0 CAS1 CAS2 SP/EN读/写 控制 逻辑优先权 判断 电路中断 请求 寄存器IR0 IR1 IR7级联/ 缓冲 比较器中断屏蔽寄存器(IMR)(2)中断屏蔽寄存器(IMR) 寄存程序写入的中断屏蔽字。该寄存器某位为1(IMRi=1)则 与其对应的中断请求位(IRRi)就不能申请中断。 8259A的内部结构优先权 判断 电路 D0 D1 D2 D2 D4 D5 D6 D7 D7 D6 D5 D4 D3 D2 D1 D0 中断屏蔽寄存器(IMR) IR0 IR1 中断 请求 寄存 器 (IRR) IR7中断屏蔽寄存器(IMR)的编程 例1:屏蔽IRR7~2的中断请求,开放IR1、IR0的中断请求 MOV AL, B OUT IMR端口地址, AL …… 8259A的内部结构优先权 判断 电路 D0 D1 D2 D2 D4 D5 D6 D7 D7 D6 D5 D4 D3 D2 D1 D0 中断屏蔽寄存器(IMR) IR0 IR1 中断 请求 寄存 器 (IRR) IR7例2:不改变其它位的屏蔽状态,开放IR3的中断请求 MOV AL, IMR端口地址 AND AL, B OUT IMR端口地址, AL …… 8259A的内部结构INTA D0~D7 数据 总线 缓冲器 内 部 总 线 中断 服务 寄存器 (ISR) INT 中断控制逻辑内部总线RD WR A0 CS CAS0 CAS1 CAS2 SP/EN读/写 控制 逻辑优先权 判断 电路中断 请求 寄存器IR0 IR1 IR7级联/ 缓冲 比较器通过判优 “选中”其 中级别最高 的中断源, 然后通过中 断控制逻辑 电路,从 INT端向 CPU提出中 断请求。中断屏蔽寄存器(IMR)? ? ?(3)优先权判断电路(排队电路) ① 比较同时送达优先权电路的中断请求,哪一个 级别最高; ② 比较CPU正为之服务的中断源和刚进入优先权电路的中断 源,哪一个级别更高。 8259A的内部结构INTA D0~D7 数据 总线 缓冲器 内 部 总 线 中断 服务 寄存器 (ISR) INT 中断控制逻辑内部总线RD WR A0 CS CAS0 CAS1 CAS2 SP/EN读/写 控制 逻辑优先权 判断 电路中断 请求 寄存器IR0 IR1 IR7级联/ 缓冲 比较器中断屏蔽寄存器(IMR)? ?(4)中断控制逻辑电路 负责处理与中断请求/应答相关的事务。 8259A的内部结构? ? ? ? ?(4)中断控制逻辑电路 作用: ① 寄存一组初始化命令字和操作命令字,通过译码产生 内部控制信号; ② 当判优电路选中一个中断源时向CPU提中断请求 (INT); ③ 通过#INTA接收CPU送来的中断响应信号,中断响应 信号是2个连续的负脉冲。INTA中断 响应1t①使与被选中的中 断源对应的ISRi位 置1,IRRi位置0中断 响应2② 使8259向CPU送 出被选中的中断源 的中断类型码 8259A的内部结构INTA D0~D7 数据 总线 缓冲器 内 部 总 线 中断 服务 寄存器 (ISR) INT 中断控制逻辑内部总线RD WR A0 CS CAS0 CAS1 CAS2 SP/EN读/写 控制 逻辑优先权 判断 电路中断 请求 寄存器IR0 IR1 IR7级联/ 缓冲 比较器中断屏蔽寄存器(IMR)? ?(5)中断服务寄存器(ISR) ISR为8位寄存器,ISRi位和IRRi位一一对应。 8259A的内部结构(5)中断服务寄存器(ISR) ? 作用: ? 记录CPU正为之服务的是哪一个中断源。怎样记录? ? 如:通过判优电路IRR0位的请求被选中,8259A向 CPU发中断请求,通过#INTA收到第一个中断响应信号后, ISR0位置1,IRR0位置0。ISR0位置1,表明CPU正在准 备(或正在)执行IR0的服务程序。 ? 反之,如果ISR0位由1?0,表明IR0的中断服务程序 已执行完毕。 ? 所以ISR的每一位都是响应中断源的中断服务标志位。? 8259A的内部结构(6)数据总线缓冲器 ? 作用: ? ① 完成与CPU数据线配接; ? ② 接收初始化命令字,操作命令字; ? ③ 当收到第二个中断响应脉冲时,通过他们向CPU 送出被选中的中断源的中断类型码n。??在这之后CPU从4n+0~4n+3单元取出n型中断向量, 从而转入n型中断服务程序。 8259A的内部结构? ? ? ?(7)读/写控制模块 功能: 接收片选信号#CS 、端口选择信号A0和读写控制信号 #RD、#WR,并产生相应的控制逻辑。 一片8259A在系统中占用两个口地址,用末位地址线 A0选择端口,其它地址线通过译码产生8259A的片选信号。 (8)级联/缓冲比较器 一片8259A可以管理8级中断,二片8259A“级联”可管 理15级中断,级连/缓冲比较器是为完成多片8259A级连设 置的模块。? ? 8259A的内部结构? ? ? ? ? ? ? ??8259A的管脚 IR0 ~ IR7 外部中断请求信号输入 INT 输出,指向CPU的I***端 #INTA 输入,接收CPU发来的中断 响应 D0~D7 输入/输出,数据总线 #CS 片选信号 A0 地址线A0,用于选择 内部端口 #WR/#RD 读/写控制信号 CAS0~CAS2 用于8259级联 #SP/EN 用于8259级联? 8259A的中断过程?2、8259A的中断过程──CPU响应硬件中断的过程① 首先,如果外部有有效中断请求输入,则中断请求寄 存器将寄存加到引脚IR0~IR7上的中断请求;② 在中断屏蔽寄存器的过滤下,没有被屏蔽的中断请求 被送到优先权电路判优; ③ 优先权电路选中当前级别最高的中断源,然后从引脚 INT向CPU发出中断请求信号; ④ 如果CPU满足响应中断的条件,则CPU向8259A发出 2个中断响应信号(2个连续的负脉冲,由#INTA引脚送 出)。 8259A的中断过程?2、8259A的中断过程──CPU响应硬件中断的过程 ⑤ 8259A从引脚#INTA收到第1个中断响应信号之后,立即 使中断服务寄存器中与被选中的中断源对应的那一位置1, 同时把中断请求寄存器中的相应位清0;⑥ 从引脚#INTA收到第2个中断响应信号后,8259A把选中 的中断源类型码n,通过数据线送往CPU;⑦ 在实模式下,CPU从4n~4n+3单元取出该中断源的中 断向量?IP、CS,从而引导CPU执行该中断源的中断服务 程序。 8259A的中断管理方式?3、8259A的中断管理方式中断触发方式 边沿触发 电平触发中断屏蔽方式8259A 中断管理 中断优先级管理方式 方式 中断结束方式常规屏蔽方式 特殊屏蔽方式 完全嵌套方式特殊嵌套方式总线连接方式常规EOI循环方式 自动EOI循环方式 优先级循环方式 自动EOI方式 特殊EOI循环方式 常规EOI方式 非自动EOI方式 特殊EOI方式 缓冲方式 非缓冲方式 8259A的中断管理方式?8259A的中断触发方式 边沿触发 ? IRi出现上升沿表示有中断请求。 电平触发 ? IRi出现高电平表示有中断请求。 在第一个#INTA结束前,IRi必须保持高电平。 在中断服务结束,清零对应ISRi前, IRi高电平必须撤 消,否则会引起第二次中断。??? ? 8259A的中断管理方式?8259A屏蔽中断源的方式??常规屏蔽方式MR屏蔽字决定了允许或禁止某位IRi所对应的中断: IMi=1 禁止, IMi=0 允许。?特殊屏蔽方式? ?提供允许较低优先级的中断能够得到响应的特殊手段; 原理:假定当前正在处理IR6,先进入特殊屏蔽方式, 然后设置IM6=1。这时除IR6外的所有中断请求均能得到 响应; 特殊屏蔽方式中只能用SEOI命令结束中断。? 8259A的中断管理方式?8259A中断优先级管理方式 固定优先级方式 ? 所有中断请求IRi的中断优先级固定不变; ? 优先级排列顺序可编程改变; ? 加电后8259A的默认方式,默认优先级顺序从高到 低为IR0~IR7 。默认优先级 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 优先级 优先级可编程改变 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 优先级?两类优先级控制方式:固定优先级和循环优先级 ?7 6 5 4 3 2 1 0优先 级最 低 优先 级最 高3 2 1 0 7 6 5 4优先 级最 高 优先 级最 低 8259A的中断管理方式循环优先级方式? 中断源轮流处于最高优先级,即自动中断优先级循环;? 初始优先级顺序可用编程改变; ? 某中断请求IRi被处理后,其优先级别自动降为最低, 原来比它低一级的中断上升为最高级。IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 ISRi 优先级 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 ISRi 优先级0 1 0 1 0 0 0 0 7 6 5 4 3 2 1 0优先 级最 低 IR4的服务结束以前 优先 级最 高0 1 0 0 0 0 0 0 2 1 0 7 6 5 4 3优先 优先 级最 级最 高 低 IR4的服务结束之后 8259A的中断管理方式?中断嵌套方式 在中断处理过程中允许被更高优先级的事件所中断称为中断 嵌套。8259A有两种中断嵌套方式: ? 普通全嵌套方式(默认方式) 一中断正被处理时,只有更高优先级的事件可以打断当 前的中断处理过程而被服务。 ? 特殊全嵌套方式 一中断正被处理时,允许同级或更高优先级的事件可以 打断当前的中断处理过程而被服务。 注:特殊全嵌套仅用于多个8259A级连时的主8259A, 而不能用于从属8259A或单8259A系统。 8259A的中断管理方式?中断结束处理方式当某一IRi中断被服务时,ISR中的相应位ISRi=1。当服 务结束后,则必须清零该ISRi位。使ISRi=0是通过向8259A 发出中断结束命令(EOI命令)实现的。??三种EOI命令自动EOI(AEOI)——(自动EOI方式); ? 非指定EOI(NSEOI)——(正常EOI方式); ? 指定EOI(SEOI)——(特殊EOI方式)。 ?三种带优先级循环的EOI命令? 8259A的中断管理方式?AEOI(自动EOI) ? 在第2个#INTA结束时,由8259A使ISRi自动复位; ? 因不保留当前正在服务的中断的状态,故AEOI不能用 于中断嵌套方式; ?SEOI (特殊EOI,指定EOI) ? 由CPU发出一条SEOI命令,该EOI命令中指出了所要复 位的ISR的位号; ? 该方式可用于特殊屏蔽方式; ?NSEOI (正常EOI) ? 由CPU发出正常EOI命令,该EOI命令使ISRi=1的位中 优先级最高的那一位复位(正在服务完成的中断); ? 该方式用于普通全嵌套方式。 8259A的中断管理方式4、8259A的编程 ? 8259A的控制命令分为: ? 初始化命令字ICW ? ICW寄存器共4个,分别为ICW1~ICW4; ? 向8259A写入ICW的过程称为初始化编程; ? 操作命令字OCW ? OCW寄存器共3个,分别为OCW1~OCW3; ? 向8259A写入OCW的过程称为操作方式编程。 ? 根据8258A的具体应用情况不同,有些命令字可能 不需要设置。 ? OCW在初始化完成后,根据操作过程情况写入。? 8259A的编程?8259A初始化编程流程图ICW1──偶地址 ICW2──奇地址No(SGNL=1)单片8259A, 不需要写入ICW3;级联方式?Yes(SGNL=0)ICW3──奇地址No(ICW4=0) CPU是 8088/86? Yes(ICW4=1)非系统, 不需要写入ICW4ICW4──奇地址 准备接收中断请求 8259A的编程?8259A内部寄存器的寻址方法 ?需要#CS、A0、#RD、#WR和D4、D3的配合; ?内部寄存器的访问方法如下表:读写操作 写OCW2 写OCW3 写ICW1 写ICW2,ICW3,ICW4,OCW1(顺序写入) 读出IRR、ISR 读出IMRCS# RD# WR# A0 D4 D3 0 0 0 0 0 1 0 1 0 0 1 x 1 x x 0 0 1 0 1 x x 8259A的编程?(1)8259A初始化命令字初始化命令字ICW(Initialization Command Word) 通常是系统开机时,由初始化程序填写,且在整个系统工作 过程中保持不变。初始化命令字必须按规定的顺序填写。??①ICW1(A0=0)D7D6D5D4 1D3 LTIMD2D1D0D4=1 ICW1标志ADI SNGL ICW41 ─ 需要ICW4 0 ─ 不需要ICW4 1 ─ 单片8259A 0 ─ 级联 80x86系统不用,通常为0 1 ─ 电平触发方式 0 ─ 边沿触发方式 8086系统中缺省为0 8259A的编程?②ICW2(A0=1) 设置中断类型码D7 D6 D5 D4 D3 D2 D1 D0T7T6T5T4T3×××8259A传送的中断类型码D7 D6 D5 D4 D3 D2 D1 D0 IR7 T7 T6 T5 T4 T3 1 1 1注: T7~T3 — 中断向量类型码高位,IR6IR5 IR4 IR3T7 T6 T5 T4 T3T7 T6 T5 T4 T3 T7 T6 T5 T4 T3 T7 T6 T5 T4 T311 1 010 0 101 0 1由编程决定低三位 — 自动设置为 IR0 ~ IR7 的类型编码(000 ~ 111)IR2IR1 IR0T7 T6 T5 T4 T3T7 T6 T5 T4 T3 T7 T6 T5 T4 T300 010 001 0 8259A的编程?③ICW3(主控制器,A0=1) 设置从控制器接入位置D7 D6 D5 D4 D3 D2 D1 D0S7S6S5S4S3S2S1S01 ─ 对应的IRx输入连接一个从控制器 0 ─ 对应的IRx输入无从控制器连接?ICW3(从控制器,A0=1) 设置接入主控制器的位置D7 0 D6 0 D5 0 D4 0 D3 0 D2 ID2 D1 ID1 D0 ID0从控制器ID,编码000~111分别表示和 该片从控制器的INT端相连的主控制器 的中断输入线的编号(IR0~IR7) 8259A的编程?④ICW4(A0=1)D7 0 D6 0 D5 0 D4 D3 D2 M/S D1 D0 SFNM BUF AEOI μPM1 ─ 86/88模式 0 ─ 80/85模式 1 ─ 自动EOI 0 ─ 非自动EOI 0 x ─ 非缓冲方式 1 0 ─ 缓冲方式/从控制器 1 1 ─ 缓冲方式/主控制器 1 ─ 特殊完全嵌套方式 0 ─ 非特殊完全嵌套方式 8259A的编程?(2)8259A操作命令字由CPU向8259A送三个字节的操作命令字 OCW (Operation Command Word),用以规定8259A的工作 方式,如:?? ?中断屏蔽 结束中断??优先权循环中断状态 等。操作命令字是在应用程序中设置的,设置时,顺序上 没有严格的要求。? 8259A的编程?①OCW1(A0=1) ? OCW1是中断屏蔽命令字,命令格式如图。 ? 命令字中的M7~M0对应IMR的各位。Mi=1表示该中断 被屏蔽,Mi=0表示该中断开放。D7 D6 D5 D4 D3 D2 D1 D0M7M6M5M4M3M2M1M0中断屏蔽控制字 1 ─ 对应的IRx中断输入被屏蔽 0 ─ 对应的IRx中断输入被开放 8259A的编程?② ?OCW2(A0=0) 中断结束命令字,命令格式如图。 ?R、SL、EOI的不同组合决定了8259A的几种工作方式; ?L2~L0 这几位确定当SL=1时指定的特殊结束或特殊循 环时的中断优先级。最常用的常规EOI命令字为20H。D7 R D6 SL D5 EOI D4 0 D3 0 D2 L2 D1 L1 D0 L00 0 1 1 0 1 1 00 1 0 0 0 1 1 11 1 1 0 0 1 0 0常规EOI命令 特殊EOI命令 常规EOI命令,按优先级循环 以自动EO方式循环(设置) 取消自动EOI时的优先级循环 特殊EOI,按优先级循环 设置优先权命令 无操作中断结束 自动循环 特殊循环0 0 0 0 1 1 1 10 0 1 1 0 0 1 10 1 0 1 0 1 0 10 1 2 3 4 5 6 7有 效 的 中 断 请 求 级 别 8259A的编程?③ ?OCW3(A0=0) 用于控制8259A的运行方式,命令格式如图。D7 0D6D5D4 0D3 1D2 PD1 RRD0 RISESMM SMM0 0 1 10 无作用 1 0 取消特殊屏蔽 1 设置特殊屏蔽1 0查询命令 非查询命令0 0 1 10 无作用 1 0 在下一个读脉冲时读IRR 1 在下一个读脉冲时读ISR 8259A的编程?8259A编程举例?按以下要求初始化8259A:端口地址为200H和201H; ?中断为上升沿触发;单片8259A;不写ICW4; ?与IR0-IR3对应的中断向量码为08H-0BH; ?IR4-IR7不使用。 ?根据要求,各初始化参数及工作参数如下: ?ICW1 =
= 12H ?ICW2 = 08H 中断向量码 ?OCW1 =
= 0F0H 中断屏蔽字? 8259A的编程?初始化程序如下:?INIT8259A:? ? ? ? ? ? ? ?MOV MOV OUT MOV MOV OUT MOV OUTDX,200H AL,12H DX,AL DX,201H AL,08H DX,AL AL,0F0H DX,AL;A0=0,写ICW1 ;上升沿触发,单片,不写ICW4 ;A0=1,写ICW2,OCW1 ;ICW2 ;OCW1:屏蔽IR4-IR7 286以上微机8259A的中断管理方式?5、286以上微机8259A的中断管理方式?系统加电后由BIOS对8259A初始化编程,设定中断管理方式: ?① ?② ?系统8259A,中断触发方式为边沿(上升沿)触发; 中断屏蔽方式采用常规屏蔽方式即应用时,向8259A中断屏蔽寄存器写入适当屏蔽字即可 屏蔽/开放某一级中断;?③ ?中断源为固定优先级 即IR0中断请求级别最高,IR7中断请求级别最低; 即在中断服务子程序结束之前向8259送中断结束命令。?④采用常规中断结束方式 ? 286以上微机对8259A的编程?6、286以上微机对8259A的编程?对8259A编程分两步进行: ?对8259A进行初始化编程——系统加电后,由BIOS完成; ?对8259A进行应用编程 ? ——编写中断程序时完成,有2项内容: ? ① 需要时,向8259A中断屏蔽寄存器写入屏蔽字; ? ② 每一个硬件中断服务程序结束前必须向8259A送 中断命令字,通知8259A本次中断结束,否则8259A不 能响应同一中断源的下次中断。 ? 8259A收到中断结束命令后,把ISR中的置1位清0。? 第九章 中断系统9.4 PC/AT可屏蔽中断 PC/AT可屏蔽中断?1、概述硬件中断分类 ? 可屏蔽中断和非屏蔽中断。? ? ? ? ?可屏蔽中断: 输入到I***引脚的中断请求信号引发的中断; 非屏蔽中断: 输入到NMI引脚的中断请求信号引发的中断。 PC/AT可屏蔽中断硬件中断的级别 DMA请求 高于 非屏蔽中断 高于 可屏蔽中断。 响应可屏蔽中断的条件 ① 有可屏蔽中断请求、没有DMA请求、没有非屏蔽中 断请求; ② CPU一条指令执行完毕; ③ CPU处于开中断状态(I 标志=1)。 响应非屏蔽中断的条件 ① 有非屏蔽中断请求、没有DMA请求; ② 一条指令执行完毕。 PC/AT可屏蔽中断?2、可屏蔽中断的硬件结构从8259 IR0. . .主8259 D0. . .IR0 IR2 IR7 SP/EN INTA WR RDD0IR7 SP/EN INTA WR RDCAS2 CAS1D7 INTD7 INT I***CAS0CAS2CAS1CS INTA IOW IOR A0 CSS CSMCSCAS0A0A0 PC/AT可屏蔽中断?主、从8259中断请求信号设置实时时钟 用户中断 保留 保留 保留 协处理器 硬盘 保留IRQ14 IRQ15 IRQ9 IRQ10 IRQ11 IRQ12IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 从8259 INT日时钟 键盘 辅串口 主串口 并口2 软盘 并口1IRQ3 IRQ4 IRQ5 IRQ6 IRQ7IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 主8259 INT I*** PC/AT可屏蔽中断PC/AT使用2片8259级连,共可管理15级中断,中断 源与中断类型对应关系如下:主 8259 IR0 IR1 IR2 IR3 中断源 日时钟 键盘 从8259 辅串口 0BH 中断类型 08H 09H 从 8259 IR0 IR1 IR2 IR3 中断源 中断类型实时时钟 70H 用户中断 71H改向0AH 保留 保留 72H 73HIR4IR5 IR6 IR7主串口并行口2 软盘 并行口10CH0DH 0EH 0FHIR4IR5 IR6 IR7保留硬盘 保留74H76H 77H协处理器 75H PC/AT可屏蔽中断硬件可屏蔽中断的中断级别主 8259 IR0 中断源 日时钟 中断级别 最高 次高 高 从 8259 IR0 中断源 实时时钟 中断级别 高IR1IR2 IR3 IR4 IR5键盘从8259 辅串口 主串口 并行口2IR1IR2 IR3 IR4 IR5用户中断保留 保留 保留 协处理器IR6IR7软盘并行口1 低IR6IR7硬盘保留 低 PC/AT可屏蔽中断系统分配的8259口地址主8259 从8259中断屏蔽寄存器 口地址 21H A1H中断结束命令寄存器 口地址 20H A0H PC/AT可屏蔽中断中断结束命令 ① 中断结束命令字 = 20H ② 接入主8259 IR0~IR7的中断源,其中断服务程序结束 要向主8259送中断结束命令字: MOV AL,20HOUT 20H,AL恢复现场 IRET PC/AT可屏蔽中断中断结束命令③ 接入从8259的中断源,其服务程序结束应分别向主、从8259各送一个中断结束命令字。 MOV OUT OUT AL, 20H 20H, AL 0A0H, AL恢复现场IRET PC/AT可屏蔽中断3、硬件中断和软件中断的区别 ① 中断的引发方式不同; 连接到I***或NMI引脚的信号引发 / 执行INT n引发。 ② CPU获取中断类型码的方式不同; 8259A提供 / 按中断号取自中断向量表。 ③ CPU响应的条件不同; 硬件中断只有在开中断情况下才能响应 / 软件中断不受此 限制。 ④ 中断处理程序的结束方式不同; 硬件中断结束前要做两件事:一是向8259A送中断结束命 令,以使8259A在ISR中清除标志位,结束中断;二是执行 IRET指令,中断返回 / 软件中断只需直接执行IRET指令。 PC/AT可屏蔽中断4、硬件可屏蔽中断举例 (1)日时钟中断 ?中断源:系统8254 0#计数器,每55ms有一次中断请求; ?中断类型:8型; ?日时钟中断的处理流程: ① 开中断,保护现场(DS…压栈); ② 40H?DS,对“日时钟计数器”加1; ③ 测算软驱马达关闭时间; ④ 执行INT 1CH(即在INT 08H的ISR中执行软件中断 INT 1CH,INT 1CH结束时IRET返回INT 08H的ISR); ⑤ 向主8259送中断结束命令; ⑥ 恢复现场,IRET。 PC/AT可屏蔽中断?什么是“日时钟计数器” BIOS系统规定:40H:6CH~40H:6FH这4个单元(共32位) 为日时钟计数器,每55ms加1次,计数到H,为24小时, 其计数值供系统软件使用。 系统启动时CPU执行BIOS中的一段程序,读取CMOS实时 时钟电路的时间值?计数值?40:6CH~40:6FH做为日时钟计数 器的计数初值。 ?关于1CH中断服务程序 INT 08H的ISR,每隔55ms在DS=40H的前提下,调用一次 INT 1CH服务程序,之后又返回INT 08H的ISR。 所以1CH中断是日时钟的外扩中断,用户可开发新的1CH 中断(完成每55ms一次的定时操作)取代原来的中断服务子程 序。 PC/AT可屏蔽中断(2)用户中断 ?中断源:系统总线插槽B4端引入的用户设计的硬件中断 请求信号; ?用户中断请求的途径:IR1 用户 中断 请求 IR2. . .INTINTCPUIMR IMR从8259A主8259A PC/AT可屏蔽中断用户中断请求从ISA总线B4端子(IRQ9)引入,经过主 8259,从8259二级中断管理,最后由 主8259向CPU提中断; 只有从8259 IMR1置0,主8259 IMR2置0,其中断请求方能 送到CPU。 实现用户中断必须对主、从8259应用编程,保证中断 申请由8259中断控制器提向CPU: IN AL, 0A1H AND AL, B OUT 0A1H, AL ;开放用户中断 IN AL, 21H AND AL, B OUT 21H, AL ;开放从8259中断 PC/AT可屏蔽中断?用户中断的中断类型CPU响应用户中断后,自动转向71H型中断服务程序。 BIOS为71H型中断设计的服务程序如下: PUSH AXMOVOUT POPAL, 20H0A0H, AL AX ;结束从8259的中断INT0AH; 用户开发的ISR终端类型为0AH PC/AT可屏蔽中断用户定义的中断服务程序有两个设计方法 ① 定义用户中断服务程序为71H型 中断程序的准备工作:置换71H型中断向量,即把用户 中断的中断向量?4×71H~4×71H+3单元; ② 定义用户中断服务程序为0AH型 中断程序的准备工作:置换0AH型中断向量,即把用户 中断的中断向量?4×0AH~4×0AH+3单元 ; 用户中断服务程序结束 ① 若用户中断定义为0AH型 服务程序结束前只向主8259送结束命令; ② 若用户中断定义为71H型 服务程序结束前,向主从8259各送一中断结束命令。 PC/AT可屏蔽中断(3)键盘中断实时时钟 用户中断 保留 保留 保留 协处理器 硬盘 保留IRQ14 IRQ15 IRQ9 IRQ10 IRQ11 IRQ12IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 从8259 INT日时钟 键盘 辅串口 主串口 并口2 软盘 并口1IRQ3 IRQ4 IRQ5 IRQ6 IRQ7IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 主8259 INT I*** ?中断源:主板键盘接口电路; ?中断类型:9; ?键盘中断全过程:键盘中断键盘接口电路 (完成串并变换)PC/AT可屏蔽中断IR1 主8259AI***CPU并行按键码 DB7~0键盘按键产 生串行键码键盘接口分为两部分: 键盘电路 ── ***在键盘盒内; 键盘接口电路 ── ***在主板上,两部分电路通过PS2接口 相连。 PC/AT可屏蔽中断键盘中断键盘接口电路 (完成串并变换)IR1 主8259AI***CPU并行按键码 DB7~0键盘按键产 生串行键码键盘电路以单片机为核心,加电后固化在单片机内部的键 盘扫描程序,不断扫描每一个按健,一旦有键闭合,就把闭合 键的扫描码(位置码)? 键盘接口电路。 PC/AT可屏蔽中断键盘中断键盘接口电路 (完成串并变换)IR1 主8259AI***CPU并行按键码 DB7~0键盘按键产 生串行键码键盘接口电路的功能: ① 把串行扫描码通过移位寄存器转换成并行扫描码?口地 址为60H的端口寄存器; ② 串并转换完毕,向主8259发送中断请求; ③ CPU响应后,转9型服务程序。 PC/AT可屏蔽中断键盘中断键盘接口电路 (完成串并变换)IR1 主8259AI***CPU并行按键码 DB7~0键盘按键产 生串行键码? 键盘中断处理流程 ?开中断,保护现场(DS…压栈); ?40H?DS; ?从60H口地址寄存器取并行扫描码分析,处理转换成2字 节的按键代码存入键盘缓冲区; ?向8259发中断结束命令; ?恢复现场IRET。 ? 键盘缓冲区 BIOS规定:系统RAM 40:1EH~40:3DH为键盘缓冲区,共 32个单元,实际使用30个单元,存放15个键的键代码。键盘缓 冲区以“先进先出”的规则存取; 键盘缓冲区由9型服务程序写入按键代码,用户程序使用 INT 16H访问键盘缓冲区,∴键盘缓冲区是9型硬中断和INT 16H软中断之间交换信息的缓冲区 。XX XX XX XXPC/AT可屏蔽中断由INT 16H读取 按键代码由键盘中断处理 程序写入按键代码XX XX键盘缓冲区 40:1E~40:3D 第九章 中断系统9.5 实模式下定时中断 程序设计 实模式下的定时中断程序设计? 应用背景在许多应用中,需要每隔一定时间完成一次预定的操作 ——定时操作。如定时数据采集、定时显示、定时键盘扫描等,而采用定时中断技术 实现这种操作具有实时性好、占用CPU资源较少 的特点。 实模式下的定时中断程序设计一 、定时中断程序的设计方法1、定时中断源的选择 ① 系统8254 0#计数器OUT0 55ms IR0 INT系统8254主8259A系统8254作为定时中断源(日时钟) 实模式下的定时中断程序设计② 外扩8254作为定时中断源XmsOUTxIR1 INT外扩8254ISA总线从8259A外扩8254作为定时中断源 ③ 其它外扩定时中断源 实模式下的定时中断程序设计2、确定中断服务程序的类型中断类型由定时中断源接入8259A的中断引脚IRx有关: ① 如果中断源是外扩定时器,由从8259A的IR1引脚引入, 则服务程序应定义为0AH或71H型; ②如果中断源是系统8254的0#计数器,并且定时周期是55ms 的整数倍,则定义用户服务程序为1CH型,取代系统的1CH 型服务程序; ③如果中断源是系统8254的0#计数器,但定时周期≠55ms的 整数倍,则应重新对8254 0#计数器进行初始化,并保证原 1CH中断仍能按55ms周期运行,因此此时可定义用户服务程 序为08H型。 实模式下的定时中断程序设计定时中断周期不为55ms整数倍的处理框图重新对8254初始化 每隔Xms产生一次中断 新INT 08H服务程序 中断计数 NX是N和55ms的最大 公约数 N是定时周期满Nms? Y 定时操作N满55ms? Y 调用系统原 INT 08H服务程序本次中断结束 实模式下的定时中断程序设计3、置换中断向量 服务程序的类型确定之后,应置换相应的中断向量(使 用 INT 21H的25H和35H子功能); 4、开放8259A中断 从系统硬件中断的结构图可知: ① 用户中断要经过从8259A、主8259A两级中断控制器 的管理,为了使用户中断请求送到CPU,应将从8259A的 IMR的D1位置0,主8259A的IMR的D2位置0,从而打通用户中断请求的通道; ②一般说,各种型号的主机板对日时钟中断都是开放的, 用户不必再采取措施。 实模式下的定时中断程序设计5、避免DOS重入执行 INT 21H指令INT 21HIRET原始程序INT 21H ISR其他ISR 实模式下的定时中断程序设计6、关于中断服务程序的执行时间 ISR的执行时间必须远远小于定时中断的时间间隔。定时中断周期T1ISR执行时间T2T2&&T17、中断结束向8259A发中断结束命令 实模式下的定时中断程序设计二、定时中断程序结构1、ISR直接进行定时操作主程序流程 关中断 中断源初始化 置换中断向量 其他准备工作 开中断 处理其他事务 等待中断 程序结束前 恢复系统资源 恢复中断向量 返回DOS 向8259A送中断 结束命令 恢复现场 IRET N 中断服务程序流程 保护现场 定时时间到? Y 执行定时操作 (避免DOS重入) 实模式下的定时中断程序设计2、ISR设置定时时间到标志,通过信号量完成定时控制主程序流程 关中断 中断源初始化 置换中断向量 其他准备工作 开中断 处理其他事务 N 有’时间到’标志? Y 执行定时操作 程序需要结束? Y 恢复系统资源 恢复中断向量 返回DOS N 中断服务程序流程 保护现场 N 定时时间到? Y 设置’时间到’标志 向8259A送中断 结束命令 恢复现场 IRET“时间到” 标志可利 用数据段 某单元或 某个空闲 寄存器 实模式下的定时中断程序设计三、定时中断程序实例 【例】INT 1CH型定时中断的应用 假设微机系统外扩了共阴极数码管电路(见下页),要求 使用系统定时源并采用中断方式每隔一秒完成一次8字左移,循 环往复,直到主机键盘按下任意键时停止。A B A B C D A F E D G B C H COM C E F G H D E F G H (b)共阳型数码管内部电路 COM A B C D E F G H (c)共阴型数码管内部电路 COM(a)段位置及管脚配置 实模式下的定时中断程序设计系统电路图D78D 锁 存 器CSCP74LS240D0 A选通地址=201HH AH AH AH输出段选码……COMCOMCOMCOMULN2803D08D锁存器D7CP输出位选码CS 选通地址=200H 实模式下的定时中断程序设计数码管显示原理使用段选码和位选码进行控制。 段选码:控制显示什么字符。8个数码管的同名段互相连 接,即D0?A、D1?B…、D6?G;D7?H 。显示字符 “8”的段选码是7FH。 位选码:选择被点亮的LED。 点亮右边第1个LED,位选码为B 点亮右边第2个LED,位选码为B : : 点亮左边第1个LED,位选码为B 实模式下的定时中断程序设计程序设计思路 主要解决四个问题:MOV MOV OUT MOV MOV OUT DX, 201H AL, 7FH DX, AL DX, 200H AL, Origin DX, AL ;段码;位码(1)字符“8”的显示控制问题,包括段选码和位选码;(2)定时时间间隔1秒钟如何实现; (3)每隔一秒钟“8”如何左移一位显示;SHR Origin,1 :(4)显示过程如何结束。SCAN: MOV AH, 1 INT 16H JZ SCAN 结束准备 实模式下的定时中断程序设计定时程序由主程序和1CH型 ISR共同构成主程序流程 关中断 保存系统1CH型中断向量 写入用户1CH型中断向量 最右边数码管显示’8’ 开中断 有按键输入? Y 恢复系统1CH型中断向量 返回DOS NSCAN: MOV INT JZ AH,1 16H SCANCALL Reset MOV AH, 4CH INT 21H 实模式下的定时中断程序设计定时程序由主程序和1CH型 ISR共同构成中断服务程序流程 保护现场 重新定义用户数据段 中断计数 N 满18次? Y 18?中断计数器 ’8’字左移一位 恢复现场 IRET 实模式下的定时中断程序设计;程序清单 ;Filename : SH8.ASM .486 DATA SEGMENT USE16 ;数据段定义 OLD1C DD ? ICOUNT DB 18 ;中断计数初值 ORIGIN DB 80H ;数码管位选初值 DATA ENDS CODE SEGMENT USE16 ;代码段 ASSUME CS:CODE, DS:DATA START: MOV AX, DATA ;DS段赋值 MOV DS, AX CLI ;关中断 CALL READ1C ;保存原1CH型中断向量 CALL WRITE1C ;设置新1CH型中断向量,指向用户ISR 实模式下的定时中断程序设计MOV DX, 201H MOV AL, 7FH OUT DX, AL MOV DX, 200H MOV AL, ORIGIN OUT DX, AL STI MOV AH, 1 INT 16H JZ SCAN CALLRESET MOV AH, 4CH INT 21H;输出“8”的字型码;定位显示 ;开中断 ;有键入? ;否,转移SCAN:;返回DOS 实模式下的定时中断程序设计;---- 以下为用户ISR ----SERVICE PROC PUSHA PUSH DS MOV AX, DATA MOV DS, AX DEC ICOUNT JNZ EXIT MOV ICOUNT, 18 SHR ORIGIN, 1 JNC NEXT MOV ORIGIN, 80H NEXT: MOV AL, ORIGIN MOV DX, 200H OUT DX, AL EXIT: POP DS POPA IRET SERVICE ENDP ;保护现场;注意:重新给DS赋值。;中断计数 ;不满18次转移 ;满18次,重新赋计数初值 ;没有显示到最左端,转移 ;已显示到最左端,重新赋初值;“8”字左移一位 ;注意:不需给8259A送中断结束命令。 ;返回系统8型中断服务程序 实模式下的定时中断程序设计;-----------------------------------------------READ1C PROC ;转移系统1CH型中断向量 MOV AX, 351CH INT 21H MOV WORD PTR OLD1C, BX MOV WORD PTR OLD1C+2,ES RET READ1C ENDP ;-----------------------------------------------WRITE1C PROC ;写入用户1CH型中断向量 PUSH DS MOV AX, CODE MOV DS, AX MOV DX, OFFSET SERVICE MOV AX, 251CH INT 21H POP DS RET WRITE1C ENDP 实模式下的定时中断程序设计;-----------------------------------------------RESET PROC ;恢复系统1CH型中断向量 ;注意:下面给DX和DS赋值的顺序不能颠倒 MOV DX, WORD PTR OLD1C MOV DS, WORD PTR OLD1C+2 MOV AX, 251CH INT 21H RET RESET ENDP CODE ENDS END START 本章要点1、中断基本概念(中断、中断源、中断系统及其功能、 中断指令、中断向量、中断向量表及其作用); 2、PC系统中断分类 (CPU中断、软件中断及响应过程、 硬件中断(可屏蔽与非屏蔽中断的概念与区别、响应条 件)); 3、系统响应可屏蔽中断的过程; 4、PC/AT系统的可屏蔽中断结构(几个重要的中断源、 中断类型码和中断响应过程); 5、中断类程序的设计。
3. 8259A 有两种中断触发方式,第六章 中断系统一、 填空题 1. 硬件中断可分为可屏蔽中断和非屏蔽中断两种。 2. CPU 响应可屏蔽中断的条件是 IF=1、有中断...d、PC 微机系统中 8259A 的应用 PC 在现代 PC 微机系统中,系统中包含了两片 8259A 中断控制器,经级连可以管 理 16 级硬件中断,其中部分中断源已经被系统...通过中断号标识中断源,外部中断的中断号由中断控制器(如 8259a)提供,内部中断中断号和不可屏蔽中断号系统固定分配 发生中断时: 1)将标志寄存器、CS、IP 内容压...14、8259A 的特殊全嵌套工作方式是指:当处理某一级中断时,如果有 同级 的中断请求, 也会给予响应,这种工作方式是专门为 8259A 的级连 系统提供的。 15、常用...试按照如下要求对 8259A 进行初始化:系统中只有一片 8259A, 中断请求信号用电平触发方式,下面要用 ICW4,中断类型码为 60H、 61H、62H……67H,用全嵌套...微机系统中若用 4 片 8259A 构成主、从两级中断控制逻辑,接至 CPU 的可屏蔽中断请求线 I*** 上, 最多可扩展为( )级外部硬中断。 A. 32 B. 29 C. 28...用 3 片 8259A 级联,最多可管理的中断数是( b ) A.24 级 B.22 级 C...已知 SRAM2114 芯片容量为 1K×4 位,若要组成 16KB 的系统存储器,则共 需...保护模式下 芯片编程及中断处理探究( 8259A 芯片编程及中断处理探究(上) Version 0.02 哈尔滨工业大学 并行计算实验室 谢煜波[1] 简介中断处理是操作系统必须完成...(D) A、中断向量的高 8 位 B、中断类型码的低 8 位 C、中断向量的高 5 位 D、中断类型码的高 5 位 16、某 8259A 系统中,需对 IR7、IR3 进行屏蔽...7.2 简述微机系统的中断处理过程。 【解答】 (1)中断请求:外设需要进行中断...7.7 已知 8086 系统中采用单片 8259A 来控制中断,中断类型码为 20H,中断源...
All rights reserved Powered by
copyright ©right 。文档资料库内容来自网络,如有侵犯请联系***。

参考资料

 

随机推荐