8086cpu的中断

1. 为什么需要中断??

       1.1   是为了让cpu具备一种能力,让cpu在执行指令的时候,检测到cpu内部或者外部的一种特殊信号,并且对这种信号做出处理。

       1.2 中断是怎么处理的?

          中断有中断源,中断向量表,中断处理程序。

            1.2.1中断源是触发中断处理程序的,比如我们点击键盘,触发外中断,当程序执行时候发现除法问题就会除法除法错误中断。 

           1.2.2 中断向量表是存在一块固定内存的地方,内存范围是0000:0000到0000:03FF,1024个内存单元,256个中断向量,其实没有256个,里面有0000:0200-0000:02FF这段内存是空的,很多人自己写中断例程的时候也往往写在这里。

           1.2.3 中断处理程序是预先写好在固定地方,内存地址就存在中断向量表里面。

   

          

2.中断的种类:内中断和外中断

   2.1   如果是cpu内部信号就称之为内部中断:

            内部中断分为四种:1.除法错误   对应的中断类型码为0  

                                                 2.单步执行  对应的中断类型码为0

                                                 3.执行into指令  对应的中断类型码为4

                                                 4:执行int指令  int  N  n是常数,

   2.2   外部中断,是指cpu对外部设备的控制。比如键盘,鼠标。

            pc系统的接口卡和主板上,装有这种接口芯片,这些外设接口芯片的内部有若干寄存器,

  cpu将这些寄存器当做端口来访问。外设的输入不直接送入内存和cpu。而是送入相关的接口 芯片的端口中,再有相关的芯片送到外设,cpu还可以向外设输出控制命令,而这些控制命令也是先送到相关芯片的端口中,然后再由相关的芯片根据命令对外设实施控制。cpu就通过中断机制来满足随时处理外设发出的信号。

          2.2.1 可屏蔽中断。cpu可以不响应的外中断,cpu是否响应可屏蔽中断,要看标志寄存器的IF位的设置,当CPu监测到可屏蔽中断信息时,如果IF=1,则执行完当前指令后,引发中断,否则不引发中断过程,所有的外设引发的都是可屏蔽中断

          2.2.2不可屏蔽中断。

3.自己编写中断程序。部分地方未写出

assume  cs:code

        code  segment 
        start :mov  ax,cs
               mov  ds,ax
               mov  si,offset do0
               
               mov  ax,0
               mov es,ax
               mov  di,200H
                
               mov  cx,offset  do0end-offser do0  //计算do0代码段的长度
               cld               
            rep movsb
            
            mov ax,4c00H
            int 21H
            
            do0:显示字符串"overflow"
            mov ax,4c00H
            int 21H
            
            do0end:nop
            code ends
             end start
        

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当8086 CPU接收到一个中断请求时,它会执行以下步骤来获取中断矢量: 1. 将当前的程序计数器(PC)和标志寄存器(FLAGS)的值保存到堆栈中,以便在中断处理程序执行完成后能够恢复现场。 2. 禁用中断,以避免在处理当前中断时发生新的中断请求。 3. 访问中断向量表(Interrupt Vector Table,IVT),中断向量表是一个包含256个4字节(32位)地址的表,其中每个地址对应于一个中断向量。 4. 从中断向量表中找到相应的中断向量,中断向量是一个指向中断处理程序的指针。 5. 将中断向量中的地址加载到CS(代码段寄存器)和IP(指令指针寄存器)中,以便CPU可以开始执行中断处理程序。 6. 执行中断处理程序,直到程序完成并从中断返回。 7. 恢复现场,将之前保存到堆栈中的PC和FLAGS的值重新加载到相应的寄存器中。 8. 开启中断,允许处理新的中断请求。 以上就是8086 CPU获取中断矢量的过程。 ### 回答2: 8086 CPU是一种16位的微处理器,它采用的是实模式工作。在实模式下,8086 CPU通过中断向量表来获取中断矢量。 中断矢量表是一个存储中断处理程序地址的数据结构,它的地址保存在IDTR(中断描述符表寄存器)中。IDTR是一个48位寄存器,其中前16位保存表的界限,后32位保存表的基址,即中断矢量表的起始地址。8086 CPU通过读取IDTR寄存器,得到中断矢量表的地址。 中断矢量表由256个表项组成,每个表项占用4个字节。每个表项对应一个中断号,中断号的范围为0x00到0xFF。表项中的值是处理该中断中断处理程序的地址,即中断服务例程(ISR)的入口地址。 当发生中断时,8086 CPU中断向量寄存器(IVR)的高8位清零,并将中断号存储在低8位中。然后,CPU根据中断号从中断矢量表中找到对应表项的地址,并将该地址加载到CS(代码段寄存器)和IP(指令指针寄存器)中,从而跳转到相应的中断处理程序处进行处理。 总之,8086 CPU通过读取IDTR寄存器获取中断矢量表的地址,通过中断号在中断矢量表中找到对应的中断处理程序的地址,实现中断的处理。 ### 回答3: 8086 CPU 是通过中断向量表(Interrupt Vector Table)来获取中断矢量的。 首先,中断向量表是一个存储中断处理程序入口地址的表格,每个中断在表格中都有一个对应的条目。8086 CPU 中的中断向量是一个16位无符号整数,用于表示中断处理程序在内存中的入口地址。 当发生中断时,8086 CPU 首先会根据中断类型和中断号,通过乘法运算(乘以 4)获取中断向量表中对应中断的入口地址的偏移量。然后,它会从偏移量中读取一个字(16 位数据),这个字包含了实际的中断处理程序的入口地址。 根据偏移量和中断类型(0 表示实模式中断,1 表示保护模式中断),8086 CPU 构造出一个有效的中断处理程序入口地址。对于实模式中断,偏移量会乘以 16,然后与段寄存器的值相加得到物理地址。对于保护模式中断,偏移量与段选择器的值相加,然后转换成线性地址。 通过以上的步骤,8086 CPU 可以获取对应中断中断处理程序入口地址,然后跳转到该地址执行相应的中断处理程序。这样,CPU 在发生中断时就能够正确地找到对应中断处理程序并进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值