assembly 解析算术题如何等同于ARM汇编指令

lrl1mhuk  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(94)

有了x= 5*x/16,这等于:

MOV r0, r0, LSR #4
ADD r1, r0, r0, LSL #2

请详细解释
我现在所理解的是第一行基本上是x/16。然后在第二行中,我对到底发生了什么感到困惑。我相信r0, LSL #2使它成为4x/16,但我不明白ADD r1, r0完全做了什么。我认为它添加了一个x使它成为5x/16,但我不确定是如何做到的。

jdg4fx2g

jdg4fx2g1#

初等代数。2^4 = 16。所以右移是一个无符号的除以16。如果我有一个十进制数3000,想除以100,我该怎么做?右移2是吗?100 = 10^2所以移位3000〉〉2是30,也就是3000/100。
(5)= 4 + 1 = 2^2 + 1。(5)=(4+1)=(4)+(1)
就像x〉〉4被16除一样x〈〈2是a乘以4。
(x4)+(x1)=(x〈〈2)+ x。
初等代数
乘五更容易看到与长乘法(也从小学,基地2是容易得多,比基地10)。
取四位ABCD乘以五0101。

abcd
*     0101
===========

在小学你会举个例子

abcd
  *   jk
  =======
    mmmm  this is k times all of abcd
   nnnn   this is j times all of abcd, because j is in the tens position 10^1
             it is shifted left one

以2为基数,你只需要与0或1相乘。

abcd
*     0101
===========
      abcd
     0000
+   abcd
==========

所以如果你想乘以十进制的6,那么它就是二进制的0110,所以你x*6 =(x〈〈2)+(x〈〈1)
10乘以10,1010二进制10 x =(x〈〈3)+(x〈〈1)或......((x〈〈2)+x)〈〈1)(5乘以2)。

相关问题