算术溢出行为
整数加法结果只保留低 XLEN 位;算术溢出不会触发异常。需要检测溢出时,应由软件用额外比较或分支序列完成。
The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture, version 20260120, §2.4 Integer Computational Instructions将rs1与rs2相加,结果写入rd
ADD 采用 R 型格式(opcode=0110011,funct7=0000000,funct3=000)。将 rs1 与 rs2 的整数寄存器值相加,仅保留低 XLEN 位并写入 rd;算术溢出不会引发异常。rd=x0 时丢弃目的寄存器写入,x0 仍为零。
从机器码字段解析开始,依次展示操作数读取、该指令专属语义计算和 ISA 可见状态更新。
本例使用固定寄存器初值和初始 PC=0x2000;取指成功,没有异步中断或额外扩展检查。异常分支只显示普通提交停止,陷入后的 PC 和处理程序状态由 EEI 决定。
机器码按当前指令格式切成字段,动画从 encoding/decode 开始。
该动画展示 ISA 可见的解码和状态变化,不表示任何特定 CPU 的流水线、缓存、预测或时序实现。
ADD 是寄存器到寄存器的整数加法。RV32I/RV64I 语义是把 rs1 与 rs2 相加并写入 rd,算术溢出不会产生异常,结果按 XLEN 宽度截断。
以下要点按 RISC-V Unprivileged ISA 手册核准,用于补充操作语义、立即数范围和边界行为。
整数加法结果只保留低 XLEN 位;算术溢出不会触发异常。需要检测溢出时,应由软件用额外比较或分支序列完成。
The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture, version 20260120, §2.4 Integer Computational InstructionsADD 是 R-type 指令,两个源操作数都来自寄存器 rs1 和 rs2,结果写入 rd。立即数加法应使用 ADDI。
The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture, version 20260120, §2.4 Integer Computational InstructionsADD 使用两个寄存器操作数(rs1 + rs2),而 ADDI 使用一个寄存器和一个 12 位有符号立即数(rs1 + imm)。ADD 是 R-type 指令(opcode 0110011),ADDI 是 I-type 指令(opcode 0010011)。ADDI 的立即数可编码范围为 -2048 到 2047;ADD 的第二个加数来自 rs2,不是立即数。
ADD 和 SUB 都是 R-type 指令,共享 opcode=0110011 和 funct3=000。ADD 的 funct7=0000000,计算 rs1+rs2;SUB 的 funct7=0100000,计算 rs1-rs2。两者都保留结果的低 XLEN 位,算术溢出不触发异常。
结合 «add x5, x6, x7 # RV32I/RV64I: x6=20, x7=7 -> x5=27» 等实际代码理解该场景。
结合 «add x5, x6, x7 # RV32I/RV64I: x6=20, x7=7 -> x5=27» 等实际代码理解该场景。
结合 «add x5, x6, x7 # RV32I/RV64I: x6=20, x7=7 -> x5=27» 等实际代码理解该场景。
不会。RISC-V 基础整数加法忽略算术溢出,软件需要自行用比较或分支序列检测溢出。
两个操作数都在寄存器中时用 ADD;第二个操作数是 12 位有符号立即数时用 ADDI。