图6. 立即数加法 ADDI 从RV32I 对溢出标记的舍弃,也可以看出 RISC-V 非常强调指令集的简洁,极 力减少不必要的硬件或指令,秉承了 RISC 指令集将复杂操作通过多条简单指令来 实现的原始设计理念,可以说是不忘初心(这里实际上涉及一个更加复杂的话题, 即 RISC-V 在设计时对条件编码(Condition Code)的舍弃)。具...
以算朮加法ADDI为例,其funct3为三位二进制的000,执行步骤为从地址rs1对应的32位寄存器中取数据,同时扩展立即数至32位数值,随后通过算朮单元进行算朮加法,完成后输出计算结果储存至地址rd所对应的32位寄存器中。完成此流程则认为该指令执行完结。 下式为ADDI指令的一个例子,对应的rd为 ,rs1为 ,funct3为 。 附注...
R:寄存器-寄存器指令 I:立即数-寄存器指令(里面的立即数要拓展成32bit才能继续运算):一般用于访存load的指令 ADDI:寄存器+立即数 SLTI:寄存器指和立即数比较,小于立即数把1放入rd SLTIU:与SLTI相同,只不过是无符号数比较 SLLI:左移,移动位数由立即数指定,shift left logic immediate SRLI:同SLLI,右移 SRAI:shif...
把寄存器 x[rs2]加到寄存器 x[rs1]上,结果写入 x[rd]。忽略算术溢出。 addi rd, rs1, immediate x[rd] = x[rs1] + sext(immediate) 把符号位扩展的立即数加到寄存器 x[rs1]上,结果写入 x[rd]。忽略算术溢出。 sub rd, rs1, rs2 x[rd] = x[rs1] − x[rs2] x[rs1]减去 x[rs2],...
1.1. ADDI :ADDI指令格式为ADDI rd,rs1,immediate。x[rd] = x[rs1] + sext(imm) 1.2. SLT:SLTI指令格式为SLTI rd,rs1,immediate。x[rd] = x[rs1] < sext(immediate) 1.3. SLTIU :SLTIU指令格式为SLTIU rd,rs1,immediate。x[rd]= x[rs1] < sext(immediate) ...
addi x1, x1, -1 # 将x1减1 bnez x1, loop # 如果x1不等于零,则跳转到loop标签处继续执行 这里,li指令用于直接加载一个立即数到寄存器中,bnez是一条条件分支指令,用于判断寄存器中的值是否不等于零,如果条件成立,则跳转到指定标签处继续执行。通过这些基本指令的组合,我们可以构建出更为复杂的程序逻辑。
(1)nop 空指令,RISC-V没有提供nop 指令,而是用addi x0,x0,0来实现空指令,这条addi 使用x0作为目标存器,会丢弃结果,所以这条指令不会对程序状态产生任何影响,和空指令是完全等价的,这就不需要单独的空指令了。 (2)neg 取负数指令,RISC-V用 sub rd,x0,rs 来实现,x0-rs 等价于0-rs,等价于-rs,有...
example: C.LI 指令被扩展为 addi rd, x0, imm[5:0]。 3 整形运算 使用R或者I类指令 R类:寄存器-立即数 I类:寄存器-寄存器 整数计算不会造成运算异常 寄存器-立即数: ADDI:将12位有符号立即数和rs相加,溢出忽略,直接使用结果的最低32bit,并存入rd ...
example: C.LI 指令被扩展为 addi rd, x0, imm[5:0]。 3 整形运算 使用R或者I类指令 R类:寄存器-立即数 I类:寄存器-寄存器 整数计算不会造成运算异常 寄存器-立即数: ADDI:将12位有符号立即数和rs相加,溢出忽略,直接使用结果的最低32bit,并存入rd ...
该指令会与ADDI指令一起使用,目的是将低12位写入目标寄存器,以实现对32位的寄存器数值设置。LUI x10 ...