ARM汇编程序BCD到整数w / o乘法指令

时间:2016-05-09 18:31:26

标签: assembly arm

对于我的类,我必须编写一个汇编程序函数,它从一个向量的特定索引中获取一个BCD代码作为参数,并返回等效的整数值。我可能只使用基本的ARM指令集,如:

AND,EOR,SUB,RSB,ADD,CMP,CMN,TST,TEQ,ORR,MOV,BIC,MVN,LSL,LSR,ASR,ROR

并且不能使用乘法指令。

我知道转换通常是如何工作的,但我不知道它如何在不增加单个半字节的情况下工作。它与位移有关吗?

每个提示都很棒。

如果缺少一些信息,请原谅我,我真的很陌生。 如果有任何遗漏,这可能很重要 - 请告诉我,我会丰富它。

2 个答案:

答案 0 :(得分:4)

嗯,应该发生的琐碎方式是重复添加乘法,你可以使用ADD

一种更为复杂的方法是,如果您意识到10*x = 8*x + x + x8的乘法是3的移位,那么您可以使用移位和两次加法来做到这一点。

答案 1 :(得分:2)

10 * x = 5 * 2 * x =(4 + 1)* 2 * x =(4x + x)* 2 =((x <2)+ x)<&lt; 1;

修改

是的,你必须做单个BCD数字。

    klmn
 *  1010
 =======
    0000 
   klmn
  0000
+klmn
=========
(klmn<<1)+(klmn<<3)

等等。

因此,上面的10可以是Jester所说的(只看一下比特)(x <3)+(x <1)。或者你可以看作5 * 2和5是101b或(x <&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt

100是(x <6)+(x <5)+(x <2)或每个取2((x <4)+(x <3) + X)LT;&2

或者用小学数学来看这个,其中k,l,m,n是任意位。

{
    "destination_addresses" : [],
    "error_message" : "This IP, site or mobile application is not authorized to use this API key. Request received from IP address XXXX, with empty referer",
    "origin_addresses" : [],
    "rows" : [],
    "status" : "REQUEST_DENIED"
}

时间100的情况你可以做10 *(10 * x),也许这是更少的转移和添加,也许不是。或者将它排除在外5 * 5 * 2 * 2 * x可以做5倍然后5倍然后只是改变结果。基本上我们在小学学到的所有这些都是基础2的简单方法,因为你只需要知道零时间表和那些时间表。