
cpu在响应中断前会保护主程序当前指令下面的一条指令的地址。就是将当前的IP和CS的内容入堆栈。cpu响应中断之后,将指令地址从堆栈中取出即可找到中断服务子程序入口地址。
CPU响应中断做如下动作:
①将中断类型码放入暂存器保存;
②将标志寄存器内容压入堆栈,以保护中断时的状态;
③将IF和TF标志清0,目的是防止在中断响应的同时又来别的中断,而将TF清0是为了防止CPU以单步方式执行中断处理子程序。这时要特别提醒,因为CPU在中断响应时自动关闭了IF标志,因此用户如要进行中断嵌套时,必须在自己的中断处理子程序中用开中断指令来重新设置IF;
④保护断点,断点指的是在响应中断时,主程序当前指令下面的一条指令的地址。因此保护断点的动作就是将当前的IP和CS的内容入栈,保护断点是为了以后正确地返回主程序;
⑤根据取到的中断类型码,在中断向量表中找出相应的中断向量,将其装入IP和CS,即呆自动转向中断服务子程序。
对于CPU内部中断源的请求,可直接转入中断周期,由内部硬件自动执行预定的 *** 作。
对于CPU外部中断源的请求,通常必须满足以下条件才能响应。
置位了中断请求触发器。每个中断源对应有一个中断请求触发器,通过它发出并保持中断请求信号,直至CPU响应后才被清除。
中断屏蔽触发器处于非屏蔽状态。在有多中断源的实际系统中,为了增加控制的灵活性,常在每个中断源的接口中设置一个中断屏蔽触发器,只有当此触发器处于非屏蔽状态时,中断请求才能被送至CPU,否则将被屏蔽掉。
CPU内部是中断开放的。在CPU内部有一个中断允许触发器(IF),只有当它为“1”(即中断开放)时,CPU才能响应外部中断;否则中断被关闭,即使INTR上有中断请求,CPU也不响应。中断允许触发器的状态通常由STI和CLI指令来改变(置“1”或清“0”)。
当CPU复位时,中断允许触发器被清“0”,即关中断,所以必须用STI指令才能开中断;每当中断响应后,CPU又会自动关中断,所以必须在中断服务程序中用STI指令来开中断,以便执行中断服务程序时能响应更高优先级的中断请求,中断服务程序结束后能响应新的中断请求。
8086系统在存储器的最低1KB区域(00000H~003FFH)建立一个中断向量表,存放256个中断类型的中断向量。
这1024个单元被分成256组,每组包括4个字节单元,存储一个中断向量的段基址和段内偏移地址,高2个字节用于存放段基址,低两个字节用于存放段内偏移地址。
在执行某一条INT n指令时,CPU首先对断点和现场进行保护,然后将中断指令中的中断类型号n乘以4,得到一个地址,这个地址就是n号中断服务子程序的入口地址在中断向量表中的存放地址。
按照这个地址,取出连续4个字节单元的内容,即n号中断服务子程序入口的段基址(2个字节)和偏移地址(2个字节),送入CS和IP,以实现n号中断调用。
扩展资料:
8086/8088有20条地址线,它的直接寻址能力为1MB。也就是在一个系统中可以有多达1MB的存储器,地址从00000H—FFFFFH。给定任意一个20位物理地址,就可以从中取出需要的指令和 *** 作数。但是8086/8088CPU只能进行16位运算。
与地址有关的寄存器SP、IP、BP、SI、DI也都是16位的,所以对地址的运算也只能是16位的。对于8086/8088来说,无论采用哪种寻址方式,寻找 *** 作数的范围最大是2^16。
系统先将1MB存储器以64KB为范围分成若干段。在寻址一个具体物理地址时,由一个基本地址再加上由SP或IP等可由CPU处理的16位偏移量来形成20位物理地址。
参考资料来源:百度百科-偏移地址
举个例子吧 一个中断指令为INT09H 对应中断向量为F000H(CS):E987H(IP),中断类型号为N=9 当处理中断时CPU根据中断类型号9HX4得到中断指针向量指针0024H。根据此指针CPU可从中断向量表中0024~0027H4个字节单元中获取中断向量(及入口地址),从而转向中断服务
cpu在响应中断前会保护主程序当前指令下面的一条指令的地址。
就是将当前的IP和CS的内容入堆栈。
cpu响应中断之后,将指令地址从堆栈中取出即可找到中断服务子程序入口地址。
CPU响应中断做如下动作:
①将中断类型码放入暂存器保存;
②将标志寄存器内容压入堆栈,以保护中断时的状态;
③将IF和TF标志清0,目的是防止在中断响应的同时又来别的中断,而将TF清0是为了防止CPU以单步方式执行中断处理子程序。
这时要特别提醒,因为CPU在中断响应时自动关闭了IF标志,因此用户如要进行中断嵌套时,必须在自己的中断处理子程序中用开中断指令来重新设置IF;
④保护断点,断点指的是在响应中断时,主程序当前指令下面的一条指令的地址。
因此保护断点的动作就是将当前的IP和CS的内容入栈,保护断点是为了以后正确地返回主程序;
⑤根据取到的中断类型码,在中断向量表中找出相应的中断向量,将其装入IP和CS,即呆自动转向中断服务子程序。
单片机响应中断请求时,通常会通过中断向量表(Interrupt Vector Table)来找到相应的中断服务程序。中断向量表是一个存储中断服务程序入口地址的表格,每个中断请求都会分配一个唯一的中断向量号,当中断请求到达时,单片机会查找中断向量表,根据中断向量号找到对应的中断服务程序入口地址,并跳转到该地址开始执行中断服务程序。
定义中断需要考虑以下几个方面:
中断源:需要定义哪些事件可以触发中断请求,例如外部硬件信号、定时器、串口接收等。
中断优先级:如果多个中断请求同时到达,需要确定哪个中断请求具有更高的优先级。
中断服务程序:中断服务程序是具体执行中断处理 *** 作的程序,需要编写相应的中断服务程序。
中断控制寄存器:单片机中通常有一个或多个中断控制寄存器,用于控制中断的使能和禁止,以及中断请求的标志位清除等 *** 作。
在定义中断时,需要根据具体的单片机型号和开发环境,参考相应的单片机手册和编程手册进行定义。
以上就是关于在PC机中,CPU响应中断后是如何找到中断服务子程序入口地址的全部的内容,包括:在PC机中,CPU响应中断后是如何找到中断服务子程序入口地址的、中断是如何告知CPU去执行哪个中断函数的、只知道中断类型 怎么就能求出中断服务入口地址 中断类型乘4不是中断向量的地址吗又不是中断向量///等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)