.extern main .extern plic_handle .globl prog_start .section .text.init _prog_start: li x1, 0 li x2, 0 li x3, 0 li x4, 0 li x5, 0 li x6, 0 li x7, 0 li x8, 0 li x9, 0 li x10, 0 li x11, 0 li x12, 0 li x13, 0 li x14, 0 li x15, 0 li x16, 0 li x17, 0 li x18, 0 li x19, 0 li x20, 0 li x21, 0 li x22, 0 li x23, 0 li x24, 0 li x25, 0 li x26, 0 li x27, 0 li x28, 0 li x29, 0 li x30, 0 li x31, 0 la t0, trap_entry csrw mtvec, t0 li t0, 1 << 11 csrw mie, t0 li sp, 0x40011000 csrr t0, mstatus ori t0, t0, 1<<3 csrw mstatus, t0 call main ecall .balign 32 .section .trap_entry, "ax", %progbits trap_entry: addi sp,sp,-136 sw ra,4(sp) sw sp,8(sp) sw gp,12(sp) sw tp,16(sp) sw t0,20(sp) sw t1,24(sp) sw t2,28(sp) sw s0,32(sp) sw s1,36(sp) sw a0,40(sp) sw a1,44(sp) sw a2,48(sp) sw a3,52(sp) sw a4,56(sp) sw a5,60(sp) sw a6,64(sp) sw a7,68(sp) sw s2,72(sp) sw s3,76(sp) sw s4,80(sp) sw s5,84(sp) sw s6,88(sp) sw s7,92(sp) sw s8,96(sp) sw s9,100(sp) sw s10,104(sp) sw s11,108(sp) sw t3,112(sp) sw t4,116(sp) sw t5,120(sp) sw t6,124(sp) csrr t0, mstatus # 读取 mstatus 寄存器 andi t0, t0, ~(1 << 3) # 清除 MIE 位 (全局中断禁用) csrw mstatus, t0 # 写回 mstatus 寄存器 call plic_handle csrr t0, mstatus ori t0, t0, 1<<3 csrw mstatus, t0 lw ra,4(sp) lw sp,8(sp) lw gp,12(sp) lw tp,16(sp) lw t0,20(sp) lw t1,24(sp) lw t2,28(sp) lw s0,32(sp) lw s1,36(sp) lw a0,40(sp) lw a1,44(sp) lw a2,48(sp) lw a3,52(sp) lw a4,56(sp) lw a5,60(sp) lw a6,64(sp) lw a7,68(sp) lw s2,72(sp) lw s3,76(sp) lw s4,80(sp) lw s5,84(sp) lw s6,88(sp) lw s7,92(sp) lw s8,96(sp) lw s9,100(sp) lw s10,104(sp) lw s11,108(sp) lw t3,112(sp) lw t4,116(sp) lw t5,120(sp) lw t6,124(sp) addi sp,sp,136 mret