【问题标题】:Why mulh instruction in riscv32 gives 0?为什么 riscv32 中的 mulh 指令给出 0?
【发布时间】:2021-11-02 13:23:26
【问题描述】:
Multiplier = 0xffffffff
Multiplicand = 0xffffffff
Result = 0xFFFFFFFE 00000001 (multiplier * multiplicand)

mulh 指令应根据 RISC-Vs pec 给出结果的高 XLEN 位。但是当我在a0 中使用乘数和a1 中的乘数运行mulh t0, 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);

【问题讨论】:

  • 请编辑您的帖子以包含重现该行为的最小可编译示例。

标签: assembly riscv riscv32


【解决方案1】:

t0 中的结果为 0。有人可以解释为什么吗?

mulh 用于签名 × 签名,所以你在做 -1 × -1!结果是 +1,在 64 位中,即 63 位的 0 后跟 1 位 - 所以自然而然,高 32 位(64 位 +1)的正确答案是全零。

[Desired] 结果 = 0xFFFFFFFE 00000001(乘数 * 被乘数)

试试mulhu,它代表无符号×无符号,这会给你预期的结果。

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 2021-10-30
    • 2019-04-22
    • 2022-11-27
    • 1970-01-01
    • 2014-05-31
    • 2020-06-08
    • 2017-09-01
    • 2016-11-30
    相关资源
    最近更新 更多