内中断

内中断

1.0 简介

  • 中断时CPU处理外部突发事件的重要技术
  • 它能使CPU在运行过程中对外部事件发出的中断请求进行处理,处理后又返回断点,继续进行CPU原来的互作
  • 引起中断的原因叫做中断源,根据中断源的不同,可以把中断分为硬件中断和软件中断
  • 硬件中断又可以分为外部中段和内部中断两类
  • 外部中段一般是指由计算机外设发出的中断请求:如:鼠标,键盘,打印机 ,外部中断是可以屏蔽的,可以利用中断控制器屏蔽这些外部设备的中断请求
  • 内部中断是指硬件出错,如:(停电 奇偶校验错 或者是运算出错,除数为零,溢出等)内部中断是不可屏蔽的中断
  • 软件中断不是真正的中断,int 21H等都是软件中断
  • CPU为了处理并发的中断请求,规定了优先权,中段优先权从高到低是
    • 除法错 溢出中断 软件中断
    • 不可屏蔽中断
    • 可屏蔽中断
    • 单步中断

1.1 中断处理程序

  • CPU设计者必须在中断信息和其处理程序的入口地址之间建立某种连续,是CPU根据中断程序可以找到要执行的处理程序
  • 比如cpu根据中断类型码4,就可以找到4号中断处理程序
  • 可随之而来的是,若要定位中断处理程序,需要知道他的段地址和偏移地址,而一个中断类型码为一个字节,如何的得到中断处理程序的段地址和偏移地址尼?
  • 这里就要引用“中断向量表”。

1.2 中断向量表

  • CPU用8位的中断类型码中国中断向量表找到相应中断处理程序的入口地址
  • 中断向量表在内存中表示,其中存放256个中断源所对应的中断处理程序的入口
  • 对于8086PC中断向量表是存放在内存地址为0处
  • 从内存0000:0000~~0000:03ff的1024个字节存放这中断向量表

1.3 中断过程

  • 找到中断向量表中的中断处理程序入口,用它设置CS:IP,使CPU执行中断处理程序
  • 8086中断过程
    • 获得中断类型码
    • 标志寄存器的值入栈
    • 设置标志寄存器的第8为TF和第九位IF的值为0
    • CS入栈
    • IP入栈
    • 在内存中读取出中断处理程序的入口地址 设置CS:IP
  • iret通常和硬件自动完成中断程序配合使用
  • iret用汇编来表示
    • pop ip
    • pop cs
    • popf

1.4 除法错误中断处理

  • 溢出处理

  • assume cs:code
    code segment
      start:	mov ax,1000
      			mov bh,1
      			div bh
    code ends
    end start
    
  • 我们可以通过中断向量表中的更改程序入口地址,让程序发生中断处理的时候,让计算机执行我们自己的代码

1.5 单步中断

  • CPU在执行一条指令后,如果检测标志寄存器的TF位为1,则产生单步中断,引发中断

1.6 影响中断的特殊情况

1.7 int 指令

  • int 中断

  • int 格式

    • int n n为中断类型码,它的功能是引发中断过程
  • 可以在程序中用int'指令调用任何一个中断处理程序

1.8 bios和dos中断处理程序的安装过程

1.9 端口

  • CPU可以直接读写3个地方的数据

    • 寄存器
    • 内存单元
    • 端口
  • 端口的读写指令,in和out

    • 使用in和out 指令时只能使用ax或al来存放从端口中读取或送到端口的数据

2.0 shl和shr指令

  • 逻辑位移指令
  • shl 功能
    • 将一个寄存器或内存单元的数据向左移位
    • 将最后移出的一位写入CF中
    • 最低用0填充
  • 如果移动位数大于1的话,将移动的位数放在CX中
  • shr 相反功能 -----
posted @ 2020-12-08 23:08  immortal_mode  阅读(1057)  评论(0)    收藏  举报