首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么riscv32中的mulh指令是0?

为什么riscv32中的mulh指令是0?
EN

Stack Overflow用户
提问于 2021-11-02 13:23:26
回答 1查看 143关注 0票数 0
代码语言:javascript
复制
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代码如下:

代码语言:javascript
复制
mulh_asm:
    mulh t0, a0, a1;
    addi a0, x0, 0; // **Break point here to watch t0 value**
ret;

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 15:56:50

在t0中的结果是0。谁能解释一下原因吗?

mulh代表有符号×有符号,所以你做的是-1×-1!结果是+1,在64位中,也就是63位,然后是1位-所以对于上面的32位(64位+1),正确的答案当然是零。

期望结果=0xFFFFFFE 00000001 (乘数*乘)

尝试mulhu,它用于无符号×无符号,这将给出您期望的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69811240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档