文章目录
控制流 (Control Flow)和Trap
- 控制流(Control Flow)
- branch(条件分支指令), jump (无条件跳转指令),由程序正常自主控制的流程
- 异常控制流 (Exceptional Control Flow,简称 ECP, 又称Trap)
- 不在程序的控制范围之内
- exception
- interrupt
RISC-V Trap处理中涉及的寄存器
八个控制状态寄存器(CSR)是机器模式下异常处理的必要部分:
- mtvec(Machine Trap Vector)它保存发生异常时处理器需要跳转到的地址。
- mepc(Machine Exception PC)它指向发生异常的指令。
- mcause(Machine Exception Cause)它指示发生异常的种类。
- mie(Machine Interrupt Enable)它指出处理器目前能处理和必须忽略的中断。
- mip(Machine Interrupt Pending)它列出目前正准备处理的中断。
- mtval(Machine Trap Value)它保存了陷入(trap)的附加信息:地址例外中出错
- 的地址、发生非法指令例外的指令本身,对于其他异常,它的值为 0。
- mscratch(Machine Scratch)它暂时存放一个字大小的数据。
- mstatus(Machine Status)它保存全局中断使能,以及许多其他的状态,如图
mtvec (Machine Trap-Vector Base-Address)
- BASE: trap入口函数的及地址,必须保证四字节对其
- MODE: 进一步用于控制入口函数的地址配置方式
- Direct: 所有的exception和interrupt发生后pc都跳转到BASE指定的地址处。其实就是一个中断处理函数。
- Vectored: exception处理方式同Direct;但interrupt的入口地址以数组方式排列。其实就是多向量指向不同的中断处理函数。