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);发布于 2021-11-02 15:56:50
在t0中的结果是0。谁能解释一下原因吗?
mulh代表有符号×有符号,所以你做的是-1×-1!结果是+1,在64位中,也就是63位,然后是1位-所以对于上面的32位(64位+1),正确的答案当然是零。
期望结果=0xFFFFFFE 00000001 (乘数*乘)
尝试mulhu,它用于无符号×无符号,这将给出您期望的结果。
https://stackoverflow.com/questions/69811240
复制相似问题