【RISC-V汇编】csrw mtvec, t0 CSR Write t0 -> Machine Trap Vector Register
·
这句是 RISC-V 汇编里的 CSR 写操作,拆开看:
csrw= CSR Write,把通用寄存器的值写入一个 CSR(Control and Status Register)。mtvec= Machine Trap Vector Register,机器模式下存放异常/中断入口地址的 CSR。t0= 通用寄存器 x5,这里作为源操作数。
所以整句的意思是:
把 t0 里的值写入 mtvec,即设置机器模式异常/中断的处理程序入口地址。
稍微展开一点
mtvec 是一个 32/64 位寄存器,格式大致是:
mtvec[31:2] = 异常入口 PC(对齐到 4 字节)
mtvec[1:0] = MODE
00 → Direct:所有异常/中断都跳到这个地址
01 → Vectored:中断跳 base+4×cause,异常仍跳 base
所以常见用法是:
la t0, trap_handler # t0 = 异常处理函数地址
csrw mtvec, t0 # 写入 mtvec,生效
之后一旦发生异常(如 ecall、非法指令)或中断(M 模式下使能的话),CPU 就会跑到 t0 指向的地方去执行。
💡 这是 M 模式(Machine Mode) 的寄存器,裸机 / bootloader / OS 内核早期才会用到;S 模式对应的是
stvec,U 模式没有 trap vector CSR。
如果你是在哪段代码里看到的(比如 OpenSBI、xv6、rt-thread 的 riscv 启动),可以贴出来,能结合上下文讲得更准。
更多推荐




所有评论(0)