RISC-V 指令集架构与 jalr 指令详解 1. RISC-V 指令集架构的基本概念 RISC-V(Reduced Instruction Set Computer - Vector)是一种开源的指令集架构(ISA),旨在通过模块化、可扩展性和简洁性来支持从嵌入式系统到高性能计算的广泛应用。RISC-V 的设计哲学强调减少指令的复杂性,以提高处理器的性能和能效。 2. jal...
JALR x13,0(x1) 跳到x1寄存器里存储的地址,并将下一条指令存在x13寄存器中。 其他伪指令示例: JR x1 => JALR x0, x1, 0 RET => JALR x0, x1, 0 JALR x13 => JALR x1, x13, 0 一般来说,LUI和JALR配合使用可以跳转32位绝对地址范围,AUIPC和JALR配合可以跳转32位相对于PC的地址范围。 图2 JAL...
JALR(Jump and Link Register)指令也用于跳转,但是目标地址是由寄存器提供的。JALR指令的格式为:JALR rd, rs1, imm。其中rd是目标寄存器,rs1是用于提供跳转地址的寄存器,imm是跳转的相对地址。 JALR指令的优势: 可以实现更灵活的跳转,目标地址由寄存器提供,可以根据运行时的需求进行跳转。
lui x1,<Hi20bits> #对X1寄存器写入高20位的地址值 jalr ra,x1,<low12bits> #然后在jalr指令中令源寄存器为X1,立即数为低12位的地址值,从而得到更新后的pc值为我们设置的高20位和低12位的绝对地址值 3.第三种用法是与AUIPC指令相组合,实现相对PC地址的32位偏移量的相对寻址跳转 auipc x1,<Hi20bits> #...
jalr ra, ra, 立即数(12位) 2.动态预测返回地址 尽管RISC-V 指令集本身并没有对 JAL 或 JALR 中目标寄存器的取值做出限制, 但是根据前面提到的函数调用约定(Calling Convention),JAL/JALR 常用的目标 寄存器有 x1(ra,返回地址)和 x5(t0,替代链接寄存器)。对普通的函数调用, x1(ra)会被用来存放返回地址。然...
jalr rd,rs1,offset 会把PC+4写入到rd中(return address) 把pc设置为 rs1+offset 和逻辑运算或者加载数据使用同样格式的immediate 没有二字节的乘法 如果想要jalr跳转到一个绝对的32位数,我们可以这样做: lui x1,<high 20 bits> jalr ra,x1,<low 12 bits> ...
RISC-V架构有两条无条件跳转指令(Unconditional Jump),jal与jalr指令。跳转链接(Jump and Link)指令jal可用于进行子程序调用,同时将子程序返回地址存在链接寄存器(Link Register:由某一个通用整数寄存器担任)中。跳转链接寄存器(Jump and Link-Register)指令jalr指令能够用于子程序返回指令,通过将jal指令(跳转进入子程序...
jalr使用间接地址(在您的示例中为x1)加上12位常量(在您的示例中为0)。它也将实际的address + 4...
JALR即JAL加上return,用于从子程序返回(函数返回) 还有6条带条件跳转指令(Conditional Branch),这种带条件的跳转指令和普通运算指令一样使用两个整数操作数,然后对其进行比较,如果比较的条件满足则进行跳转(很多其他的RISC架构处理器使用两条独立的指令,第一条指令进行比较,结果放在状态寄存器中,第二条指令读取状态寄存器...
jalr !!注意,jalr不是J型指令格式而是I型指令格式。 imm的12bit立即数为偏移量,基地址保存在rs1中,两者相加为最终跳转的目标地址。只能跳转±2KB(2^11=2KB,去掉符号位)。 jalr也需要将下一条指令的PC值写入rd寄存器中。 3. RISC-V 寻址模式