arm - 在没有 MUL 指令的情况下将常数与 ARM 中寄存器的值相乘
问题描述
我需要将寄存器(r1)的值乘以 16385 并将结果存储在同一个寄存器中,而无需在一行代码中使用 MUL 指令。
我知道使用 LSL 指令会将一个值乘以 2 的幂,但由于我试图乘以一个奇数,所以我不知道它是如何工作的。我看到另一个类似的问题,有人问如何将 a*17 相乘,提供的答案是 ADD r1, r1, r1 LSL #4。我不明白为什么这会导致值乘以 17,以及我怎么知道我乘以正确的值。
解决方案
add r1, r1, r1, lsl #14
相当于r1 = r1 + (r1<<14);
还有,add r1, r1, r1, lsl #4
等价于r1 = r1 + (r1<<4);
which,又等价于r1 = 16*r1 + r1;
推荐阅读
- python - AttributeError: 'ShuffleDataset' 对象没有属性 'output_shapes' - 遵循 TF 教程时
- postgresql - 如何在 Postgresql 中将地球数据类型转换为 json
- php - 检查 url 文件是否存在直到文件存在
- c# - 将配置传递给 IHostedService
- swift - Google 退出并返回登录页面
- android - 需要使用不同的APK Version Code,但实际上并没有使用过
- javascript - 优化 HTML 以部署为小部件
- angular - src/app/pages/patients/wigs/waiting/waiting.component.ts(36,25) 中的错误:错误 TS2339:“WaitingService”类型上不存在属性“addWaiting”
- node.js - 访问函数外的变量
- c - 从内存地址制作指针