JR(Jump Register):无条件跳转到寄存器中存储的地址。 有条件跳转指令: BEQ(Branch if Equal):如果两个寄存器的值相等,则跳转。 BNE(Branch if Not Equal):如果两个寄存器的值不相等,则跳转。 BLT(Branch if Less Than):如果第一个寄存器的值小于第二个寄存器的值(有符号比较),则跳转。 BGE(Branch if Gre...
RISC-V的跳转指令用于在程序中实现无条件或有条件的跳转操作,以实现程序的控制流转移。RISC-V的跳转指令包括J(无条件跳转)、JAL(带链接的无条件跳转)、JR(寄存器间接跳转)等。 首先,我们来讲解J指令。J指令用于实现无条件跳转,其操作数是一个立即数,用于指定跳转目标的地址。J指令的具体格式为,J target,其中...
1.我们之前学到过的用来从被调用函数返回的jr ra指令或者ret指令,其实是jalr指令演变而来的一种伪代码,代表的是jalr x0,ra,0这样一条指令 ret=ja ra=jalr x0,ra,0 实现的操作 首先是PC+4写入x0,然后通过设置PC等于ra加0来实现跳转,也就相当于是实现的跳转ra中所保存的返回地址位置的作用 2.第二种用法...
1 # increment i j loop # jump to loop done: mv a0, t3 # move sum to a0 # restore reg-group lw ra, 0(sp) # restore return address lw s0, 4(sp) # restore s0 lw s1, 8(sp) # restore s1 lw s2, 12(sp) # restore s2 addi sp, sp, 16 # restore stack pointer jr ra # ...
对应基本指令:jal x0, label jr rs:无条件跳转到寄存器 rs 的地址。 对应基本指令:jalr x0, 0(rs) 函数调用和返回伪指令 call label:调用子程序 label。(不太严谨) 32 位对应基本指令: auipc ra, %pcrel_hi(label) jalr ra, %pcrel_lo(label)(ra) ...
andi 指令是拿** a0 寄存器和立即数 0xff 进行与操作。由于立即数是 0xff,所以总是返回 a0 的低 8 位数据;and 指令则是拿 a0 和 a1 寄存器进行与操作,再把结果写入到 a0 寄存器**。 用VSCode 打开工程按下“F5”调试一下,如下所示: 上图中是执行完 andi a0,a0,0xff 指令之后,执行 jr ra 指令之前...
一般先将返回地址存在ra寄存器(x1)中,通过jal指令或者jump指令搭配jr指令实现。 函数调用的变量保存与恢复 📂 函数调用时,需要将涉及的变量值/中间变量保存到寄存器中。理想做法是使用栈(LIFO),属于存储系统的一部分。使用sp寄存器(x2)保存栈指针,先将原数据存入栈中,函数调用完成后再从栈中取出。 递归函数的...
sub_ins:suba0,a0,a1#a0 = a0-a1,a0、a1是C语言调用者传递的参数,a0是返回值,这样计算结果就返回了jrra#函数返回 这段代码就是减法指令,和加法指令的模式一样,除了助记符是 sub,实现的操作是 a0 = a0 - a1。sub 指令后的目标寄存器、源寄存器可以是任何通用寄存器。
- `nop`:无操作,用于合并指令流(通常可用作空指令或延迟槽填充) - `li`:将立即数加载到寄存器 - `jr`:无条件跳转到寄存器指定的地址 - `jalr`:无条件跳转到寄存器指定的地址,并将返回地址保存到指定寄存器中 以上仅列举了一小部分常见的RISC-V汇编指令,具体指令集的详细信息可以参考RISC-V官方文档。©...