ARM 判断立即数合法性
立即数必须以8位作为基准(8位位图),如果这个数中‘1’的个数>=2,那么如果第一(高位)和最后一个‘1’(低位)之间的距离超过前后8位的范围内(包括它们两个本身),那么意味着,这个立即数的位图超过了8位,即不是合法的。如果等于8位,那这个立即数也未必一定是合法的。因为如果最后一个‘1’(低位)后面还跟着奇数个‘0’的话,这个立即数依然是不合法的(符合右移偶数位的规定)。只有当跟的‘0’的个数为偶数时,才是合法的。
立即数的存放是由两部分组成,一部分是8bits的字节,另外一部分用4bits来表示其循环位数。快速判断方法:
1 立即数的“1”bit位是不是都在一个byte的范围内,不在首先排除掉;www.zzzyk.com
2 满足1的条件,再看它是不是经过循环偶数位得到的,如不是则排除。
以下立即数
0x101,0x102,0xFF1,0xFF04,0xFF003,0xFFFFFFFF,0xF000001F
都是非法的!!编译器编译的时候会出现如下警告
error A0092: no immediate rotate operand can be created
补充:综合编程 , 其他综合 ,