risc-v相关

常见指令

la s0, symbol: 将symbol地址加载到s0中,因为risc-v在32位模式下,每一条指令都是32bit,能够存储立即数的也才11bit好像,因此如果要描述一个地址,就需要两三条指令,通过立即数 + 位移来凑成一个地址。为了减少指令数量,risc-v规定:访问变量时得先通过la将地址加载到寄存器中,后续通过lw和sw来读取和修改。
lw s2, x(s0):将[s0寄存器值+x]地址存储的值写入s2寄存器中,也就是,用C表述就是s2 = *(s0 + x)
sw zero, x(s0):将0值写入地址[s0寄存器值+x]处,zero寄存器被硬编码为0,写入无效,读取为0

STORE x1, x(sp):将x1寄存器值 存储到 [sp寄存器(栈顶)的值 + x]地址处
LOAD s1, 0(s0):将 [s0寄存器值 + 0]地址存储的值加载(LOAD)到s1寄存器中

csrr x1, mepc:将mpec寄存器值 存储到 x1寄存器中

li sp, __stack_start:将__stack_start函数地址加载到sp寄存器当中,相当于切换栈
mv a3, s0:将s0寄存器值存储到a3寄存器,实际上对应addi a3, s0, 0

寄存器名称对应的含义
https://www.cnblogs.com/sureZ-learning/p/18306366

posted @ 2025-04-28 11:24  识弦  阅读(70)  评论(0)    收藏  举报