对于我的类,我必须编写一个汇编程序函数,它从一个向量的特定索引中获取一个BCD代码作为参数,并返回等效的整数值。我可能只使用基本的ARM指令集,如:
AND,EOR,SUB,RSB,ADD,CMP,CMN,TST,TEQ,ORR,MOV,BIC,MVN,LSL,LSR,ASR,ROR
并且不能使用乘法指令。
我知道转换通常是如何工作的,但我不知道它如何在不增加单个半字节的情况下工作。它与位移有关吗?
每个提示都很棒。
如果缺少一些信息,请原谅我,我真的很陌生。 如果有任何遗漏,这可能很重要 - 请告诉我,我会丰富它。
答案 0 :(得分:4)
嗯,应该发生的琐碎方式是重复添加乘法,你可以使用ADD
。
一种更为复杂的方法是,如果您意识到10*x = 8*x + x + x
和8
的乘法是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的简单方法,因为你只需要知道零时间表和那些时间表。