RISC-V 指令集中有四条比较指令,这四条又分为有无符号立即数版本和有无符号寄存器版本,分别是slti、sltiu、slt、sltu。 slti、sltiu 指令的形式如下所示: sltird,rs1,imm#slti 有符号立即数比较指令#rd 目标寄存器#rs1 源寄存器1(有符号数据)#imm 有符号立即数(-2048~2047)sltiurd,rs1,imm#sltiu 无符...
1 RISC-V指令命名 以slt指令为例,如下示意图:大括号{ }内列举了每组指令的所有变体,这些变体通过带下滑线的字母(单独的下划线_表示空字段),从左到右连接带下滑线的字母即可组成完整的指令集,比如slt意思是set less than,相当于是一种缩写,完整语句方便我们快速清晰的理解指令的作用。 下图表示:slt、slti、sltu、...
slti_ins 与 sltiu_ins 函数分别执行了 slti 和 sltiu 指令,都是拿 a0 寄存器和一个立即数比较,如果 a0 小于立即数就把 1 写入 a0 寄存器。 运行结果: 上图中是执行完slti a0,a0,-2048指令之后,执行jr ra指令之前的状态。如果看到 a0 寄存器中的值确实已经变成 1 了,就说明运算的结果是正确的。当 slt...
RV32I 的立即数比较指令如图 7 所示。无论是符号数比较还是无符号 数比较,图 7 中的 12 位立即数都应该通过符号位扩展变为 32 位立即数, 然后根据指令 12 ~ 14 位中的功能定义,来决定比较方式符号数(SLTI)/ 无符号数(SLTIU)。 图7. 立即数符号数/无符号数比较 比较时,如果源寄存器中的值小于该 32...
对于每幅图,将有下划线的字母从左到 右连接起来,即可组成完整的 RV32I 指令集。对于每一个图,集合标志{}内列举了指令的 所有变体,变体用加下划线的字母或下划线字符_表示。特别的,下划线字符_表示对于此 指令变体不需用字符表示。例如,下图表示了这四个 RV32I 指令:slt,slti,sltu,sltiu:...
R:寄存器-寄存器指令 I:立即数-寄存器指令(里面的立即数要拓展成32bit才能继续运算):一般用于访存load的指令 ADDI:寄存器+立即数 SLTI:寄存器指和立即数比较,小于立即数把1放入rd SLTIU:与SLTI相同,只不过是无符号数比较 SLLI:左移,移动位数由立即数指定,shift left logic immediate ...
SLTIU:和SLTI一致,不过都是无符号数 伪指令SEQZ:"SEQZ rd, rs" 实际上是 "SLTIU rd, rs1, 1" ANDI/ORI/XORI:rs与有符号12位立即数进行and,or,xor操作 伪指令NOT:"NOT rd, rs"实际上是"XORI rd, rs1, -1" shift是I类指令格式 SLLI:逻辑左移,低位移入0 ...
ADDI、SLTI、SLTIU、ANDI、ORI、XORI 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(immedi...
3. slti(set less than immediate):当rs1 < imm时,将rd设置为1,否则设置为0。 4. sltiu(set less than immediate, unsigned):当rs1 < imm时,将rd设置为1,否则设置为0。该指令适用于无符号数的比较。 二、使用比较大小指令 比较大小指令的基本用法是将两个操作数放在寄存器中,然后使用比较大小指令进行比...
同样,SLT与SLTI类似,SLT指令格式为SLT rd,rs1,rs2。x[rd] = x[rs1] < x[rs2] 如图3所示,SLT指令的funct7为000_0000,funct3为010。rs1和rs2当作有符号数进行比较, 如果rs1 < rs2, rd置1,否则置0。 指令示例: SLT x14,x12,x13 将x12和x13寄存器中的数当作有符号数进行比较,如果x12寄存器中的...