JR(Jump Register):无条件跳转到寄存器中存储的地址。 有条件跳转指令: BEQ(Branch if Equal):如果两个寄存器的值相等,则跳转。 BNE(Branch if Not Equal):如果两个寄存器的值不相等,则跳转。 BLT(Branch if Less Than):如果第一个寄存器的值小于第二个寄存器的值(有符号比较),则跳转。 BGE(Branch if Gre...
RISC-V的跳转指令包括J(无条件跳转)、JAL(带链接的无条件跳转)、JR(寄存器间接跳转)等。 首先,我们来讲解J指令。J指令用于实现无条件跳转,其操作数是一个立即数,用于指定跳转目标的地址。J指令的具体格式为,J target,其中target是跳转目标的地址。执行J指令时,CPU会将PC(程序计数器)的高4位和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.第二种用法...
.globlxori_insxori_ins:xoria0,a0,0#a0 = a0^0,a0是C语言调用者传递的参数,a0也是返回值,这样计算结果就返回了jrra#函数返回.globlxor_insxor_ins:xora0,a0,a1#a0 = a0^a1,a0、a1是C语言调用者传递的参数,a0是返回值,这样计算结果就返回了jrra#函数返回 xori 指令是拿 a0 寄存器和立即数 0 进行...
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 # ...
a5# 将 `a5` 的值移动到 `a0`lwra,28(sp)# 从栈偏移 28 字节处恢复返回地址到 `ra`lws0,24(sp)# 从栈偏移 24 字节处恢复 `s0` 的值lws1,20(sp)# 从栈偏移 20 字节处恢复 `s1` 的值addisp,sp,32# 恢复栈指针,释放 32 字节的栈帧jrra# 跳转到返回地址寄存器 `ra` 的地址(即返回调用者...
jr rs:无条件跳转到寄存器 rs 的地址。 对应基本指令:jalr x0, 0(rs) 函数调用和返回伪指令 call label:调用子程序 label。(不太严谨) 32 位对应基本指令: auipc ra, %pcrel_hi(label) jalr ra, %pcrel_lo(label)(ra) ret:从子程序返回。
- `nop`:无操作,用于合并指令流(通常可用作空指令或延迟槽填充) - `li`:将立即数加载到寄存器 - `jr`:无条件跳转到寄存器指定的地址 - `jalr`:无条件跳转到寄存器指定的地址,并将返回地址保存到指定寄存器中 以上仅列举了一小部分常见的RISC-V汇编指令,具体指令集的详细信息可以参考RISC-V官方文档。©...
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 JALR机器编码格式 [1] 3.有条件分支跳转 ...
首先第1行指令将当前PC+4的地址值(0x8000+4=0x8004)存储到寄存器ra,然后跳转到FOO标签地址处继续执行,执行到第8行,jr指令跳转到ra寄存器保存的地址值0x8004,执行sub指令,然后执行到第3行,有出现一个跳转指令jal,将当前PC+4(0x800C)的值保存到ra寄存器,跳转到FOO,执行到第8行后,jr又跳转到ra(0x800C)地址...