You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RV32IMAC架构下mulh指令计算两0xffffffff相乘结果为0的原因

问题原因解释

首先明确RISC-V三类乘法高位指令的定义差异:

  • mulh rs1, rs2:将两个32位有符号整数做乘法运算,返回64位结果的高32位
  • mulhu rs1, rs2:将两个32位无符号整数做乘法运算,返回64位结果的高32位
  • mulhsu rs1, rs2:将第一个操作数作为有符号整数、第二个作为无符号整数做乘法运算,返回64位结果的高32位

场景运算逻辑说明

你传入的0xffffffff在32位有符号整数编码规则下对应的数值是-1,因此mulh指令实际执行的运算逻辑为:

(-1) * (-1) = 1

数值1的64位有符号表示为0x00000000 00000001,因此高32位的返回结果就是0,该结果完全符合RISC-V规范要求,不属于硬件异常。

预期偏差的原因

你之前计算的0xffffffff * 0xffffffff = 0xFFFFFFFE 00000001是无符号整数乘法的结果,如果要得到该结果的高32位,应该使用mulhu指令而非mulh指令,替换指令后即可观测到t0返回0xFFFFFFFE的预期结果。

验证用修正代码示例

mulh_asm:
    mulhu t0, a0, a1;
    addi a0, x0, 0; // 断点处可观测到t0为0xfffffffe
ret;

mrest[0] = mulh_asm(0xffffffff,  0xffffffff);

内容的提问来源于stack exchange,提问作者RRON

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:45:02