assembly - 为什么 riscv32 中的 mulh 指令给出 0?
问题描述
Multiplier = 0xffffffff
Multiplicand = 0xffffffff
Result = 0xFFFFFFFE 00000001 (multiplier * multiplicand)
mulh
指令应根据 RISC-Vs pec 给出结果的高 XLEN 位。但是当我mulh t0, a0, a1;
使用 multiplier ina0
和 multiplicand in运行时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);
解决方案
t0 中的结果为 0。有人可以解释为什么吗?
mulh
是签名×签名,所以你在做-1×-1!结果是 +1,在 64 位中,即 63 位的 0 后跟 1 位 — 所以自然而然,高 32 位(64 位 +1)的正确答案是全零。
[所需] 结果 = 0xFFFFFFFE 00000001(乘数 * 被乘数)
Try mulhu
,它代表无符号 × 无符号,这将为您提供您期望的结果。
推荐阅读
- reactjs - React - 带有 `document.body` 的`createPortal` 导致点击事件立即触发
- api - 问题 avec mon API en python
- python - 使用 pytest.ini 进行日志记录。如何附加到文件?
- javascript - Datetimepicker 下拉菜单未全尺寸显示
- node.js - 使用 AWS cognito 通过 SMS OTP 注册和登录
- javascript - 即将离开网站时禁用自己的后退按钮?(不是浏览器实现的)
- javascript - 如何从另一个表单组件更新书籍列表?
- vue.js - 如何从来自 API 的单个数据创建多个选项,以便在 VueJS 中将其显示为选择/下拉列表
- azure - 如何列出 Azure 网络安全组
- android - 反应原生图像/图标的理想格式和尺寸