首页 > 解决方案 > 在没有 MUL 指令的情况下将常数与 ARM 中寄存器的值相乘

问题描述

我需要将寄存器(r1)的值乘以 16385 并将结果存储在同一个寄存器中,而无需在一行代码中使用 MUL 指令。

我知道使用 LSL 指令会将一个值乘以 2 的幂,但由于我试图乘以一个奇数,所以我不知道它是如何工作的。我看到另一个类似的问题,有人问如何将 a*17 相乘,提供的答案是 ADD r1, r1, r1 LSL #4。我不明白为什么这会导致值乘以 17,以及我怎么知道我乘以正确的值。

标签: armmultiplication

解决方案


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;


推荐阅读