CPU程序中断

中断概念

计算机在执行程序过程中,遇到异常情况或者特殊请求时,暂停当前程序,转而处理异常,处理结束后返回程序的间断处,继续执行原程序,这就是中断。

中断源包括哪些?

  1.     人为设置中断
  2.     程序性中断,如除法非法,操作码不能识别
  3.     硬件故障,如突然断电
  4.     I/O设备发送中断请求,如向内存发送读写请求
  5.     外部事件,如按键

各中断源如何向CPU提出中断请求?

  • 中断请求标记触发器 置1;
  • 每个中断源对应一个触发器,多个触发器组成中断请求寄存器;

CPU什么条件下会响应中断请求?

  1. 程序状态字PSW(寄存器)中的中断总开关为1;
  2. 中断屏蔽位为0;每个中断源对应一个屏蔽位触发器,多个触发器组成中断屏蔽寄存器;

PSW组成:

  1. 控制位,设置控制位,让处理器工作在某种模式下;
  2. 状态位,实时反应当前指令运行状态,根据状态来决定程序是否可以跳转;其中有一个中断允许位,中断总开关,如果值为1,则表明CPU可以接受外部的中断。


  CPU什么时间响应?

  • 当前指令执行完

CPU响应中断时执行如下3步(中断隐指令)

  1. 硬件关中断,关闭中断总开关
  2. 保护断点,保存主程序返回地址,CPU即将要执行,但是还没执行到的指令的地址;保存到特定地址,或断点进栈。
  3. 向中断服务程序入口跳转

方式一,硬件向量法,设备编码器生成中断号,在中断向量表查找,表中找到入口地址
方式二,软件查询法,运行 中断识别程序(将中断识别程序入口地址存入PC,即可运行),识别是哪一个设备发出的请求,相应的执行其中断服务程序

中断隐指令,CPU是按指令执行,但是在执行如上三个步骤时没有实际指令,所以将三个步骤叫做隐指令

CPU执行中断服务程序流程

  1.  保护现场,由于中断服务程序和主程序会共用寄存器,所以首先将中断服务程序会用到的寄存器的值入栈保存,以便后续恢复现场;
  2. 执行中断服务,执行中断主体程序;可以视情况开中断;
  3.  恢复现场,恢复寄存器的值,出栈指令;先进后出;此时应关闭中断;
  4.  打开中断,保证在主程序执行过程中,中断都是打开的;
  5.  中断返回,将返回地址(断点)赋值给程序计数器PC;

执行中断服务 详细过程(risc_v架构)

1.停止执行当前程序流,转而从寄存器mtvec中定义的PC地址开始执行(该PC地址为异常服务程序),同时更新其他四个CSR寄存器:
    a).异常原因寄存器mcause,记录异常种类,低31位表示12种中断和16中异常;
    b).异常PC寄存器mepc(保护断点),记录遇到异常时的指令PC值,异常结束后可回到该程序点;
        如果异常由 ecall或 ebreak产生,mepc值会被更新为 指令自己的PC,因此在返回时,又会回到该异常指令,造成死循环;
        正确做法为在程序中改变 mepc 值指向下一条指令 mepc = mepc +4(或2);
    c).异常值寄存器mtval,如果是存储器访问造成的异常,则将存储器的访问地址更新到寄存器中
                        如果是非法指令造成,则将指令的指令编码更新到寄存器
    d).状态寄存器mstatus,异常发生时,更新其中的某些域;
    
2.异常服务程序
    处理器进入异常后,从mtvec定义的PC地址进入该程序,
    通过查询mcause异常编号,进入更具体的异常服务程序
    最后退出异常程序,返回 mepc值

4.退出异常,返回主程序
    退出异常指令:MRET、SRET、URET,其中SRET/URET仅用在支持监督模式和用户模式中
    执行MRET指令后,停止当前程序,转而从mepc定义的PC地址开始执行(恢复断点);
        同时更新状态寄存器mstatus;

一条典型的RISC-V汇编语句由4部分组成,包含如下字段:
1.标签:表示当前指令的位置标记
2.操作码:操作码可以是如下任意一种
(1)RISC-V指令的指令名称,譬如addi指令、lw指令等
(2)汇编语言的伪操作
(3)用户自定义的宏
3.操作数:操作数是操作码所需的参数,与操作码之间以空格分开
4.操作数:可以是符号、常量、或者由符号和常量组成的表达式
5.注释:注释即为了使的程序代码便于理解而添加的信息,注释是可选的,如果添加注释,需要
    以“;”或者“#”作为分隔号,以分隔号开始的本行之后部分到本行结束都会被当做注释
    或者使用类似C语言的注释语法//和/* */对单行或者大段程序进行注释。
备注:伪操作在汇编程序中的作用是指导汇编器处理汇编程序的行为,这些伪操作仅在汇编过程中起作用,一旦汇编结束,伪操作的使命就此结束

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东边坡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值