RISC-V RV32I 指令集完整参考手册
| 游戏指令名 | RV指令 | 英文名 | 指令格式 | 域说明 | 游戏示例 | 标准RV汇编 | 说明 |
|---|---|---|---|---|---|---|---|
| 📮 直接送货 | li | Load Immediate | li rd, imm | rd=目标货架, imm=立即数 | li 货架1, 10 | li x1, 10 | 将立即数加载到目标货架(伪指令) |
| 🔄 货物转移 | mv | Move | mv rd, rs1 | rd=目标, rs1=源货架 | mv 货架1, 货架2 | mv x1, x2 | 将源货架的值复制到目标货架(伪指令) |
| 📦 仓库取货 | lw | Load Word | lw rd, offset(rs1) | rd=目标, rs1=基址, offset=偏移 | lw 货架1, 0(货架2) | lw x1, 0(x2) | 从内存地址(rs1+offset)加载字到rd |
| 🏭 仓库存货 | sw | Store Word | sw rs2, offset(rs1) | rs2=源, rs1=基址, offset=偏移 | sw 货架1, 4(货架2) | sw x1, 4(x2) | 将rs2的值存储到内存地址(rs1+offset) |
| 🚚 搬运加量 | addi | Add Immediate | addi rd, rs1, imm | rd=目标, rs1=源, imm=立即数 | addi 货架1, 货架2, 5 | addi x1, x2, 5 | rd = rs1 + imm(带符号12位立即数) |
| 📦📦 装载大数 | lui | Load Upper Immediate | lui rd, imm | rd=目标, imm=高20位 | lui 货架1, 0x12345 | lui x1, 0x12345 | 将立即数加载到rd的高20位,低12位置0 |
| 🧭 地址计算 | auipc | Add Upper Immediate to PC | auipc rd, imm | rd=目标, imm=高20位 | auipc 货架1, 0 | auipc x1, 0 | rd = PC + (imm << 12),用于位置无关代码 |
| 游戏指令名 | RV指令 | 英文名 | 指令格式 | 域说明 | 游戏示例 | 标准RV汇编 | 说明 |
|---|---|---|---|---|---|---|---|
| 🧙♂️ 加法魔法 | add | Add | add rd, rs1, rs2 | rd=目标, rs1=源1, rs2=源2 | add 货架1, 货架2, 货架3 | add x1, x2, x3 | rd = rs1 + rs2 |
| 🧙♀️ 减法魔法 | sub | Subtract | sub rd, rs1, rs2 | rd=目标, rs1=源1, rs2=源2 | sub 货架1, 货架2, 货架3 | sub x1, x2, x3 | rd = rs1 - rs2 |
| 🔮 与门魔法 | and | AND | and rd, rs1, rs2 | rd=目标, rs1=源1, rs2=源2 | and 货架1, 货架2, 货架3 | and x1, x2, x3 | rd = rs1 & rs2(按位与) |
| ✨ 或门魔法 | or | OR | or rd, rs1, rs2 | rd=目标, rs1=源1, rs2=源2 | or 货架1, 货架2, 货架3 | or x1, x2, x3 | rd = rs1 | rs2(按位或) |
| ⚡ 异或魔法 | xor | XOR | xor rd, rs1, rs2 | rd=目标, rs1=源1, rs2=源2 | xor 货架1, 货架2, 货架3 | xor x1, x2, x3 | rd = rs1 ^ rs2(按位异或) |
| ⬅️ 左移魔法 | sll | Shift Left Logical | sll rd, rs1, rs2 | rd=目标, rs1=源, rs2=移位量 | sll 货架1, 货架2, 货架3 | sll x1, x2, x3 | rd = rs1 << (rs2 & 0x1F)(逻辑左移) |
| ➡️ 右移魔法 | srl | Shift Right Logical | srl rd, rs1, rs2 | rd=目标, rs1=源, rs2=移位量 | srl 货架1, 货架2, 货架3 | srl x1, x2, x3 | rd = rs1 >>> (rs2 & 0x1F)(逻辑右移,补0) |
| ➡️📝 算术右移 | sra | Shift Right Arithmetic | sra rd, rs1, rs2 | rd=目标, rs1=源, rs2=移位量 | sra 货架1, 货架2, 货架3 | sra x1, x2, x3 | rd = rs1 >> (rs2 & 0x1F)(算术右移,符号扩展) |
| ⚖️ 小于比较 | slt | Set Less Than | slt rd, rs1, rs2 | rd=目标, rs1=源1, rs2=源2 | slt 货架1, 货架2, 货架3 | slt x1, x2, x3 | rd = (rs1 < rs2) ? 1 : 0(有符号比较) |
| ⚖️📋 无符号小于 | sltu | Set Less Than Unsigned | sltu rd, rs1, rs2 | rd=目标, rs1=源1, rs2=源2 | sltu 货架1, 货架2, 货架3 | sltu x1, x2, x3 | rd = (rs1 < rs2) ? 1 : 0(无符号比较) |
| 游戏指令名 | RV指令 | 英文名 | 指令格式 | 域说明 | 游戏示例 | 标准RV汇编 | 说明 |
|---|---|---|---|---|---|---|---|
| 🔮🔢 与数运算 | andi | AND Immediate | andi rd, rs1, imm | rd=目标, rs1=源, imm=立即数 | andi 货架1, 货架2, 255 | andi x1, x2, 255 | rd = rs1 & imm(按位与立即数) |
| ✨🔢 或数运算 | ori | OR Immediate | ori rd, rs1, imm | rd=目标, rs1=源, imm=立即数 | ori 货架1, 货架2, 128 | ori x1, x2, 128 | rd = rs1 | imm(按位或立即数) |
| ⚡🔢 异或数运算 | xori | XOR Immediate | xori rd, rs1, imm | rd=目标, rs1=源, imm=立即数 | xori 货架1, 货架2, 255 | xori x1, x2, 255 | rd = rs1 ^ imm(按位异或立即数) |
| ⬅️🔢 左移位数 | slli | Shift Left Logical Immediate | slli rd, rs1, shamt | rd=目标, rs1=源, shamt=移位量(0-31) | slli 货架1, 货架2, 2 | slli x1, x2, 2 | rd = rs1 << shamt(逻辑左移立即数) |
| ➡️🔢 右移位数 | srli | Shift Right Logical Immediate | srli rd, rs1, shamt | rd=目标, rs1=源, shamt=移位量(0-31) | srli 货架1, 货架2, 2 | srli x1, x2, 2 | rd = rs1 >>> shamt(逻辑右移立即数) |
| ➡️📝🔢 算术右移位 | srai | Shift Right Arithmetic Immediate | srai rd, rs1, shamt | rd=目标, rs1=源, shamt=移位量(0-31) | srai 货架1, 货架2, 2 | srai x1, x2, 2 | rd = rs1 >> shamt(算术右移立即数) |
| ⚖️🔢 小于数比较 | slti | Set Less Than Immediate | slti rd, rs1, imm | rd=目标, rs1=源, imm=立即数 | slti 货架1, 货架2, 10 | slti x1, x2, 10 | rd = (rs1 < imm) ? 1 : 0(有符号比较立即数) |
| ⚖️📋🔢 无符号小于数 | sltiu | Set Less Than Immediate Unsigned | sltiu rd, rs1, imm | rd=目标, rs1=源, imm=立即数 | sltiu 货架1, 货架2, 10 | sltiu x1, x2, 10 | rd = (rs1 < imm) ? 1 : 0(无符号比较立即数) |
| 游戏指令名 | RV指令 | 英文名 | 指令格式 | 域说明 | 游戏示例 | 标准RV汇编 | 说明 |
|---|---|---|---|---|---|---|---|
| 🎯 相等跳跃 | beq | Branch if Equal | beq rs1, rs2, offset | rs1=源1, rs2=源2, offset=偏移(±4KB) | beq 货架1, 货架2, 2 | beq x1, x2, label | if(rs1 == rs2) PC += offset(相等跳转) |
| 🏹 不等跳跃 | bne | Branch if Not Equal | bne rs1, rs2, offset | rs1=源1, rs2=源2, offset=偏移(±4KB) | bne 货架1, 货架2, 3 | bne x1, x2, label | if(rs1 != rs2) PC += offset(不等跳转) |
| 🎪 小于跳跃 | blt | Branch if Less Than | blt rs1, rs2, offset | rs1=源1, rs2=源2, offset=偏移(±4KB) | blt 货架1, 货架2, -2 | blt x1, x2, label | if(rs1 < rs2) PC += offset(小于跳转,有符号) |
| 🎭 大于等于跳 | bge | Branch if Greater or Equal | bge rs1, rs2, offset | rs1=源1, rs2=源2, offset=偏移(±4KB) | bge 货架1, 货架2, 4 | bge x1, x2, label | if(rs1 >= rs2) PC += offset(大于等于跳转,有符号) |
| 🎪📋 无符号小于 | bltu | Branch if Less Than Unsigned | bltu rs1, rs2, offset | rs1=源1, rs2=源2, offset=偏移(±4KB) | bltu 货架1, 货架2, 2 | bltu x1, x2, label | if(rs1 < rs2) PC += offset(小于跳转,无符号) |
| 🎭📋 无符号大等 | bgeu | Branch if Greater or Equal Unsigned | bgeu rs1, rs2, offset | rs1=源1, rs2=源2, offset=偏移(±4KB) | bgeu 货架1, 货架2, 2 | bgeu x1, x2, label | if(rs1 >= rs2) PC += offset(大于等于跳转,无符号) |
| 🚀 长距离跳跃 | jal | Jump and Link | jal rd, offset | rd=返回地址, offset=偏移(±1MB) | jal 货架1, 5 | jal x1, label | rd = PC + 4; PC += offset(跳转并保存返回地址) |
| 🚀📍 寄存器跳转 | jalr | Jump and Link Register | jalr rd, offset(rs1) | rd=返回地址, rs1=基址, offset=偏移 | jalr 货架1, 0(货架2) | jalr x1, 0(x2) | rd = PC + 4; PC = rs1 + offset(寄存器跳转) |