为什么 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,这会给你预期的结果。
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,这会给你预期的结果。