为什么 riscv32 中的 mulh 指令给出 0?

Why mulh instruction in riscv32 gives 0?

Multiplier = 0xffffffff
Multiplicand = 0xffffffff
Result = 0xFFFFFFFE 00000001 (multiplier * multiplicand)

mulh 指令应根据 RISC-Vs pec 给出结果的高 XLEN 位。但是当我 运行 mulh t0, a0, a1; 乘数在 a0 和被乘数在 a1 时,结果 t0 是 0。有人可以解释为什么吗?我运行这个在RV32IMAC(FE310核心)。

下面的汇编和 C 代码:

mulh_asm:
    mulh t0, a0, a1;
    addi a0, x0, 0; // **Break point here to watch t0 value**
ret;

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

the result in t0 is 0. Can someone explain why?

mulh是有符号×有符号,所以你做的是-1×-1!结果为 +1,在 64 位中,即 63 位零后跟 1 位——因此自然地,(64 位 +1 的)高 32 位的正确答案全为零。

[Desired] Result = 0xFFFFFFFE 00000001 (multiplier * multiplicand)

试试 mulhu,它是 unsigned × unsigned,这会给你预期的结果。