← 返回游戏

📚 RV 卡片大冒险 - 指令说明

RISC-V RV32I 指令集完整参考手册

🚚 搬运指令 (Move Instructions)
游戏指令名 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),用于位置无关代码
🧙‍♂️ 计算指令 (Arithmetic Instructions)
游戏指令名 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(无符号比较)
🔢 立算指令 (Immediate Arithmetic)
游戏指令名 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(无符号比较立即数)
🎯 跳转指令 (Branch & Jump Instructions)
游戏指令名 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(寄存器跳转)

📋 寄存器命名对照

货架1-8对应 RISC-V 寄存器 x1-x8 (ra, sp, gp, tp, t0-t2, s0)
rd目标寄存器 (Destination)
rs1, rs2源寄存器 (Source)
imm立即数 (Immediate),12位有符号整数 (-2048 到 2047)
offset偏移量,用于内存访问或跳转
shamt移位量 (Shift Amount),5位无符号 (0-31)