内中断

内中断

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 相反功能 -----

__EOF__

本文作者Immortal-mode
本文链接https://www.cnblogs.com/immortal-mode/p/14106231.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   immortal_mode  阅读(985)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示